New Upstream Release - python-altair

Ready changes

Summary

Merged new upstream version: 5.0.1 (was: 4.2.0).

Diff

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..176a458
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+* text=auto
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 40922ad..37995c1 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -7,24 +7,70 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        python-version: [ '3.7', '3.8', '3.9', '3.10' ]
-    name: Python ${{ matrix.python-version }}
+        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
+        jsonschema-version: ["3.0", "4.17"]
+    name: py ${{ matrix.python-version }} js ${{ matrix.jsonschema-version }}
     steps:
-    - uses: actions/checkout@v1
-    - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v1
-      with:
-        python-version: ${{ matrix.python-version }}
-    - name: Set Up Chromedriver
-      run: |
-        sudo apt-get update
-        sudo apt-get --only-upgrade install google-chrome-stable
-        sudo apt-get -yqq install chromium-chromedriver
-    - name: Install dependencies
-      run: |
-        python -m pip install --upgrade pip
-        pip install .[dev]
-        pip install altair_saver
-    - name: Test with pytest
-      run: |
-        pytest --doctest-modules altair
+      - uses: actions/checkout@v3
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v4
+        with:
+          python-version: ${{ matrix.python-version }}
+      # - name: Set Up Chromedriver
+      #   run: |
+      #     sudo apt-get update
+      #     sudo apt-get --only-upgrade install google-chrome-stable
+      #     sudo apt-get -yqq install chromium-chromedriver
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install jsonschema==${{ matrix.jsonschema-version }}
+          pip install .[dev]
+          # pip install "selenium<4.3.0"
+          # pip install altair_saver
+      - name: Test that schema generation has no effect
+        run: |
+          python tools/generate_schema_wrapper.py
+          # This gets the paths of all files which were either deleted, modified
+          # or are not yet tracked by Git
+          files=`git ls-files --deleted --modified --others --exclude-standard`
+          # Depending on the shell it can happen that 'files' contains empty
+          # lines which are filtered out in the for loop below
+          files_cleaned=()
+          for i in "${files[@]}"; do
+            # Skip empty items
+            if [ -z "$i" ]; then
+              continue
+            fi
+            # Add the rest of the elements to a new array
+            files_cleaned+=("${i}")
+          done
+          if [ ${#files_cleaned[@]} -gt 0 ]; then
+              echo "The code generation modified the following files:"
+              echo $files
+              exit 1
+          fi
+      - name: Test with pytest
+        run: |
+          pytest --doctest-modules tests
+      # - name: Selected tests without vl-convert-python
+      #   run: |
+      #     pip uninstall vl-convert-python --yes
+      #     pytest -m save_engine --doctest-modules tests
+      # - name: Selected tests without vl-convert-python and altair_saver
+      #   run: |
+      #     pip uninstall altair_saver --yes
+      #     pytest -m save_engine --doctest-modules tests
+      - name: Selected tests with vl-convert-python and without altair_saver
+        run: |
+          # pip install vl-convert-python
+          pytest -m save_engine --doctest-modules tests
+      - name: Validate Vega-Lite schema
+        run: |
+          # We install all 'format' dependencies of jsonschema as check-jsonschema
+          # only does the 'format' checks which are installed.
+          # We can always use the latest jsonschema version here.
+          # uri-reference check is disabled as the URIs in the Vega-Lite schema do
+          # not conform RFC 3986.
+          pip install 'jsonschema[format]' check-jsonschema --upgrade
+          check-jsonschema --check-metaschema altair/vegalite/v5/schema/vega-lite-schema.json --disable-formats uri-reference
diff --git a/.github/workflows/docbuild.yml b/.github/workflows/docbuild.yml
index 1c99835..d7f7892 100644
--- a/.github/workflows/docbuild.yml
+++ b/.github/workflows/docbuild.yml
@@ -5,24 +5,21 @@ on: [push, pull_request]
 jobs:
   build:
     runs-on: ubuntu-latest
-    strategy:
-      matrix:
-        build-type: [ 'html', 'doctest' ]
-    name: ${{ matrix.build-type }}
     steps:
-    - uses: actions/checkout@v1
+    - uses: actions/checkout@v3
     - name: Set up Python 3.10
-      uses: actions/setup-python@v1
+      uses: actions/setup-python@v4
       with:
         python-version: "3.10"
     - name: Install dependencies
       run: |
         python -m pip install --upgrade pip
-        pip install .[dev]
-        pip install altair_saver
-        pip install -r doc/requirements.txt
-    - name: Run docbuild
+        pip install hatch
+    - name: Run doc:build-html
       run: |
-        cd doc && make ${{ matrix.build-type }}
+        hatch run doc:build-html
+    - name: Run doc:doctest
+      run: |
+        hatch run doc:doctest
 
         
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index e99381b..4542c43 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -5,18 +5,25 @@ on: [push, pull_request]
 jobs:
   build:
     runs-on: ubuntu-latest
-    name: black-flake8
+    name: black-ruff-mypy
     steps:
-    - uses: actions/checkout@v1
+    - uses: actions/checkout@v3
     - name: Set up Python 3.10
-      uses: actions/setup-python@v1
+      uses: actions/setup-python@v4
       with:
         python-version: "3.10"
+    # Installing all dependencies and not just the linters as mypy needs them for type checking
+    - name: Install dependencies
+      run: |
+        python -m pip install --upgrade pip
+        pip install .[dev]
     - name: Check formatting with black
       run: |
-        pip install black
+        black --diff --color .
         black --check .
-    - name: Lint with flake8
+    - name: Lint with ruff
+      run: |        
+        ruff check .
+    - name: Lint with mypy
       run: |
-        pip install flake8
-        flake8 .  --statistics
+        mypy altair tests
diff --git a/.gitignore b/.gitignore
index 509ef3e..34d423f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -70,3 +70,6 @@ Untitled*.ipynb
 
 # VSCode
 .vscode
+
+# hatch, doc generation
+data.json
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fcbae47..a71e92a 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -11,61 +11,75 @@ visualization.
 We are also seeking contributions of additional Jupyter notebook-based examples
 in our separate GitHub repository: https://github.com/altair-viz/altair_notebooks.
 
-The altair users mailing list can be found at
-https://groups.google.com/forum/#!forum/altair-viz. If you are working on
-Altair, you can talk to other developers in the `#altair` channel of the [Vega
-slack](https://bit.ly/join-vega-slack).
-
-## How To Contribute Code to Altair
+## How To Contribute Code to Vega-Altair
 
 ### Setting Up Your Environment
 
-Install the latest version of Altair locally using 
-```
-$ pip install git+https://github.com/altair-viz/altair/
-```
-Next step is to fork the repository on GitHub and clone the fork to you local
+Fork the Altair repository on GitHub and then clone the fork to you local
 machine. For more details on forking see the [GitHub
 Documentation](https://help.github.com/en/articles/fork-a-repo).
+
+```cmd
+git clone https://github.com/YOUR-USERNAME/altair.git
 ```
-$ git clone https://github.com/YOUR-USERNAME/altair.git
-```
-You can have a single clone of the repository that points to both your fork and
-the main package repository. These pointers to GitHub are called "remotes" .
-On your local clone you should run:
-```
-$ git remote add upstream https://github.com/altair-viz/altair.git
-$ git checkout master
-$ git pull upstream master
+
+To keep your fork up to date with changes in this repo,
+you can [use the fetch upstream button on GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork).
+
+Now you can install the latest version of Altair locally using `pip`.
+The `-e` flag indicates that your local changes will be reflected
+every time you open a new Python interpreter
+(instead of having to reinstall the package each time).
+
+```cmd
+cd altair/ 
+python -m pip install -e .[dev]
 ```
-And then you'll have all the updates in the master branch of your local fork.
-Note that git will complain if you've committed changes to your local master
-branch that are not on upstream (this is one reason it's good practice to **never**
-work directly on your master branch).
+
+'[dev]' indicates that pip should also install the development requirements
+which you can find in `pyproject.toml` (`[project.optional-dependencies]/dev`)
 
 ### Creating a Branch
 
-Once your local environment is up-to-date, you can create a new git branch which will
-contain your contribution:
-```
-$ git checkout -b <branch-name>
+Once your local environment is up-to-date, you can create a new git branch
+which will contain your contribution
+(always create a new branch instead of making changes to the master branch):
+
+```cmd
+git switch -c <your-branch-name>
 ```
+
 With this branch checked-out, make the desired changes to the package.
-Note that Altair code uses the [black](https://black.readthedocs.io/)
-code formatter, which you can apply to your modifications by installing
-and running black on the local directory:
-```
-$ pip install black
-$ black .
+
+### Testing your Changes
+
+Before suggesting your contributing your changing to the main Altair repository,
+it is recommended that you run the Altair test suite,
+which includes a number of tests to validate the correctness of your code:
+
+```cmd
+hatch run test
 ```
+
+
+This also runs the [`black`](https://black.readthedocs.io/) code formatter, [`ruff`](https://ruff.rs/) linter and [`mypy`](https://mypy-lang.org/) as type checker.
+
+
+Study the output of any failed tests and try to fix the issues
+before proceeding to the next section.
+
+### Creating a Pull Request
+
 When you are happy with your changes, you can commit them to your branch by running
+
+```cmd
+git add <modified-file>
+git commit -m "Some descriptive message about your change"
+git push origin <your-branch-name>
 ```
-$ git add <modified-file>
-$ git commit -m "Some descriptive message about your change"
-$ git push origin <branch-name>
-```
-Finally you will need to submit a pull request (PR) on GitHub asking to merge
-your example branch into Altair master. For details on creating a PR see GitHub
+
+You will then need to submit a pull request (PR) on GitHub asking to merge
+your example branch into the main Altair repository. For details on creating a PR see GitHub
 documentation [Creating a pull
 request](https://help.github.com/en/articles/creating-a-pull-request). You can
 add more details about your example in the PR such as motivation for the
@@ -77,23 +91,21 @@ automatically shown in the PR.
 Hopefully your PR will be answered in a timely manner and your contribution will
 help others in the future.
 
-### Testing your Changes
+## How To Contribute Documentation to Vega-Altair
 
-When you submit a pull request, Altair's continuous integration test suite will
-run a number of tests to validate the correctness of your code. It can be helpful
-when debugging to run those tests locally; to do this first install Altair's
-development requirements:
-```
-$ pip install -r requirements_dev.txt
-```
-and then run the test suite with:
-```
-$ make test
-```
+Altair documentation is written in [reStructuredText](http://docutils.sourceforge.net/rst.html)
+and compiled into html pages using [Sphinx](http://www.sphinx-doc.org/en/master/).
+Contributing to the documentation requires some extra dependencies and 
+we have some conventions and plugins that are used to help navigate the docs and 
+generate great Altair visualizations. 
 
-## Adding Examples
+Note that the [Altair website](https://altair-viz.github.io/)
+is only updated when a new version is released so your contribution might not show
+up for a while.
 
-We are always interested in new examples contributed from the community.  These
+### Adding Examples
+
+We are always interested in new examples contributed from the community. These
 could be everything from simple one-panel scatter and line plots, to more
 complicated layered or stacked plots, to more advanced interactive features.
 Before submitting a new example check the [Altair Example
@@ -134,8 +146,7 @@ Some additional notes:
   a title in the docstring underlined with `---`, and be sure that the size of
   the underline exactly matches the size of the title text.
 - If your example fits into a chart type but involves significant configuration
-  it should be in the `Case Studies` category. If your example doesn't fit well
-  into any category then it can be included in the `Other Charts` category.
+  it should be in the `Case Studies` category.
 - For consistency all data used for a visualization should be assigned to the
   variable `source`. Then `source` is passed to the `alt.Chart` object. See
   other examples for guidance. 
@@ -148,7 +159,33 @@ Some additional notes:
   included then it should be referenced by URL, such as `source =
   data.movies.url`. This is to ensure that Altair's automated test suite does
   not depend on availability of external HTTP resources.
-  
-Note that examples shown on the [Altair website](https://altair-viz.github.io/)
-are only updated when a new version is released so your new example might not show
-up there for a while. 
+- If VlConvert does not support PNG export of the chart (e.g. in the case of emoji),
+  then add the name of the example to the `SVG_EXAMPLES` set in 
+  `tests/examples_arguments_syntax/__init__.py` and `tests/examples_methods_syntax/__init__.py`
+
+### Building the Documentation Locally
+
+The process to build the documentation locally consists of three steps:
+
+1. Clean any previously generated files to ensure a clean build.
+2. Generate the documentation in HTML format.
+3. View the generated documentation using a local Python testing server.
+
+The specific commands for each step depend on your operating system.
+Make sure you execute the following commands from the root dir of altair and have [`hatch`](https://hatch.pypa.io/) installed in your local environment.
+
+- For MacOS and Linux, run the following commands in your terminal:
+```cmd
+hatch run doc:clean-all
+hatch run doc:build-html
+hatch run doc:serve
+```
+
+- For Windows, use these commands instead:
+```cmd
+hatch run doc:clean-all-win
+hatch run doc:build-html-win
+hatch run doc:serve
+```
+
+To view the documentation, open your browser and go to `http://localhost:8000`. To stop the server, use `^C` (control+c) in the terminal.
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index d470675..03635b4 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015, Brian E. Granger and Jake Vanderplas
+Copyright (c) 2015-2023, Vega-Altair Developers
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -11,7 +11,7 @@ modification, are permitted provided that the following conditions are met:
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.
 
-* Neither the name of altair nor the names of its
+* Neither the name of vega-altair nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.
 
diff --git a/MANIFEST.in b/MANIFEST.in
deleted file mode 100644
index 2b4c542..0000000
--- a/MANIFEST.in
+++ /dev/null
@@ -1,7 +0,0 @@
-include *.md
-include Makefile
-include LICENSE
-include CHANGES.md
-include requirements.txt
-include requirements_dev.txt
-recursive-include altair *.py *.json *.ipynb *.html
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 104479a..0000000
--- a/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-all: install
-
-install:
-	python setup.py install
-
-test :
-	black .
-	flake8 . --statistics
-	python -m pytest --pyargs --doctest-modules altair
-
-test-coverage:
-	python -m pytest --pyargs --doctest-modules --cov=altair --cov-report term altair
-
-test-coverage-html:
-	python -m pytest --pyargs --doctest-modules --cov=altair --cov-report html altair
diff --git a/NOTES_FOR_MAINTAINERS.md b/NOTES_FOR_MAINTAINERS.md
index c4b0647..255589b 100644
--- a/NOTES_FOR_MAINTAINERS.md
+++ b/NOTES_FOR_MAINTAINERS.md
@@ -5,10 +5,7 @@
 
 The core Python API for Altair can be found in the following locations:
 
-- ``altair/vegalite/v2/schema/``
-- ``altair/vegalite/v1/schema/``
-- ``altair/vega/v3/schema/``
-- ``altair/vega/v2/schema/``
+- ``altair/vegalite/v5/schema/``
 
 All the files within these directories are created automatically by running
 the following script from the root of the repository:
@@ -19,7 +16,7 @@ $ python tools/generate_schema_wrapper.py
 
 This script does a couple things:
 
-- downloads the appropriate schema files from the specified vega and vega-lite
+- downloads the appropriate schema files from the specified vega-lite
   release versions & copies the JSON file to the appropriate ``schema``
   directory
 - generates basic low-level schemapi wrappers from the definitions within
@@ -27,11 +24,11 @@ This script does a couple things:
 - generates a second layer of higher level wrappers for some vega-lite
   functionality; this is put in ``schema/channels.py`` and ``schema/mixins.py``
 
-The script output is designed to be deterministic; if vega/vega-lite versions
-are not changed, then running the script should overwrite the schema wrappers
+The script output is designed to be deterministic; if the vega-lite version
+is not changed, then running the script should overwrite the schema wrappers
 with identical copies.
 
-## Updating the Vega & Vega-Lite versions
+## Updating the Vega-Lite version
 
 The vega & vega-lite versions for the Python code can be updated by manually
 changing the ``SCHEMA_VERSION`` definition within
@@ -40,7 +37,7 @@ changing the ``SCHEMA_VERSION`` definition within
 This will update all of the automatically-generated files in the ``schema``
 directory for each version, but please note that it will *not* update other
 pieces (for example, the core of the Altair API, including methods and
-doc strings within ``altair/vegalite/v2/api.py``.
+doc strings within ``altair/vegalite/v5/api.py``.
 These additional methods have fairly good test coverage, so running the test
 suite should identify any inconsistencies:
 ```
diff --git a/README.md b/README.md
index 8add06b..0e3ab32 100644
--- a/README.md
+++ b/README.md
@@ -1,30 +1,32 @@
-# Altair <a href="https://altair-viz.github.io/"><img align="right" src="https://altair-viz.github.io/_static/altair-logo-light.png" height="50"></img></a>
+# Vega-Altair <a href="https://altair-viz.github.io/"><img align="right" src="https://altair-viz.github.io/_static/altair-logo-light.png" height="50"></img></a>
+
 
-[![build status](https://img.shields.io/travis/altair-viz/altair/master.svg?style=flat)](https://travis-ci.org/altair-viz/altair)
 [![github actions](https://github.com/altair-viz/altair/workflows/build/badge.svg)](https://github.com/altair-viz/altair/actions?query=workflow%3Abuild)
 [![code style black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
 [![JOSS Paper](https://joss.theoj.org/papers/10.21105/joss.01057/status.svg)](https://joss.theoj.org/papers/10.21105/joss.01057)
 [![PyPI - Downloads](https://img.shields.io/pypi/dm/altair)](https://pypi.org/project/altair)
-[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/altair-viz/altair_notebooks/master?urlpath=lab/tree/notebooks/Index.ipynb)
-[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/altair-viz/altair_notebooks/blob/master/notebooks/Index.ipynb)
 
-[https://altair-viz.github.io](https://altair-viz.github.io)
-
-**Altair** is a declarative statistical visualization library for Python. With Altair, you can spend more time understanding your data and its meaning. Altair's
+**Vega-Altair** is a declarative statistical visualization library for Python. With Vega-Altair, you can spend more time understanding your data and its meaning. Vega-Altair's
 API is simple, friendly and consistent and built on top of the powerful
 [Vega-Lite](https://github.com/vega/vega-lite) JSON specification. This elegant
-simplicity produces beautiful and effective visualizations with a minimal amount of code. *Altair is developed by [Jake Vanderplas](https://github.com/jakevdp) and [Brian
+simplicity produces beautiful and effective visualizations with a minimal amount of code. 
+
+*Vega-Altair was originally developed by [Jake Vanderplas](https://github.com/jakevdp) and [Brian
 Granger](https://github.com/ellisonbg) in close collaboration with the [UW
 Interactive Data Lab](https://idl.cs.washington.edu/).*
+*The Vega-Altair open source project is not affiliated with Altair Engineering, Inc.*
 
-## Altair Documentation
+## Documentation
 
-See [Altair's Documentation Site](https://altair-viz.github.io),
-as well as Altair's [Tutorial Notebooks](https://github.com/altair-viz/altair_notebooks).
+See [Vega-Altair's Documentation Site](https://altair-viz.github.io) as well as the [Tutorial Notebooks](https://github.com/altair-viz/altair_notebooks). You can
+run the notebooks directly in your browser by clicking on one of the following badges:
+
+[![Binder](https://beta.mybinder.org/badge.svg)](https://beta.mybinder.org/v2/gh/altair-viz/altair_notebooks/master)
+[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/altair-viz/altair_notebooks/blob/master/notebooks/Index.ipynb)
 
 ## Example
 
-Here is an example using Altair to quickly visualize and display a dataset with the native Vega-Lite renderer in the JupyterLab:
+Here is an example using Vega-Altair to quickly visualize and display a dataset with the native Vega-Lite renderer in the JupyterLab:
 
 ```python
 import altair as alt
@@ -40,9 +42,9 @@ alt.Chart(cars).mark_point().encode(
 )
 ```
 
-![Altair Visualization](https://raw.githubusercontent.com/altair-viz/altair/master/images/cars.png)
+![Vega-Altair Visualization](https://raw.githubusercontent.com/altair-viz/altair/master/images/cars.png)
 
-One of the unique features of Altair, inherited from Vega-Lite, is a declarative grammar of not just visualization, but _interaction_. 
+One of the unique features of Vega-Altair, inherited from Vega-Lite, is a declarative grammar of not just visualization, but _interaction_. 
 With a few modifications to the example above we can create a linked histogram that is filtered based on a selection of the scatter plot.
 
 ```python 
@@ -51,13 +53,13 @@ from vega_datasets import data
 
 source = data.cars()
 
-brush = alt.selection(type='interval')
+brush = alt.selection_interval()
 
 points = alt.Chart(source).mark_point().encode(
     x='Horsepower',
     y='Miles_per_Gallon',
     color=alt.condition(brush, 'Origin', alt.value('lightgray'))
-).add_selection(
+).add_params(
     brush
 )
 
@@ -72,181 +74,52 @@ bars = alt.Chart(source).mark_bar().encode(
 points & bars
 ```
 
-![Altair Visualization Gif](https://raw.githubusercontent.com/altair-viz/altair/master/images/cars_scatter_bar.gif)
-
-
-## Getting your Questions Answered
-
-If you have a question that is not addressed in the documentation, there are several ways to ask:
-
-- open a [Github Issue](https://github.com/altair-viz/altair/issues)
-- post a [StackOverflow Question](https://stackoverflow.com/questions/tagged/altair) (be sure to use the `altair` tag)
-- ask on the [Altair Google Group](https://groups.google.com/forum/#!forum/altair-viz)
-
-We'll do our best to get your question answered
-
-## A Python API for statistical visualizations
-
-Altair provides a Python API for building statistical visualizations in a declarative
-manner. By statistical visualization we mean:
-
-* The **data source** is a `DataFrame` that consists of columns of different data types (quantitative, ordinal, nominal and date/time).
-* The `DataFrame` is in a [tidy format](https://vita.had.co.nz/papers/tidy-data.pdf)
-  where the rows correspond to samples and the columns correspond to the observed variables.
-* The data is mapped to the **visual properties** (position, color, size, shape,
-  faceting, etc.) using the group-by data transformation.
-
-The Altair API contains no actual visualization rendering code but instead
-emits JSON data structures following the
-[Vega-Lite](https://github.com/vega/vega-lite) specification. The resulting
-Vega-Lite JSON data can be rendered in the following user-interfaces:
-
-* [Jupyter Notebook](https://github.com/jupyter/notebook) (by installing [ipyvega](https://github.com/vega/ipyvega)).
-* [JupyterLab](https://github.com/jupyterlab/jupyterlab) (no additional dependencies needed).
-* [nteract](https://github.com/nteract/nteract) (no additional dependencies needed).
+![Vega-Altair Visualization Gif](https://raw.githubusercontent.com/altair-viz/altair/master/images/cars_scatter_bar.gif)
 
 ## Features
-
-* Carefully-designed, declarative Python API based on
-  [traitlets](https://github.com/ipython/traitlets).
+* Carefully-designed, declarative Python API.
 * Auto-generated internal Python API that guarantees visualizations are type-checked and
   in full conformance with the [Vega-Lite](https://github.com/vega/vega-lite)
   specification.
-* Auto-generate Altair Python code from a Vega-Lite JSON spec.
-* Display visualizations in the live Jupyter Notebook, JupyterLab, nteract, on GitHub and
-  [nbviewer](https://nbviewer.jupyter.org/).
-* Export visualizations to PNG/SVG images, stand-alone HTML pages and the
+* Display visualizations in JupyterLab, Jupyter Notebook, Visual Studio Code, on GitHub and
+  [nbviewer](https://nbviewer.jupyter.org/), and many more.
+* Export visualizations to various formats such as PNG/SVG images, stand-alone HTML pages and the
 [Online Vega-Lite Editor](https://vega.github.io/editor/#/).
 * Serialize visualizations as JSON files.
-* Explore Altair with dozens of examples in the [Example Gallery](https://altair-viz.github.io/gallery/index.html)
 
 ## Installation
-
-To use Altair for visualization, you need to install two sets of tools
-
-1. The core Altair Package and its dependencies
-
-2. The renderer for the frontend you wish to use (i.e. `Jupyter Notebook`,
-   `JupyterLab`, or `nteract`)
-
-Altair can be installed with either ``pip`` or with ``conda``.
-For full installation instructions, please see
-https://altair-viz.github.io/getting_started/installation.html
-
-## Example and tutorial notebooks
-
-We maintain a separate Github repository of Jupyter Notebooks that contain an
-interactive tutorial and examples:
-
-https://github.com/altair-viz/altair_notebooks
-
-To launch a live notebook server with those notebook using [binder](https://mybinder.org/) or
-[Colab](https://colab.research.google.com), click on one of the following badges:
-
-[![Binder](https://beta.mybinder.org/badge.svg)](https://beta.mybinder.org/v2/gh/altair-viz/altair_notebooks/master)
-[![Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/altair-viz/altair_notebooks/blob/master/notebooks/Index.ipynb)
-
-## Project philosophy
-
-Many excellent plotting libraries exist in Python, including the main ones:
-
-* [Matplotlib](https://matplotlib.org/)
-* [Bokeh](https://bokeh.pydata.org/en/latest/)
-* [Seaborn](https://seaborn.pydata.org/)
-* [Lightning](https://github.com/lightning-viz/lightning)
-* [Plotly](https://plot.ly/)
-* [Pandas built-in plotting](https://pandas.pydata.org/pandas-docs/stable/visualization.html)
-* [HoloViews](https://holoviews.org)
-* [VisPy](https://vispy.org/)
-* [pygg](https://www.github.com/sirrice/pygg)
-
-Each library does a particular set of things well.
-
-### User challenges
-
-However, such a proliferation of options creates great difficulty for users
-as they have to wade through all of these APIs to find which of them is the
-best for the task at hand. None of these libraries are optimized for
-high-level statistical visualization, so users have to assemble their own
-using a mishmash of APIs. For individuals just learning data science, this
-forces them to focus on learning APIs rather than exploring their data.
-
-Another challenge is current plotting APIs require the user to write code,
-even for incidental details of a visualization. This results in an unfortunate
-and unnecessary cognitive burden as the visualization type (histogram,
-scatterplot, etc.) can often be inferred using basic information such as the
-columns of interest and the data types of those columns.
-
-For example, if you are interested in the visualization of two numerical
-columns, a scatterplot is almost certainly a good starting point. If you add
-a categorical column to that, you probably want to encode that column using
-colors or facets. If inferring the visualization proves difficult at times, a
-simple user interface can construct a visualization without any coding.
-[Tableau](https://www.tableau.com/) and the [Interactive Data
-Lab's](https://idl.cs.washington.edu/)
-[Polestar](https://github.com/vega/polestar) and
-[Voyager](https://github.com/vega/voyager) are excellent examples of such UIs.
-
-### Design approach and solution
-
-We believe that these challenges can be addressed without the creation of yet
-another visualization library that has a programmatic API and built-in
-rendering. Altair's approach to building visualizations uses a layered design
-that leverages the full capabilities of existing visualization libraries:
-
-1. Create a constrained, simple Python API (Altair) that is purely declarative
-2. Use the API (Altair) to emit JSON output that follows the Vega-Lite spec
-3. Render that spec using existing visualization libraries
-
-This approach enables users to perform exploratory visualizations with a much
-simpler API initially, pick an appropriate renderer for their usage case, and
-then leverage the full capabilities of that renderer for more advanced plot
-customization.
-
-We realize that a declarative API will necessarily be limited compared to the
-full programmatic APIs of Matplotlib, Bokeh, etc. That is a deliberate design
-choice we feel is needed to simplify the user experience of exploratory
-visualization.
-
-## Development install
-
-Altair requires the following dependencies:
-
-* [pandas](https://pandas.pydata.org/)
-* [traitlets](https://github.com/ipython/traitlets)
-* [IPython](https://github.com/ipython/ipython)
-
-If you have cloned the repository, run the following command from the root of the repository:
-
-```
-pip install -e .[dev]
+Vega-Altair can be installed with:
+```bash
+pip install altair
 ```
 
-If you do not wish to clone the repository, you can install using:
-
-```
-pip install git+https://github.com/altair-viz/altair
+If you are using the conda package manager, the equivalent is:
+```bash
+conda install altair -c conda-forge
 ```
 
-## Testing
+For full installation instructions, please see [the documentation](https://altair-viz.github.io/getting_started/installation.html).
+
+## Getting Help
+If you have a question that is not addressed in the documentation, 
+you can post it on [StackOverflow](https://stackoverflow.com/questions/tagged/altair) using the `altair` tag.
+For bugs and feature requests, please open a [Github Issue](https://github.com/altair-viz/altair/issues).
 
-To run the test suite you must have [py.test](https://pytest.org/latest/) installed.
-To run the tests, use
+## Development
+You can find the instructions on how to install the package for development in [the documentation](https://altair-viz.github.io/getting_started/installation.html).
 
+To run the tests and linters, use
 ```
-py.test --pyargs altair
+hatch run test
 ```
-(you can omit the `--pyargs` flag if you are running the tests from a source checkout).
-
-## Feedback and Contribution
 
-See [`CONTRIBUTING.md`](https://github.com/altair-viz/altair/blob/master/CONTRIBUTING.md)
-
-## Citing Altair
+For information on how to contribute your developments back to the Vega-Altair repository, see
+[`CONTRIBUTING.md`](https://github.com/altair-viz/altair/blob/master/CONTRIBUTING.md)
 
+## Citing Vega-Altair
 [![JOSS Paper](https://joss.theoj.org/papers/10.21105/joss.01057/status.svg)](https://joss.theoj.org/papers/10.21105/joss.01057)
 
-If you use Altair in academic work, please consider citing https://joss.theoj.org/papers/10.21105/joss.01057 as
+If you use Vega-Altair in academic work, please consider citing https://joss.theoj.org/papers/10.21105/joss.01057 as
 
 ```bib
 @article{VanderPlas2018,
@@ -262,7 +135,7 @@ If you use Altair in academic work, please consider citing https://joss.theoj.or
     journal = {Journal of Open Source Software}
 }
 ```
-Please additionally consider citing the [vega-lite](https://vega.github.io/vega-lite/) project, which Altair is based on: https://dl.acm.org/doi/10.1109/TVCG.2016.2599030
+Please additionally consider citing the [Vega-Lite](https://vega.github.io/vega-lite/) project, which Vega-Altair is based on: https://dl.acm.org/doi/10.1109/TVCG.2016.2599030
 ```bib
 @article{Satyanarayan2017,
     author={Satyanarayan, Arvind and Moritz, Dominik and Wongsuphasawat, Kanit and Heer, Jeffrey},
@@ -275,7 +148,3 @@ Please additionally consider citing the [vega-lite](https://vega.github.io/vega-
     publisher={IEEE}
 } 
 ```
-
-## Whence Altair?
-
-Altair is the [brightest star](https://en.wikipedia.org/wiki/Altair) in the constellation Aquila, and along with Deneb and Vega forms the northern-hemisphere asterism known as the [Summer Triangle](https://en.wikipedia.org/wiki/Summer_Triangle).
diff --git a/RELEASING.md b/RELEASING.md
index 9eaf080..8802973 100644
--- a/RELEASING.md
+++ b/RELEASING.md
@@ -1,66 +1,65 @@
-1. Make certain your branch is in sync with head
-   
-       $ git pull upstream master
-   
-2. Do a clean doc build:
+1. Create a new virtual environment following the instructions in `CONTRIBUTING.md`. 
+   Make sure to also install all dependencies for the documentation including `altair_saver`
+   and uninstall `vl-convert-python` (this is not needed for normal contributions to the repo, see `CONTRIBUTING.md` for details).
+
+2. Make certain your branch is in sync with head:
+ 
+       git pull upstream master
+
+3. Do a clean doc build:
 
-       $ cd doc
-       $ make clean-all
-       $ make html
-       $ cd _build/html; python -m http.server
+       hatch run doc:clean-all
+       hatch run doc:build-html
+       hatch run doc:serve
    
    Navigate to http://localhost:8000 and ensure it looks OK (particularly
    do a visual scan of the gallery thumbnails).
 
-3. Make sure changes.rst is up to date for the release: compare against PRs
+4. Make sure changes.rst is up to date for the release: compare against PRs
    merged since the last release & update top heading with release date.
 
-4. Update version to, e.g. 2.0.0
+5. Update version to, e.g. 5.0.0:
 
    - in ``altair/__init__.py``
    - in ``doc/conf.py`` (two places)
 
-5. Double-check that all vega-lite/vega/vega-embed versions are up-to-date:
+6. Double-check that all vega-lite/vega/vega-embed versions are up-to-date:
 
    - URLs in ``doc/conf.py``
-   - versions in ``altair/vegalite/v4/display.py``
+   - versions in ``altair/vegalite/v5/display.py``
 
-6. Commit change and push to master
+7. Commit change and push to master:
 
        git add . -u
-       git commit -m "MAINT: bump version to 2.0.0"
+       git commit -m "MAINT: bump version to 5.0.0"
        git push upstream master
 
-7. Tag the release:
+8. Tag the release:
 
-       git tag -a v2.0.0 -m "version 2.0.0 release"
-       git push upstream v2.0.0
+       git tag -a v5.0.0 -m "version 5.0.0 release"
+       git push upstream v5.0.0
 
-8. Build source & wheel distributions
+9. Build source & wheel distributions:
 
-       rm -r dist build  # clean old builds & distributions
-       python setup.py sdist  # create a source distribution
-       python setup.py bdist_wheel  # create a universal wheel
+       hatch clean  # clean old builds & distributions
+       hatch build  # create a source distribution and universal wheel
 
-9. publish to PyPI (Requires correct PyPI owner permissions)
+10. publish to PyPI (Requires correct PyPI owner permissions):
 
-       twine upload dist/*
+        hatch publish
 
-10. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io)
+11. build and publish docs (Requires write-access to altair-viz/altair-viz.github.io):
 
-        cd doc
-        make clean-all
-        make html
-        bash sync_website.sh
+        hatch run doc:publish-clean-build
 
-11. update version to, e.g. 2.1.0dev
+12. update version to, e.g. 5.1.0dev:
 
     - in ``altair/__init__.py``
     - in ``doc/conf.py`` (two places)
 
-12. add a new changelog entry for the unreleased version:
+13. add a new changelog entry for the unreleased version:
 
-       Version 2.1.0 (unreleased)
+       Version 5.1.0 (unreleased)
        --------------------------
 
        Enhancements
@@ -70,15 +69,15 @@
        Backward-Incompatible Changes
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-13. Commit change and push to master
+14. Commit change and push to master:
 
         git add . -u
-        git commit -m "MAINT: bump version to 2.1.0dev"
+        git commit -m "MAINT: bump version to 5.1.0dev"
         git push upstream master
 
-14. Double-check that a conda-forge pull request is generated from the updated
+15. Double-check that a conda-forge pull request is generated from the updated
     pip package by the conda-forge bot (may take up to ~an hour):
     https://github.com/conda-forge/altair-feedstock/pulls
 
-15. Copy changes.rst section into release notes within
+16. Copy changes.rst section into release notes within
     https://github.com/altair-viz/altair/releases/, and publish the release.
diff --git a/altair/__init__.py b/altair/__init__.py
index 7079e8c..ad57eb9 100644
--- a/altair/__init__.py
+++ b/altair/__init__.py
@@ -1,12 +1,613 @@
-# flake8: noqa
-__version__ = "4.2.0"
+# ruff: noqa
+__version__ = "5.0.1"
+
+from typing import Any
+
+# Necessary as mypy would see expr as the module alt.expr although due to how
+# the imports are set up it is expr in the alt.expr module
+expr: Any
+
+
+# The content of __all__ is automatically written by
+# tools/update_init_file.py. Do not modify directly.
+__all__ = [
+    "Aggregate",
+    "AggregateOp",
+    "AggregateTransform",
+    "AggregatedFieldDef",
+    "Align",
+    "AllSortString",
+    "Angle",
+    "AngleDatum",
+    "AngleValue",
+    "AnyMark",
+    "AnyMarkConfig",
+    "AreaConfig",
+    "ArgmaxDef",
+    "ArgminDef",
+    "AutoSizeParams",
+    "AutosizeType",
+    "Axis",
+    "AxisConfig",
+    "AxisOrient",
+    "AxisResolveMap",
+    "BBox",
+    "BarConfig",
+    "BaseTitleNoValueRefs",
+    "Baseline",
+    "Bin",
+    "BinExtent",
+    "BinParams",
+    "BinTransform",
+    "BindCheckbox",
+    "BindDirect",
+    "BindInput",
+    "BindRadioSelect",
+    "BindRange",
+    "Binding",
+    "Blend",
+    "BoxPlot",
+    "BoxPlotConfig",
+    "BoxPlotDef",
+    "BrushConfig",
+    "CalculateTransform",
+    "Categorical",
+    "Chart",
+    "Color",
+    "ColorDatum",
+    "ColorDef",
+    "ColorName",
+    "ColorScheme",
+    "ColorValue",
+    "Column",
+    "CompositeMark",
+    "CompositeMarkDef",
+    "CompositionConfig",
+    "ConcatChart",
+    "ConcatSpecGenericSpec",
+    "ConditionalAxisColor",
+    "ConditionalAxisLabelAlign",
+    "ConditionalAxisLabelBaseline",
+    "ConditionalAxisLabelFontStyle",
+    "ConditionalAxisLabelFontWeight",
+    "ConditionalAxisNumber",
+    "ConditionalAxisNumberArray",
+    "ConditionalAxisPropertyAlignnull",
+    "ConditionalAxisPropertyColornull",
+    "ConditionalAxisPropertyFontStylenull",
+    "ConditionalAxisPropertyFontWeightnull",
+    "ConditionalAxisPropertyTextBaselinenull",
+    "ConditionalAxisPropertynumberArraynull",
+    "ConditionalAxisPropertynumbernull",
+    "ConditionalAxisPropertystringnull",
+    "ConditionalAxisString",
+    "ConditionalMarkPropFieldOrDatumDef",
+    "ConditionalMarkPropFieldOrDatumDefTypeForShape",
+    "ConditionalParameterMarkPropFieldOrDatumDef",
+    "ConditionalParameterMarkPropFieldOrDatumDefTypeForShape",
+    "ConditionalParameterStringFieldDef",
+    "ConditionalParameterValueDefGradientstringnullExprRef",
+    "ConditionalParameterValueDefTextExprRef",
+    "ConditionalParameterValueDefnumber",
+    "ConditionalParameterValueDefnumberArrayExprRef",
+    "ConditionalParameterValueDefnumberExprRef",
+    "ConditionalParameterValueDefstringExprRef",
+    "ConditionalParameterValueDefstringnullExprRef",
+    "ConditionalPredicateMarkPropFieldOrDatumDef",
+    "ConditionalPredicateMarkPropFieldOrDatumDefTypeForShape",
+    "ConditionalPredicateStringFieldDef",
+    "ConditionalPredicateValueDefAlignnullExprRef",
+    "ConditionalPredicateValueDefColornullExprRef",
+    "ConditionalPredicateValueDefFontStylenullExprRef",
+    "ConditionalPredicateValueDefFontWeightnullExprRef",
+    "ConditionalPredicateValueDefGradientstringnullExprRef",
+    "ConditionalPredicateValueDefTextBaselinenullExprRef",
+    "ConditionalPredicateValueDefTextExprRef",
+    "ConditionalPredicateValueDefnumber",
+    "ConditionalPredicateValueDefnumberArrayExprRef",
+    "ConditionalPredicateValueDefnumberArraynullExprRef",
+    "ConditionalPredicateValueDefnumberExprRef",
+    "ConditionalPredicateValueDefnumbernullExprRef",
+    "ConditionalPredicateValueDefstringExprRef",
+    "ConditionalPredicateValueDefstringnullExprRef",
+    "ConditionalStringFieldDef",
+    "ConditionalValueDefGradientstringnullExprRef",
+    "ConditionalValueDefTextExprRef",
+    "ConditionalValueDefnumber",
+    "ConditionalValueDefnumberArrayExprRef",
+    "ConditionalValueDefnumberExprRef",
+    "ConditionalValueDefstringExprRef",
+    "ConditionalValueDefstringnullExprRef",
+    "Config",
+    "CsvDataFormat",
+    "Cursor",
+    "Cyclical",
+    "Data",
+    "DataFormat",
+    "DataSource",
+    "Datasets",
+    "DateTime",
+    "DatumChannelMixin",
+    "DatumDef",
+    "Day",
+    "DensityTransform",
+    "DerivedStream",
+    "Description",
+    "DescriptionValue",
+    "Detail",
+    "Dict",
+    "DictInlineDataset",
+    "DictSelectionInit",
+    "DictSelectionInitInterval",
+    "Diverging",
+    "DomainUnionWith",
+    "DsvDataFormat",
+    "Element",
+    "Encoding",
+    "EncodingSortField",
+    "ErrorBand",
+    "ErrorBandConfig",
+    "ErrorBandDef",
+    "ErrorBar",
+    "ErrorBarConfig",
+    "ErrorBarDef",
+    "ErrorBarExtent",
+    "EventStream",
+    "EventType",
+    "Expr",
+    "ExprRef",
+    "Facet",
+    "FacetChart",
+    "FacetEncodingFieldDef",
+    "FacetFieldDef",
+    "FacetMapping",
+    "FacetSpec",
+    "FacetedEncoding",
+    "FacetedUnitSpec",
+    "Feature",
+    "FeatureCollection",
+    "FeatureGeometryGeoJsonProperties",
+    "Field",
+    "FieldChannelMixin",
+    "FieldDefWithoutScale",
+    "FieldEqualPredicate",
+    "FieldGTEPredicate",
+    "FieldGTPredicate",
+    "FieldLTEPredicate",
+    "FieldLTPredicate",
+    "FieldName",
+    "FieldOneOfPredicate",
+    "FieldOrDatumDefWithConditionDatumDefGradientstringnull",
+    "FieldOrDatumDefWithConditionDatumDefnumber",
+    "FieldOrDatumDefWithConditionDatumDefnumberArray",
+    "FieldOrDatumDefWithConditionDatumDefstringnull",
+    "FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull",
+    "FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull",
+    "FieldOrDatumDefWithConditionMarkPropFieldDefnumber",
+    "FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray",
+    "FieldOrDatumDefWithConditionStringDatumDefText",
+    "FieldOrDatumDefWithConditionStringFieldDefText",
+    "FieldOrDatumDefWithConditionStringFieldDefstring",
+    "FieldRange",
+    "FieldRangePredicate",
+    "FieldValidPredicate",
+    "Fill",
+    "FillDatum",
+    "FillOpacity",
+    "FillOpacityDatum",
+    "FillOpacityValue",
+    "FillValue",
+    "FilterTransform",
+    "Fit",
+    "FlattenTransform",
+    "FoldTransform",
+    "FontStyle",
+    "FontWeight",
+    "Generator",
+    "GenericUnitSpecEncodingAnyMark",
+    "GeoJsonFeature",
+    "GeoJsonFeatureCollection",
+    "GeoJsonProperties",
+    "Geometry",
+    "GeometryCollection",
+    "Gradient",
+    "GradientStop",
+    "GraticuleGenerator",
+    "GraticuleParams",
+    "HConcatChart",
+    "HConcatSpecGenericSpec",
+    "Header",
+    "HeaderConfig",
+    "HexColor",
+    "Href",
+    "HrefValue",
+    "Impute",
+    "ImputeMethod",
+    "ImputeParams",
+    "ImputeSequence",
+    "ImputeTransform",
+    "InlineData",
+    "InlineDataset",
+    "Interpolate",
+    "IntervalSelectionConfig",
+    "IntervalSelectionConfigWithoutType",
+    "JoinAggregateFieldDef",
+    "JoinAggregateTransform",
+    "JsonDataFormat",
+    "Key",
+    "LabelOverlap",
+    "LatLongDef",
+    "LatLongFieldDef",
+    "Latitude",
+    "Latitude2",
+    "Latitude2Datum",
+    "Latitude2Value",
+    "LatitudeDatum",
+    "LayerChart",
+    "LayerRepeatMapping",
+    "LayerRepeatSpec",
+    "LayerSpec",
+    "LayoutAlign",
+    "Legend",
+    "LegendBinding",
+    "LegendConfig",
+    "LegendOrient",
+    "LegendResolveMap",
+    "LegendStreamBinding",
+    "LineConfig",
+    "LineString",
+    "LinearGradient",
+    "LocalMultiTimeUnit",
+    "LocalSingleTimeUnit",
+    "Locale",
+    "LoessTransform",
+    "LogicalAndPredicate",
+    "LogicalNotPredicate",
+    "LogicalOrPredicate",
+    "Longitude",
+    "Longitude2",
+    "Longitude2Datum",
+    "Longitude2Value",
+    "LongitudeDatum",
+    "LookupData",
+    "LookupSelection",
+    "LookupTransform",
+    "Mark",
+    "MarkConfig",
+    "MarkDef",
+    "MarkPropDefGradientstringnull",
+    "MarkPropDefnumber",
+    "MarkPropDefnumberArray",
+    "MarkPropDefstringnullTypeForShape",
+    "MarkType",
+    "MaxRowsError",
+    "MergedStream",
+    "Month",
+    "MultiLineString",
+    "MultiPoint",
+    "MultiPolygon",
+    "MultiTimeUnit",
+    "NamedData",
+    "NonArgAggregateOp",
+    "NonLayerRepeatSpec",
+    "NonNormalizedSpec",
+    "NumberLocale",
+    "NumericArrayMarkPropDef",
+    "NumericMarkPropDef",
+    "OffsetDef",
+    "Opacity",
+    "OpacityDatum",
+    "OpacityValue",
+    "Order",
+    "OrderFieldDef",
+    "OrderValue",
+    "OrderValueDef",
+    "Orient",
+    "Orientation",
+    "OverlayMarkDef",
+    "Padding",
+    "Parameter",
+    "ParameterExpression",
+    "ParameterExtent",
+    "ParameterName",
+    "ParameterPredicate",
+    "Parse",
+    "ParseValue",
+    "PivotTransform",
+    "Point",
+    "PointSelectionConfig",
+    "PointSelectionConfigWithoutType",
+    "PolarDef",
+    "Polygon",
+    "Position",
+    "Position2Def",
+    "PositionDatumDef",
+    "PositionDatumDefBase",
+    "PositionDef",
+    "PositionFieldDef",
+    "PositionFieldDefBase",
+    "PositionValueDef",
+    "Predicate",
+    "PredicateComposition",
+    "PrimitiveValue",
+    "Projection",
+    "ProjectionConfig",
+    "ProjectionType",
+    "QuantileTransform",
+    "RadialGradient",
+    "Radius",
+    "Radius2",
+    "Radius2Datum",
+    "Radius2Value",
+    "RadiusDatum",
+    "RadiusValue",
+    "RangeConfig",
+    "RangeEnum",
+    "RangeRaw",
+    "RangeRawArray",
+    "RangeScheme",
+    "RectConfig",
+    "RegressionTransform",
+    "RelativeBandSize",
+    "RepeatChart",
+    "RepeatMapping",
+    "RepeatRef",
+    "RepeatSpec",
+    "Resolve",
+    "ResolveMode",
+    "Root",
+    "Row",
+    "RowColLayoutAlign",
+    "RowColboolean",
+    "RowColnumber",
+    "RowColumnEncodingFieldDef",
+    "SCHEMA_URL",
+    "SCHEMA_VERSION",
+    "SampleTransform",
+    "Scale",
+    "ScaleBinParams",
+    "ScaleBins",
+    "ScaleConfig",
+    "ScaleDatumDef",
+    "ScaleFieldDef",
+    "ScaleInterpolateEnum",
+    "ScaleInterpolateParams",
+    "ScaleResolveMap",
+    "ScaleType",
+    "SchemaBase",
+    "SchemeParams",
+    "SecondaryFieldDef",
+    "SelectionConfig",
+    "SelectionExpression",
+    "SelectionInit",
+    "SelectionInitInterval",
+    "SelectionInitIntervalMapping",
+    "SelectionInitMapping",
+    "SelectionParameter",
+    "SelectionPredicateComposition",
+    "SelectionResolution",
+    "SelectionType",
+    "SequenceGenerator",
+    "SequenceParams",
+    "SequentialMultiHue",
+    "SequentialSingleHue",
+    "Shape",
+    "ShapeDatum",
+    "ShapeDef",
+    "ShapeValue",
+    "SharedEncoding",
+    "SingleDefUnitChannel",
+    "SingleTimeUnit",
+    "Size",
+    "SizeDatum",
+    "SizeValue",
+    "Sort",
+    "SortArray",
+    "SortByChannel",
+    "SortByChannelDesc",
+    "SortByEncoding",
+    "SortField",
+    "SortOrder",
+    "Spec",
+    "SphereGenerator",
+    "StackOffset",
+    "StackTransform",
+    "StandardType",
+    "Step",
+    "StepFor",
+    "Stream",
+    "StringFieldDef",
+    "StringFieldDefWithCondition",
+    "StringValueDefWithCondition",
+    "Stroke",
+    "StrokeCap",
+    "StrokeDash",
+    "StrokeDashDatum",
+    "StrokeDashValue",
+    "StrokeDatum",
+    "StrokeJoin",
+    "StrokeOpacity",
+    "StrokeOpacityDatum",
+    "StrokeOpacityValue",
+    "StrokeValue",
+    "StrokeWidth",
+    "StrokeWidthDatum",
+    "StrokeWidthValue",
+    "StyleConfigIndex",
+    "SymbolShape",
+    "TOPLEVEL_ONLY_KEYS",
+    "Text",
+    "TextBaseline",
+    "TextDatum",
+    "TextDef",
+    "TextDirection",
+    "TextValue",
+    "Theta",
+    "Theta2",
+    "Theta2Datum",
+    "Theta2Value",
+    "ThetaDatum",
+    "ThetaValue",
+    "TickConfig",
+    "TickCount",
+    "TimeInterval",
+    "TimeIntervalStep",
+    "TimeLocale",
+    "TimeUnit",
+    "TimeUnitParams",
+    "TimeUnitTransform",
+    "Title",
+    "TitleAnchor",
+    "TitleConfig",
+    "TitleFrame",
+    "TitleOrient",
+    "TitleParams",
+    "Tooltip",
+    "TooltipContent",
+    "TooltipValue",
+    "TopLevelConcatSpec",
+    "TopLevelFacetSpec",
+    "TopLevelHConcatSpec",
+    "TopLevelLayerSpec",
+    "TopLevelMixin",
+    "TopLevelParameter",
+    "TopLevelRepeatSpec",
+    "TopLevelSelectionParameter",
+    "TopLevelSpec",
+    "TopLevelUnitSpec",
+    "TopLevelVConcatSpec",
+    "TopoDataFormat",
+    "Transform",
+    "Type",
+    "TypeForShape",
+    "TypedFieldDef",
+    "URI",
+    "Undefined",
+    "UnitSpec",
+    "UnitSpecWithFrame",
+    "Url",
+    "UrlData",
+    "UrlValue",
+    "UtcMultiTimeUnit",
+    "UtcSingleTimeUnit",
+    "VConcatChart",
+    "VConcatSpecGenericSpec",
+    "VEGAEMBED_VERSION",
+    "VEGALITE_VERSION",
+    "VEGA_VERSION",
+    "ValueChannelMixin",
+    "ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull",
+    "ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull",
+    "ValueDefWithConditionMarkPropFieldOrDatumDefnumber",
+    "ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray",
+    "ValueDefWithConditionMarkPropFieldOrDatumDefstringnull",
+    "ValueDefWithConditionStringFieldDefText",
+    "ValueDefnumber",
+    "ValueDefnumberwidthheightExprRef",
+    "VariableParameter",
+    "Vector10string",
+    "Vector12string",
+    "Vector2DateTime",
+    "Vector2Vector2number",
+    "Vector2boolean",
+    "Vector2number",
+    "Vector2string",
+    "Vector3number",
+    "Vector7string",
+    "VegaLite",
+    "VegaLiteSchema",
+    "ViewBackground",
+    "ViewConfig",
+    "WindowEventType",
+    "WindowFieldDef",
+    "WindowOnlyOp",
+    "WindowTransform",
+    "X",
+    "X2",
+    "X2Datum",
+    "X2Value",
+    "XDatum",
+    "XError",
+    "XError2",
+    "XError2Value",
+    "XErrorValue",
+    "XOffset",
+    "XOffsetDatum",
+    "XOffsetValue",
+    "XValue",
+    "Y",
+    "Y2",
+    "Y2Datum",
+    "Y2Value",
+    "YDatum",
+    "YError",
+    "YError2",
+    "YError2Value",
+    "YErrorValue",
+    "YOffset",
+    "YOffsetDatum",
+    "YOffsetValue",
+    "YValue",
+    "api",
+    "binding",
+    "binding_checkbox",
+    "binding_radio",
+    "binding_range",
+    "binding_select",
+    "channels",
+    "check_fields_and_encodings",
+    "concat",
+    "condition",
+    "core",
+    "curry",
+    "data",
+    "data_transformers",
+    "datum",
+    "default_data_transformer",
+    "display",
+    "expr",
+    "graticule",
+    "hconcat",
+    "layer",
+    "limit_rows",
+    "load_ipython_extension",
+    "load_schema",
+    "mixins",
+    "overload",
+    "param",
+    "parse_shorthand",
+    "pipe",
+    "renderers",
+    "repeat",
+    "sample",
+    "schema",
+    "selection_interval",
+    "selection_point",
+    "sequence",
+    "sphere",
+    "theme",
+    "themes",
+    "to_csv",
+    "to_json",
+    "to_values",
+    "topo_feature",
+    "utils",
+    "v5",
+    "value",
+    "vconcat",
+    "vegalite",
+    "with_property_setters",
+]
+
+
+def __dir__():
+    return __all__
+
 
 from .vegalite import *
-from . import examples
 
 
 def load_ipython_extension(ipython):
-    from ._magics import vega, vegalite
+    from ._magics import vegalite
 
-    ipython.register_magic_function(vega, "cell")
     ipython.register_magic_function(vegalite, "cell")
diff --git a/altair/_magics.py b/altair/_magics.py
index 13b8370..7fe6131 100644
--- a/altair/_magics.py
+++ b/altair/_magics.py
@@ -1,7 +1,7 @@
 """
-Magic functions for rendering vega/vega-lite specifications
+Magic functions for rendering vega-lite specifications
 """
-__all__ = ["vega", "vegalite"]
+__all__ = ["vegalite"]
 
 import json
 import warnings
@@ -11,9 +11,7 @@ from IPython.core import magic_arguments
 import pandas as pd
 from toolz import curried
 
-from altair.vegalite import v3 as vegalite_v3
-from altair.vegalite import v4 as vegalite_v4
-from altair.vega import v5 as vega_v5
+from altair.vegalite import v5 as vegalite_v5
 
 try:
     import yaml
@@ -24,19 +22,15 @@ except ImportError:
 
 
 RENDERERS = {
-    "vega": {"5": vega_v5.Vega},
-    "vega-lite": {"3": vegalite_v3.VegaLite, "4": vegalite_v4.VegaLite},
+    "vega-lite": {
+        "5": vegalite_v5.VegaLite,
+    },
 }
 
 
 TRANSFORMERS = {
-    "vega": {
-        # Vega doesn't yet have specific data transformers; use vegalite
-        "5": vegalite_v4.data_transformers,
-    },
     "vega-lite": {
-        "3": vegalite_v3.data_transformers,
-        "4": vegalite_v4.data_transformers,
+        "5": vegalite_v5.data_transformers,
     },
 }
 
@@ -50,7 +44,7 @@ def _prepare_data(data, data_transformers):
     elif isinstance(data, str):
         return {"url": data}
     else:
-        warnings.warn("data of type {} not recognized".format(type(data)))
+        warnings.warn("data of type {} not recognized".format(type(data)), stacklevel=1)
         return data
 
 
@@ -70,81 +64,18 @@ def _get_variable(name):
     return ip.user_ns[name]
 
 
-@magic_arguments.magic_arguments()
-@magic_arguments.argument(
-    "data",
-    nargs="*",
-    help="local variable name of a pandas DataFrame to be used as the dataset",
-)
-@magic_arguments.argument("-v", "--version", dest="version", default="5")
-@magic_arguments.argument("-j", "--json", dest="json", action="store_true")
-def vega(line, cell):
-    """Cell magic for displaying Vega visualizations in CoLab.
-
-    %%vega [name1:variable1 name2:variable2 ...] [--json] [--version='5']
-
-    Visualize the contents of the cell using Vega, optionally specifying
-    one or more pandas DataFrame objects to be used as the datasets.
-
-    If --json is passed, then input is parsed as json rather than yaml.
-    """
-    args = magic_arguments.parse_argstring(vega, line)
-
-    version = args.version
-    assert version in RENDERERS["vega"]
-    Vega = RENDERERS["vega"][version]
-    data_transformers = TRANSFORMERS["vega"][version]
-
-    def namevar(s):
-        s = s.split(":")
-        if len(s) == 1:
-            return s[0], s[0]
-        elif len(s) == 2:
-            return s[0], s[1]
-        else:
-            raise ValueError("invalid identifier: '{}'".format(s))
-
-    try:
-        data = list(map(namevar, args.data))
-    except ValueError:
-        raise ValueError("Could not parse arguments: '{}'".format(line))
-
-    if args.json:
-        spec = json.loads(cell)
-    elif not YAML_AVAILABLE:
-        try:
-            spec = json.loads(cell)
-        except json.JSONDecodeError:
-            raise ValueError(
-                "%%vega: spec is not valid JSON. "
-                "Install pyyaml to parse spec as yaml"
-            )
-    else:
-        spec = yaml.load(cell, Loader=yaml.FullLoader)
-
-    if data:
-        spec["data"] = []
-        for name, val in data:
-            val = _get_variable(val)
-            prepped = _prepare_data(val, data_transformers)
-            prepped["name"] = name
-            spec["data"].append(prepped)
-
-    return Vega(spec)
-
-
 @magic_arguments.magic_arguments()
 @magic_arguments.argument(
     "data",
     nargs="?",
     help="local variablename of a pandas DataFrame to be used as the dataset",
 )
-@magic_arguments.argument("-v", "--version", dest="version", default="4")
+@magic_arguments.argument("-v", "--version", dest="version", default="v5")
 @magic_arguments.argument("-j", "--json", dest="json", action="store_true")
 def vegalite(line, cell):
     """Cell magic for displaying vega-lite visualizations in CoLab.
 
-    %%vegalite [dataframe] [--json] [--version=3]
+    %%vegalite [dataframe] [--json] [--version='v5']
 
     Visualize the contents of the cell using Vega-Lite, optionally
     specifying a pandas DataFrame object to be used as the dataset.
@@ -152,7 +83,8 @@ def vegalite(line, cell):
     if --json is passed, then input is parsed as json rather than yaml.
     """
     args = magic_arguments.parse_argstring(vegalite, line)
-    version = args.version
+    existing_versions = {"v5": "5"}
+    version = existing_versions[args.version]
     assert version in RENDERERS["vega-lite"]
     VegaLite = RENDERERS["vega-lite"][version]
     data_transformers = TRANSFORMERS["vega-lite"][version]
@@ -162,13 +94,13 @@ def vegalite(line, cell):
     elif not YAML_AVAILABLE:
         try:
             spec = json.loads(cell)
-        except json.JSONDecodeError:
+        except json.JSONDecodeError as err:
             raise ValueError(
                 "%%vegalite: spec is not valid JSON. "
                 "Install pyyaml to parse spec as yaml"
-            )
+            ) from err
     else:
-        spec = yaml.load(cell, Loader=yaml.FullLoader)
+        spec = yaml.load(cell, Loader=yaml.SafeLoader)
 
     if args.data is not None:
         data = _get_variable(args.data)
diff --git a/altair/datasets.py b/altair/datasets.py
deleted file mode 100644
index 7a526b2..0000000
--- a/altair/datasets.py
+++ /dev/null
@@ -1,22 +0,0 @@
-"""Datasets for use with Altair (deprecated)
-
-The functions here are merely thin wrappers for data access routines in the
-vega_datasets package.
-"""
-from altair.utils.deprecation import deprecated
-
-
-@deprecated("load_dataset is deprecated. " "Use the vega_datasets package instead.")
-def load_dataset(name):
-    """Load a dataset by name as a pandas.DataFrame."""
-    import vega_datasets
-
-    return vega_datasets.data(name)
-
-
-@deprecated("load_dataset is deprecated. " "Use the vega_datasets package instead.")
-def list_datasets():
-    """List the available datasets."""
-    import vega_datasets
-
-    return vega_datasets.data.list_datasets()
diff --git a/altair/examples/__init__.py b/altair/examples/__init__.py
deleted file mode 100644
index d30aedb..0000000
--- a/altair/examples/__init__.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import os
-
-
-def iter_examples():
-    """Iterate over the examples in this directory.
-
-    Each item is a dict with the following keys:
-    - "name" : the unique name of the example
-    - "filename" : the full file path to the example
-    """
-    example_dir = os.path.abspath(os.path.dirname(__file__))
-    for filename in os.listdir(example_dir):
-        name, ext = os.path.splitext(filename)
-        if name.startswith('_') or ext != '.py':
-            continue
-        yield {'name': name,
-               'filename': os.path.join(example_dir, filename)}
diff --git a/altair/examples/bar_chart_with_labels.py b/altair/examples/bar_chart_with_labels.py
deleted file mode 100644
index 2ac67b4..0000000
--- a/altair/examples/bar_chart_with_labels.py
+++ /dev/null
@@ -1,25 +0,0 @@
-"""
-Bar Chart with Labels
-=====================
-This example shows a basic horizontal bar chart with labels created with Altair.
-"""
-# category: bar charts
-import altair as alt
-from vega_datasets import data
-
-source = data.wheat()
-
-bars = alt.Chart(source).mark_bar().encode(
-    x='wheat:Q',
-    y="year:O"
-)
-
-text = bars.mark_text(
-    align='left',
-    baseline='middle',
-    dx=3  # Nudges text to right so it doesn't appear on top of the bar
-).encode(
-    text='wheat:Q'
-)
-
-(bars + text).properties(height=900)
diff --git a/altair/examples/cumulative_wiki_donations.py b/altair/examples/cumulative_wiki_donations.py
deleted file mode 100644
index 9c193ab..0000000
--- a/altair/examples/cumulative_wiki_donations.py
+++ /dev/null
@@ -1,17 +0,0 @@
-"""
-Cumulative Wikipedia Donations
-==============================
-
-This chart shows cumulative donations to Wikipedia over the past 10 years. Inspired by this `Reddit post <https://www.reddit.com/r/dataisbeautiful/comments/7guwd0/cumulative_wikimedia_donations_over_the_past_10/>`_ but using lines instead of areas.
-"""
-# category: case studies
-import altair as alt
-
-source = "https://frdata.wikimedia.org/donationdata-vs-day.csv"
-
-alt.Chart(source).mark_line().encode(
-    alt.X('monthdate(date):T', title='Month', axis=alt.Axis(format='%B')),
-    alt.Y('max(ytdsum):Q', title='Cumulative Donations', stack=None),
-    alt.Color('year(date):O', legend=alt.Legend(title='Year')),
-    alt.Order('year(data):O')
-)
diff --git a/altair/examples/falkensee.py b/altair/examples/falkensee.py
deleted file mode 100644
index ff91fe7..0000000
--- a/altair/examples/falkensee.py
+++ /dev/null
@@ -1,82 +0,0 @@
-"""
-Falkensee
------------------------
-This example is a reproduction of the Falkensee plot found in the vega-lite examples.
-"""
-# category: case studies
-import altair as alt
-
-source = [
-      {"year": "1875", "population": 1309},
-      {"year": "1890", "population": 1558},
-      {"year": "1910", "population": 4512},
-      {"year": "1925", "population": 8180},
-      {"year": "1933", "population": 15915},
-      {"year": "1939", "population": 24824},
-      {"year": "1946", "population": 28275},
-      {"year": "1950", "population": 29189},
-      {"year": "1964", "population": 29881},
-      {"year": "1971", "population": 26007},
-      {"year": "1981", "population": 24029},
-      {"year": "1985", "population": 23340},
-      {"year": "1989", "population": 22307},
-      {"year": "1990", "population": 22087},
-      {"year": "1991", "population": 22139},
-      {"year": "1992", "population": 22105},
-      {"year": "1993", "population": 22242},
-      {"year": "1994", "population": 22801},
-      {"year": "1995", "population": 24273},
-      {"year": "1996", "population": 25640},
-      {"year": "1997", "population": 27393},
-      {"year": "1998", "population": 29505},
-      {"year": "1999", "population": 32124},
-      {"year": "2000", "population": 33791},
-      {"year": "2001", "population": 35297},
-      {"year": "2002", "population": 36179},
-      {"year": "2003", "population": 36829},
-      {"year": "2004", "population": 37493},
-      {"year": "2005", "population": 38376},
-      {"year": "2006", "population": 39008},
-      {"year": "2007", "population": 39366},
-      {"year": "2008", "population": 39821},
-      {"year": "2009", "population": 40179},
-      {"year": "2010", "population": 40511},
-      {"year": "2011", "population": 40465},
-      {"year": "2012", "population": 40905},
-      {"year": "2013", "population": 41258},
-      {"year": "2014", "population": 41777}
-    ]
-
-source2 = [{
-            "start": "1933",
-            "end": "1945",
-            "event": "Nazi Rule"
-          },
-          {
-            "start": "1948",
-            "end": "1989",
-            "event": "GDR (East Germany)"
-          }]
-
-
-source = alt.pd.DataFrame(source)
-source2 = alt.pd.DataFrame(source2)
-
-
-line = alt.Chart(source).mark_line(color='#333').encode(
-    alt.X('year:T', axis=alt.Axis(format='%Y')),
-    y='population'
-).properties(
-    width=500,
-    height=300
-)
-
-point = line.mark_point(color='#333')
-
-rect = alt.Chart(source2).mark_rect().encode(
-    x='start:T',
-    x2='end:T',
-    color='event:N'
-)
-
-rect + line + point
diff --git a/altair/examples/line_chart_with_points.py b/altair/examples/line_chart_with_points.py
deleted file mode 100644
index 26bd543..0000000
--- a/altair/examples/line_chart_with_points.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-Line Chart with Points
-----------------------
-This chart shows a simple line chart with points marking each value. Use
-``point=True`` for points with default appearance or customize it with
-``OverlayMarkDef()``.
-"""
-# category: line charts
-import altair as alt
-import numpy as np
-import pandas as pd
-
-x = np.arange(100)
-source = pd.DataFrame({
-  'x': x,
-  'f(x)': np.sin(x / 5)
-})
-
-alt.Chart(source).mark_line(
-    point=alt.OverlayMarkDef(color="red")
-).encode(
-    x='x',
-    y='f(x)'
-)
diff --git a/altair/examples/multi_series_line.py b/altair/examples/multi_series_line.py
deleted file mode 100644
index ffd6850..0000000
--- a/altair/examples/multi_series_line.py
+++ /dev/null
@@ -1,18 +0,0 @@
-"""
-Multi Series Line Chart
------------------------
-
-This example shows how to make a multi series line chart of the daily closing stock prices for AAPL, AMZN, GOOG, IBM, and MSFT between 2000 and 2010.
-"""
-# category: line charts
-import altair as alt
-from vega_datasets import data
-
-source = data.stocks()
-
-alt.Chart(source).mark_line().encode(
-    x='date',
-    y='price',
-    color='symbol',
-    strokeDash='symbol',
-)
diff --git a/altair/examples/natural_disasters.py b/altair/examples/natural_disasters.py
deleted file mode 100644
index 339033d..0000000
--- a/altair/examples/natural_disasters.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""
-Natural Disasters
------------------
-This example shows a visualization of global deaths from natural disasters.
-"""
-# category: case studies
-import altair as alt
-from vega_datasets import data
-
-source = data.disasters.url
-
-alt.Chart(source).mark_circle(
-    opacity=0.8,
-    stroke='black',
-    strokeWidth=1
-).encode(
-    alt.X('Year:O', axis=alt.Axis(labelAngle=0)),
-    alt.Y('Entity:N'),
-    alt.Size('Deaths:Q',
-        scale=alt.Scale(range=[0, 4000]),
-        legend=alt.Legend(title='Annual Global Deaths')
-    ),
-    alt.Color('Entity:N', legend=None)
-).properties(
-    width=450,
-    height=320
-).transform_filter(
-    alt.datum.Entity != 'All natural disasters'
-)
diff --git a/altair/examples/stripplot.py b/altair/examples/stripplot.py
deleted file mode 100644
index 678c4b3..0000000
--- a/altair/examples/stripplot.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""
-Stripplot
----------
-This example shows how to make a Stripplot.
-"""
-# category: scatter plots
-import altair as alt
-from vega_datasets import data
-
-source = data.movies.url
-
-stripplot =  alt.Chart(source, width=40).mark_circle(size=8).encode(
-    x=alt.X(
-        'jitter:Q',
-        title=None,
-        axis=alt.Axis(values=[0], ticks=True, grid=False, labels=False),
-        scale=alt.Scale(),
-    ),
-    y=alt.Y('IMDB_Rating:Q'),
-    color=alt.Color('Major_Genre:N', legend=None),
-    column=alt.Column(
-        'Major_Genre:N',
-        header=alt.Header(
-            labelAngle=-90,
-            titleOrient='top',
-            labelOrient='bottom',
-            labelAlign='right',
-            labelPadding=3,
-        ),
-    ),
-).transform_calculate(
-    # Generate Gaussian jitter with a Box-Muller transform
-    jitter='sqrt(-2*log(random()))*cos(2*PI*random())'
-).configure_facet(
-    spacing=0
-).configure_view(
-    stroke=None
-)
-
-stripplot
diff --git a/altair/examples/tests/test_examples.py b/altair/examples/tests/test_examples.py
deleted file mode 100644
index 0b94d65..0000000
--- a/altair/examples/tests/test_examples.py
+++ /dev/null
@@ -1,44 +0,0 @@
-import io
-import pkgutil
-
-import pytest
-
-from altair.utils.execeval import eval_block
-from altair import examples
-
-
-@pytest.fixture
-def require_altair_saver_png():
-    try:
-        import altair_saver  # noqa: F401
-    except ImportError:
-        pytest.skip("altair_saver not importable; cannot run saver tests")
-    if "png" not in altair_saver.available_formats('vega-lite'):
-        pytest.skip("altair_saver not configured to save to png")
-
-
-def iter_example_filenames():
-    for importer, modname, ispkg in pkgutil.iter_modules(examples.__path__):
-        if ispkg or modname.startswith('_'):
-            continue
-        yield modname + '.py'
-
-
-@pytest.mark.parametrize('filename', iter_example_filenames())
-def test_examples(filename: str):
-    source = pkgutil.get_data(examples.__name__, filename)
-    chart = eval_block(source)
-
-    if chart is None:
-        raise ValueError("Example file should define chart in its final "
-                         "statement.")
-    chart.to_dict()
-
-
-@pytest.mark.parametrize('filename', iter_example_filenames())
-def test_render_examples_to_png(require_altair_saver_png, filename):
-    source = pkgutil.get_data(examples.__name__, filename)
-    chart = eval_block(source)
-    out = io.BytesIO()
-    chart.save(out, format="png")
-    assert out.getvalue().startswith(b'\x89PNG')
diff --git a/altair/examples/us_population_over_time.py b/altair/examples/us_population_over_time.py
deleted file mode 100644
index c53ecce..0000000
--- a/altair/examples/us_population_over_time.py
+++ /dev/null
@@ -1,36 +0,0 @@
-"""
-US Population Over Time
-=======================
-This chart visualizes the age distribution of the US population over time.
-It uses a slider widget that is bound to the year to visualize the age
-distribution over time.
-"""
-# category: case studies
-import altair as alt
-from vega_datasets import data
-
-source = data.population.url
-
-pink_blue = alt.Scale(domain=('Male', 'Female'),
-                      range=["steelblue", "salmon"])
-
-slider = alt.binding_range(min=1900, max=2000, step=10)
-select_year = alt.selection_single(name="year", fields=['year'],
-                                   bind=slider, init={'year': 2000})
-
-alt.Chart(source).mark_bar().encode(
-    x=alt.X('sex:N', title=None),
-    y=alt.Y('people:Q', scale=alt.Scale(domain=(0, 12000000))),
-    color=alt.Color('sex:N', scale=pink_blue),
-    column='age:O'
-).properties(
-    width=20
-).add_selection(
-    select_year
-).transform_calculate(
-    "sex", alt.expr.if_(alt.datum.sex == 1, "Male", "Female")
-).transform_filter(
-    select_year
-).configure_facet(
-    spacing=8
-)
diff --git a/altair/examples/weather_heatmap.py b/altair/examples/weather_heatmap.py
deleted file mode 100644
index 9940c1c..0000000
--- a/altair/examples/weather_heatmap.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-Seattle Weather Heatmap
------------------------
-This example shows the 2010 daily high temperature (F) in Seattle, WA.
-"""
-# category: case studies
-import altair as alt
-from vega_datasets import data
-
-# Since the data is more than 5,000 rows we'll import it from a URL
-source = data.seattle_temps.url
-
-alt.Chart(
-    source,
-    title="2010 Daily High Temperature (F) in Seattle, WA"
-).mark_rect().encode(
-    x='date(date):O',
-    y='month(date):O',
-    color=alt.Color('max(temp):Q', scale=alt.Scale(scheme="inferno")),
-    tooltip=[
-        alt.Tooltip('monthdate(date):T', title='Date'),
-        alt.Tooltip('max(temp):Q', title='Max Temp')
-    ]
-).properties(width=550)
diff --git a/altair/examples/wind_vector_map.py b/altair/examples/wind_vector_map.py
deleted file mode 100644
index f16ad28..0000000
--- a/altair/examples/wind_vector_map.py
+++ /dev/null
@@ -1,24 +0,0 @@
-"""
-Wind Vector Map
----------------
-An example showing a vector array map showing wind speed and direction using ``wedge``
-as shape for ``mark_point`` and ``angle`` encoding for the wind direction.
-This is adapted from this corresponding Vega-Lite Example:
-`Wind Vector Map <https://vega.github.io/vega-lite/examples/point_angle_windvector.html>`_.
-"""
-# category: scatter plots
-
-import altair as alt
-from vega_datasets import data
-
-source = data.windvectors()
-
-alt.Chart(source).mark_point(shape="wedge", filled=True).encode(
-    latitude="latitude",
-    longitude="longitude",
-    color=alt.Color(
-        "dir", scale=alt.Scale(domain=[0, 360], scheme="rainbow"), legend=None
-    ),
-    angle=alt.Angle("dir", scale=alt.Scale(domain=[0, 360], range=[180, 540])),
-    size=alt.Size("speed", scale=alt.Scale(rangeMax=500)),
-).project("equalEarth")
diff --git a/altair/expr/__init__.py b/altair/expr/__init__.py
index 8390b99..6ba7f8b 100644
--- a/altair/expr/__init__.py
+++ b/altair/expr/__init__.py
@@ -1,5 +1,19 @@
 """Tools for creating transform & filter expressions with a python syntax"""
-# flake8: noqa
+# ruff: noqa
+from typing import Any
+
 from .core import datum, Expression
 from .funcs import *
 from .consts import *
+from ..vegalite.v5.schema.core import ExprRef as _ExprRef
+
+
+class _ExprType:
+    def __init__(self, expr):
+        vars(self).update(expr)
+
+    def __call__(self, expr, **kwargs):
+        return _ExprRef(expr, **kwargs)
+
+
+expr: Any = _ExprType(globals())
diff --git a/altair/expr/consts.py b/altair/expr/consts.py
index bb14f0b..974fb06 100644
--- a/altair/expr/consts.py
+++ b/altair/expr/consts.py
@@ -1,3 +1,5 @@
+from typing import Dict
+
 from .core import ConstExpression
 
 
@@ -13,7 +15,7 @@ CONST_LISTING = {
     "PI": "the transcendental number pi (alias to Math.PI)",
 }
 
-NAME_MAP = {}
+NAME_MAP: Dict[str, str] = {}
 
 
 def _populate_namespace():
diff --git a/altair/expr/core.py b/altair/expr/core.py
index 264c5a1..9cc258c 100644
--- a/altair/expr/core.py
+++ b/altair/expr/core.py
@@ -1,7 +1,7 @@
 from ..utils import SchemaBase
 
 
-class DatumType(object):
+class DatumType:
     """An object to assist in building Vega-Lite Expressions"""
 
     def __repr__(self):
@@ -31,114 +31,151 @@ def _js_repr(val):
         return "false"
     elif val is None:
         return "null"
+    elif isinstance(val, OperatorMixin):
+        return val._to_expr()
     else:
         return repr(val)
 
 
-class Expression(SchemaBase):
-    """Expression
-
-    Base object for enabling build-up of Javascript expressions using
-    a Python syntax. Calling ``repr(obj)`` will return a Javascript
-    representation of the object and the operations it encodes.
-    """
-
-    _schema = {"type": "string"}
-
-    def to_dict(self, *args, **kwargs):
+# Designed to work with Expression and VariableParameter
+class OperatorMixin:
+    def _to_expr(self):
         return repr(self)
 
-    def __setattr__(self, attr, val):
-        # We don't need the setattr magic defined in SchemaBase
-        return object.__setattr__(self, attr, val)
+    def _from_expr(self, expr):
+        return expr
 
     def __add__(self, other):
-        return BinaryExpression("+", self, other)
+        comp_value = BinaryExpression("+", self, other)
+        return self._from_expr(comp_value)
 
     def __radd__(self, other):
-        return BinaryExpression("+", other, self)
+        comp_value = BinaryExpression("+", other, self)
+        return self._from_expr(comp_value)
 
     def __sub__(self, other):
-        return BinaryExpression("-", self, other)
+        comp_value = BinaryExpression("-", self, other)
+        return self._from_expr(comp_value)
 
     def __rsub__(self, other):
-        return BinaryExpression("-", other, self)
+        comp_value = BinaryExpression("-", other, self)
+        return self._from_expr(comp_value)
 
     def __mul__(self, other):
-        return BinaryExpression("*", self, other)
+        comp_value = BinaryExpression("*", self, other)
+        return self._from_expr(comp_value)
 
     def __rmul__(self, other):
-        return BinaryExpression("*", other, self)
+        comp_value = BinaryExpression("*", other, self)
+        return self._from_expr(comp_value)
 
     def __truediv__(self, other):
-        return BinaryExpression("/", self, other)
+        comp_value = BinaryExpression("/", self, other)
+        return self._from_expr(comp_value)
 
     def __rtruediv__(self, other):
-        return BinaryExpression("/", other, self)
+        comp_value = BinaryExpression("/", other, self)
+        return self._from_expr(comp_value)
 
     __div__ = __truediv__
 
     __rdiv__ = __rtruediv__
 
     def __mod__(self, other):
-        return BinaryExpression("%", self, other)
+        comp_value = BinaryExpression("%", self, other)
+        return self._from_expr(comp_value)
 
     def __rmod__(self, other):
-        return BinaryExpression("%", other, self)
+        comp_value = BinaryExpression("%", other, self)
+        return self._from_expr(comp_value)
 
     def __pow__(self, other):
         # "**" Javascript operator is not supported in all browsers
-        return FunctionExpression("pow", (self, other))
+        comp_value = FunctionExpression("pow", (self, other))
+        return self._from_expr(comp_value)
 
     def __rpow__(self, other):
         # "**" Javascript operator is not supported in all browsers
-        return FunctionExpression("pow", (other, self))
+        comp_value = FunctionExpression("pow", (other, self))
+        return self._from_expr(comp_value)
 
     def __neg__(self):
-        return UnaryExpression("-", self)
+        comp_value = UnaryExpression("-", self)
+        return self._from_expr(comp_value)
 
     def __pos__(self):
-        return UnaryExpression("+", self)
+        comp_value = UnaryExpression("+", self)
+        return self._from_expr(comp_value)
 
     # comparison operators
 
     def __eq__(self, other):
-        return BinaryExpression("===", self, other)
+        comp_value = BinaryExpression("===", self, other)
+        return self._from_expr(comp_value)
 
     def __ne__(self, other):
-        return BinaryExpression("!==", self, other)
+        comp_value = BinaryExpression("!==", self, other)
+        return self._from_expr(comp_value)
 
     def __gt__(self, other):
-        return BinaryExpression(">", self, other)
+        comp_value = BinaryExpression(">", self, other)
+        return self._from_expr(comp_value)
 
     def __lt__(self, other):
-        return BinaryExpression("<", self, other)
+        comp_value = BinaryExpression("<", self, other)
+        return self._from_expr(comp_value)
 
     def __ge__(self, other):
-        return BinaryExpression(">=", self, other)
+        comp_value = BinaryExpression(">=", self, other)
+        return self._from_expr(comp_value)
 
     def __le__(self, other):
-        return BinaryExpression("<=", self, other)
+        comp_value = BinaryExpression("<=", self, other)
+        return self._from_expr(comp_value)
 
     def __abs__(self):
-        return FunctionExpression("abs", (self,))
+        comp_value = FunctionExpression("abs", (self,))
+        return self._from_expr(comp_value)
 
     # logical operators
 
     def __and__(self, other):
-        return BinaryExpression("&&", self, other)
+        comp_value = BinaryExpression("&&", self, other)
+        return self._from_expr(comp_value)
 
     def __rand__(self, other):
-        return BinaryExpression("&&", other, self)
+        comp_value = BinaryExpression("&&", other, self)
+        return self._from_expr(comp_value)
 
     def __or__(self, other):
-        return BinaryExpression("||", self, other)
+        comp_value = BinaryExpression("||", self, other)
+        return self._from_expr(comp_value)
 
     def __ror__(self, other):
-        return BinaryExpression("||", other, self)
+        comp_value = BinaryExpression("||", other, self)
+        return self._from_expr(comp_value)
 
     def __invert__(self):
-        return UnaryExpression("!", self)
+        comp_value = UnaryExpression("!", self)
+        return self._from_expr(comp_value)
+
+
+class Expression(OperatorMixin, SchemaBase):
+    """Expression
+
+    Base object for enabling build-up of Javascript expressions using
+    a Python syntax. Calling ``repr(obj)`` will return a Javascript
+    representation of the object and the operations it encodes.
+    """
+
+    _schema = {"type": "string"}
+
+    def to_dict(self, *args, **kwargs):
+        return repr(self)
+
+    def __setattr__(self, attr, val):
+        # We don't need the setattr magic defined in SchemaBase
+        return object.__setattr__(self, attr, val)
 
     # item access
     def __getitem__(self, val):
diff --git a/altair/expr/funcs.py b/altair/expr/funcs.py
index ed86d53..c4a73f4 100644
--- a/altair/expr/funcs.py
+++ b/altair/expr/funcs.py
@@ -5,10 +5,12 @@ FUNCTION_LISTING = {
     "isArray": r"Returns true if _value_ is an array, false otherwise.",
     "isBoolean": r"Returns true if _value_ is a boolean (`true` or `false`), false otherwise.",
     "isDate": r"Returns true if _value_ is a Date object, false otherwise. This method will return false for timestamp numbers or date-formatted strings; it recognizes Date objects only.",
+    "isDefined": r"Returns true if _value_ is a defined value, false if _value_ equals `undefined`. This method will return true for `null` and `NaN` values.",
     "isNumber": r"Returns true if _value_ is a number, false otherwise. `NaN` and `Infinity` are considered numbers.",
     "isObject": r"Returns true if _value_ is an object (including arrays and Dates), false otherwise.",
     "isRegExp": r"Returns true if _value_ is a RegExp (regular expression) object, false otherwise.",
     "isString": r"Returns true if _value_ is a string, false otherwise.",
+    "isValid": r"Returns true if _value_ is not `null`, `undefined`, or `NaN`, false otherwise.",
     "toBoolean": r"Coerces the input _value_ to a string. Null values and empty strings are mapped to `null`.",
     "toDate": r"Coerces the input _value_ to a Date instance. Null values and empty strings are mapped to `null`. If an optional _parser_ function is provided, it is used to perform date parsing, otherwise `Date.parse` is used. Be aware that `Date.parse` has different implementations across browsers!",
     "toNumber": r"Coerces the input _value_ to a number. Null values and empty strings are mapped to `null`.",
@@ -26,6 +28,7 @@ FUNCTION_LISTING = {
     "cos": r"Trigonometric cosine. Same as JavaScript's `Math.cos`.",
     "exp": r"Returns the value of _e_ raised to the provided _exponent_. Same as JavaScript's `Math.exp`.",
     "floor": r"Rounds _value_ to the nearest integer of equal or lower value. Same as JavaScript's `Math.floor`.",
+    "hypot": r"Returns the square root of the sum of squares of its arguments. Same as JavaScript's `Math.hypot`.",
     "log": r"Returns the natural logarithm of _value_. Same as JavaScript's `Math.log`.",
     "max": r"Returns the maximum argument value. Same as JavaScript's `Math.max`.",
     "min": r"Returns the minimum argument value. Same as JavaScript's `Math.min`.",
@@ -35,29 +38,49 @@ FUNCTION_LISTING = {
     "sin": r"Trigonometric sine. Same as JavaScript's `Math.sin`.",
     "sqrt": r"Square root function. Same as JavaScript's `Math.sqrt`.",
     "tan": r"Trigonometric tangent. Same as JavaScript's `Math.tan`.",
+    "sampleNormal": r"Returns a sample from a univariate [normal (Gaussian) probability distribution](https://en.wikipedia.org/wiki/Normal_distribution) with specified _mean_ and standard deviation _stdev_. If unspecified, the mean defaults to `0` and the standard deviation defaults to `1`.",
+    "cumulativeNormal": r"Returns the value of the [cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function) at the given input domain _value_ for a normal distribution with specified _mean_ and standard deviation _stdev_. If unspecified, the mean defaults to `0` and the standard deviation defaults to `1`.",
+    "densityNormal": r"Returns the value of the [probability density function](https://en.wikipedia.org/wiki/Probability_density_function) at the given input domain _value_, for a normal distribution with specified _mean_ and standard deviation _stdev_. If unspecified, the mean defaults to `0` and the standard deviation defaults to `1`.",
+    "quantileNormal": r"Returns the quantile value (the inverse of the [cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function)) for the given input _probability_, for a normal distribution with specified _mean_ and standard deviation _stdev_. If unspecified, the mean defaults to `0` and the standard deviation defaults to `1`.",
+    "sampleLogNormal": r"Returns a sample from a univariate [log-normal probability distribution](https://en.wikipedia.org/wiki/Log-normal_distribution) with specified log _mean_ and log standard deviation _stdev_. If unspecified, the log mean defaults to `0` and the log standard deviation defaults to `1`.",
+    "cumulativeLogNormal": r"Returns the value of the [cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function) at the given input domain _value_ for a log-normal distribution with specified log _mean_ and log standard deviation _stdev_. If unspecified, the log mean defaults to `0` and the log standard deviation defaults to `1`.",
+    "densityLogNormal": r"Returns the value of the [probability density function](https://en.wikipedia.org/wiki/Probability_density_function) at the given input domain _value_, for a log-normal distribution with specified log _mean_ and log standard deviation _stdev_. If unspecified, the log mean defaults to `0` and the log standard deviation defaults to `1`.",
+    "quantileLogNormal": r"Returns the quantile value (the inverse of the [cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function)) for the given input _probability_, for a log-normal distribution with specified log _mean_ and log standard deviation _stdev_. If unspecified, the log mean defaults to `0` and the log standard deviation defaults to `1`.",
+    "sampleUniform": r"Returns a sample from a univariate [continuous uniform probability distribution](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)) over the interval [_min_, _max_). If unspecified, _min_ defaults to `0` and _max_ defaults to `1`. If only one argument is provided, it is interpreted as the _max_ value.",
+    "cumulativeUniform": r"Returns the value of the [cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function) at the given input domain _value_ for a uniform distribution over the interval [_min_, _max_). If unspecified, _min_ defaults to `0` and _max_ defaults to `1`. If only one argument is provided, it is interpreted as the _max_ value.",
+    "densityUniform": r"Returns the value of the [probability density function](https://en.wikipedia.org/wiki/Probability_density_function) at the given input domain _value_,  for a uniform distribution over the interval [_min_, _max_). If unspecified, _min_ defaults to `0` and _max_ defaults to `1`. If only one argument is provided, it is interpreted as the _max_ value.",
+    "quantileUniform": r"Returns the quantile value (the inverse of the [cumulative distribution function](https://en.wikipedia.org/wiki/Cumulative_distribution_function)) for the given input _probability_,  for a uniform distribution over the interval [_min_, _max_). If unspecified, _min_ defaults to `0` and _max_ defaults to `1`. If only one argument is provided, it is interpreted as the _max_ value.",
     "now": r"Returns the timestamp for the current time.",
     "datetime": r"Returns a new `Date` instance. The _month_ is 0-based, such that `1` represents February.",
     "date": r"Returns the day of the month for the given _datetime_ value, in local time.",
     "day": r"Returns the day of the week for the given _datetime_ value, in local time.",
+    "dayofyear": r"Returns the one-based day of the year for the given _datetime_ value, in local time.",
     "year": r"Returns the year for the given _datetime_ value, in local time.",
     "quarter": r"Returns the quarter of the year (0-3) for the given _datetime_ value, in local time.",
     "month": r"Returns the (zero-based) month for the given _datetime_ value, in local time.",
+    "week": r"Returns the week number of the year for the given _datetime_, in local time. This function assumes Sunday-based weeks. Days before the first Sunday of the year are considered to be in week 0, the first Sunday of the year is the start of week 1, the second Sunday week 2, _etc._.",
     "hours": r"Returns the hours component for the given _datetime_ value, in local time.",
     "minutes": r"Returns the minutes component for the given _datetime_ value, in local time.",
     "seconds": r"Returns the seconds component for the given _datetime_ value, in local time.",
     "milliseconds": r"Returns the milliseconds component for the given _datetime_ value, in local time.",
     "time": r"Returns the epoch-based timestamp for the given _datetime_ value.",
     "timezoneoffset": r"Returns the timezone offset from the local timezone to UTC for the given _datetime_ value.",
+    "timeOffset": r"Returns a new `Date` instance that offsets the given _date_ by the specified time [_unit_](../api/time/#time-units) in the local timezone. The optional _step_ argument indicates the number of time unit steps to offset by (default 1).",
+    "timeSequence": r"Returns an array of `Date` instances from _start_ (inclusive) to _stop_ (exclusive), with each entry separated by the given time [_unit_](../api/time/#time-units) in the local timezone. The optional _step_ argument indicates the number of time unit steps to take between each sequence entry (default 1).",
     "utc": r"Returns a timestamp for the given UTC date. The _month_ is 0-based, such that `1` represents February.",
     "utcdate": r"Returns the day of the month for the given _datetime_ value, in UTC time.",
     "utcday": r"Returns the day of the week for the given _datetime_ value, in UTC time.",
+    "utcdayofyear": r"Returns the one-based day of the year for the given _datetime_ value, in UTC time.",
     "utcyear": r"Returns the year for the given _datetime_ value, in UTC time.",
     "utcquarter": r"Returns the quarter of the year (0-3) for the given _datetime_ value, in UTC time.",
     "utcmonth": r"Returns the (zero-based) month for the given _datetime_ value, in UTC time.",
+    "utcweek": r"Returns the week number of the year for the given _datetime_, in UTC time. This function assumes Sunday-based weeks. Days before the first Sunday of the year are considered to be in week 0, the first Sunday of the year is the start of week 1, the second Sunday week 2, _etc._.",
     "utchours": r"Returns the hours component for the given _datetime_ value, in UTC time.",
     "utcminutes": r"Returns the minutes component for the given _datetime_ value, in UTC time.",
     "utcseconds": r"Returns the seconds component for the given _datetime_ value, in UTC time.",
     "utcmilliseconds": r"Returns the milliseconds component for the given _datetime_ value, in UTC time.",
+    "utcOffset": r"Returns a new `Date` instance that offsets the given _date_ by the specified time [_unit_](../api/time/#time-units) in UTC time. The optional _step_ argument indicates the number of time unit steps to offset by (default 1).",
+    "utcSequence": r"Returns an array of `Date` instances from _start_ (inclusive) to _stop_ (exclusive), with each entry separated by the given time [_unit_](../api/time/#time-units) in UTC time. The optional _step_ argument indicates the number of time unit steps to take between each sequence entry (default 1).",
     "extent": r"Returns a new _[min, max]_ array with the minimum and maximum values of the input array, ignoring `null`, `undefined`, and `NaN` values.",
     "clampRange": r"Clamps a two-element _range_ array in a span-preserving manner. If the span of the input _range_ is less than _(max - min)_ and an endpoint exceeds either the _min_ or _max_ value, the range is translated such that the span is preserved and one endpoint touches the boundary of the _[min, max]_ range. If the span exceeds _(max - min)_, the range _[min, max]_ is returned.",
     "indexof": r"Returns the first index of _value_ in the input _array_, or the first index of _substring_ in the input _string_..",
@@ -67,6 +90,7 @@ FUNCTION_LISTING = {
     "length": r"Returns the length of the input _array_, or the length of the input _string_.",
     "lerp": r"Returns the linearly interpolated value between the first and last entries in the _array_ for the provided interpolation _fraction_ (typically between 0 and 1). For example, `lerp([0, 50], 0.5)` returns 25.",
     "peek": r"Returns the last element in the input _array_. Similar to the built-in `Array.pop` method, except that it does not remove the last element. This method is a convenient shorthand for `array[array.length - 1]`.",
+    "pluck": r"Retrieves the value for the specified *field* from a given *array* of objects. The input *field* string may include nested properties (e.g., `foo.bar.bz`).",
     "reverse": r"Returns a new array with elements in a reverse order of the input _array_. The first array element becomes the last, and the last array element becomes the first.",
     "sequence": r"Returns an array containing an arithmetic sequence of numbers. If _step_ is omitted, it defaults to 1. If _start_ is omitted, it defaults to 0. The _stop_ value is exclusive; it is not included in the result. If _step_ is positive, the last element is the largest _start + i * step_ less than _stop_; if _step_ is negative, the last element is the smallest _start + i * step_ greater than _stop_. If the returned array would contain an infinite number of values, an empty range is returned. The arguments are not required to be integers.",
     "slice": r"Returns a section of _array_ between the _start_ and _end_ indices. If the _end_ argument is negative, it is treated as an offset from the end of the array (_length(array) + end_).",
@@ -87,6 +111,7 @@ FUNCTION_LISTING = {
     "format": r"Formats a numeric _value_ as a string. The _specifier_ must be a valid [d3-format specifier](https://github.com/d3/d3-format/) (e.g., `format(value, ',.2f')`.",
     "monthFormat": r"Formats a (zero-based) _month_ number as a full month name, according to the current locale. For example: `monthFormat(0) -> \"January\"`.",
     "monthAbbrevFormat": r"Formats a (zero-based) _month_ number as an abbreviated month name, according to the current locale. For example: `monthAbbrevFormat(0) -> \"Jan\"`.",
+    "timeUnitSpecifier": r"Returns a time format specifier string for the given time [_units_](../api/time/#time-units). The optional _specifiers_ object provides a set of specifier sub-strings for customizing the format; for more, see the [timeUnitSpecifier API documentation](../api/time/#timeUnitSpecifier). The resulting specifier string can then be used as input to the [timeFormat](#timeFormat) or [utcFormat](#utcFormat) functions, or as the _format_ parameter of an axis or legend. For example: `timeFormat(date, timeUnitSpecifier('year'))` or `timeFormat(date, timeUnitSpecifier(['hours', 'minutes']))`.",
     "timeFormat": r"Formats a datetime _value_ (either a `Date` object or timestamp) as a string, according to the local time. The _specifier_ must be a valid [d3-time-format specifier](https://github.com/d3/d3-time-format/). For example: `timeFormat(timestamp, '%A')`.",
     "timeParse": r"Parses a _string_ value to a Date object, according to the local time. The _specifier_ must be a valid [d3-time-format specifier](https://github.com/d3/d3-time-format/). For example: `timeParse('June 30, 2015', '%B %d, %Y')`.",
     "utcFormat": r"Formats a datetime _value_ (either a `Date` object or timestamp) as a string, according to [UTC](https://en.wikipedia.org/wiki/Coordinated_Universal_Time) time. The _specifier_ must be a valid [d3-time-format specifier](https://github.com/d3/d3-time-format/). For example: `utcFormat(timestamp, '%A')`.",
@@ -97,6 +122,8 @@ FUNCTION_LISTING = {
     "hsl": r"Constructs a new [HSL](https://en.wikipedia.org/wiki/HSL_and_HSV) color. If _h_, _s_ and _l_ are specified, these represent the channel values of the returned color; an _opacity_ may also be specified. If a CSS Color Module Level 3 _specifier_ string is specified, it is parsed and then converted to the HSL color space. Uses [d3-color's hsl function](https://github.com/d3/d3-color#hsl).",
     "lab": r"Constructs a new [CIE LAB](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) color. If _l_, _a_ and _b_ are specified, these represent the channel values of the returned color; an _opacity_ may also be specified. If a CSS Color Module Level 3 _specifier_ string is specified, it is parsed and then converted to the LAB color space. Uses [d3-color's lab function](https://github.com/d3/d3-color#lab).",
     "hcl": r"Constructs a new [HCL](https://en.wikipedia.org/wiki/Lab_color_space#CIELAB) (hue, chroma, luminance) color. If _h_, _c_ and _l_ are specified, these represent the channel values of the returned color; an _opacity_ may also be specified. If a CSS Color Module Level 3 _specifier_ string is specified, it is parsed and then converted to the HCL color space. Uses [d3-color's hcl function](https://github.com/d3/d3-color#hcl).",
+    "luminance": r"Returns the luminance for the given color _specifier_ (compatible with [d3-color's rgb function](https://github.com/d3/d3-color#rgb)). The luminance is calculated according to the [W3C Web Content Accessibility Guidelines](https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef).",
+    "contrast": r"Returns the contrast ratio between the input color specifiers as a float between 1 and 21. The contrast is calculated according to the [W3C Web Content Accessibility Guidelines](https://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef).",
     "item": r"Returns the current scenegraph item that is the target of the event.",
     "group": r"Returns the scenegraph group mark item in which the current event has occurred. If no arguments are provided, the immediate parent group is returned. If a group name is provided, the matching ancestor group item is returned.",
     "xy": r"Returns the x- and y-coordinates for the current event as a two-element array. If no arguments are provided, the top-level coordinate space of the view is used. If a scenegraph _item_ (or string group name) is provided, the coordinate space of the group item is used.",
@@ -128,15 +155,12 @@ FUNCTION_LISTING = {
     "geoCentroid": r"Returns the projected planar centroid (typically in pixels) for the specified GeoJSON _feature_, according to the named _projection_. If the _projection_ argument is `null`, computes the spherical centroid using unprojected longitude, latitude coordinates. The optional _group_ argument takes a scenegraph group mark item to indicate the specific scope in which to look up the projection. Uses d3-geo's [geoCentroid](https://github.com/d3/d3-geo#geoCentroid) and [path.centroid](https://github.com/d3/d3-geo#path_centroid) methods.",
     "treePath": r"For the hierarchy data set with the given _name_, returns the shortest path through from the _source_ node id to the _target_ node id. The path starts at the _source_ node, ascends to the least common ancestor of the _source_ node and the _target_ node, and then descends to the _target_ node.",
     "treeAncestors": r"For the hierarchy data set with the given _name_, returns the array of ancestors nodes, starting with the input _node_, then followed by each parent up to the root.",
+    "containerSize": r"Returns the current CSS box size (`[el.clientWidth, el.clientHeight]`) of the parent DOM element that contains the Vega view. If there is no container element, returns `[undefined, undefined]`.",
+    "screen": r"Returns the [`window.screen`](https://developer.mozilla.org/en-US/docs/Web/API/Window/screen) object, or `{}` if Vega is not running in a browser environment.",
+    "windowSize": r"Returns the current window size (`[window.innerWidth, window.innerHeight]`) or `[undefined, undefined]` if Vega is not running in a browser environment.",
     "warn": r"Logs a warning message and returns the last argument. For the message to appear in the console, the visualization view must have the appropriate logging level set.",
     "info": r"Logs an informative message and returns the last argument. For the message to appear in the console, the visualization view must have the appropriate logging level set.",
     "debug": r"Logs a debugging message and returns the last argument. For the message to appear in the console, the visualization view must have the appropriate logging level set.",
-    "eventGroup": "returns the scenegraph group mark item within which the current event has occurred. If no arguments are provided, the immediate parent group is returned. If a group name is provided, the matching ancestor group item is returned.",
-    "eventItem": "a zero-argument function that returns the current scenegraph item that is the subject of the event.",
-    "eventX": "returns the x-coordinate for the current event. If no arguments are provided, the top-level coordinate space of the visualization is used. If a group name is provided, the coordinate-space of the matching ancestor group item is used.",
-    "eventY": "returns the y-coordinate for the current event. If no arguments are provided, the top-level coordinate space of the visualization is used. If a group name is provided, the coordinate-space of the matching ancestor group item is used.",
-    "iscale": 'applies an inverse scale transform to a specified value; by default, looks for the scale at the top-level of the specification, but an optional signal can also be supplied corresponding to the group which contains the scale (i.e., `iscale("x", val, group)`). *Note:* This function is only legal within signal stream handlers and mark [production rules](https://github.com/vega/vega/wiki/Marks#production-rules). Invoking this function elsewhere (e.g., with filter or formula transforms) will result in an error.',
-    "open": "opens a hyperlink (alias to `window.open`). This function is only valid when running in the browser. It should not be invoked within a server-side (e.g., node.js) environment.",
 }
 
 
@@ -144,7 +168,7 @@ FUNCTION_LISTING = {
 NAME_MAP = {"if": "if_"}
 
 
-class ExprFunc(object):
+class ExprFunc:
     def __init__(self, name, doc):
         self.name = name
         self.doc = doc
diff --git a/altair/sphinxext/altairplot.py b/altair/sphinxext/altairplot.py
deleted file mode 100644
index b6e3f53..0000000
--- a/altair/sphinxext/altairplot.py
+++ /dev/null
@@ -1,341 +0,0 @@
-"""
-Altair Plot Sphinx Extension
-============================
-
-This extension provides a means of inserting live-rendered Altair plots within
-sphinx documentation. There are two directives defined: ``altair-setup`` and
-``altair-plot``. ``altair-setup`` code is used to set-up various options
-prior to running the plot code. For example::
-
-    .. altair-plot::
-        :output: none
-
-        from altair import *
-        import pandas as pd
-        data = pd.DataFrame({'a': list('CCCDDDEEE'),
-                             'b': [2, 7, 4, 1, 2, 6, 8, 4, 7]})
-
-    .. altair-plot::
-
-        Chart(data).mark_point().encode(
-            x='a',
-            y='b'
-        )
-
-In the case of the ``altair-plot`` code, the *last statement* of the code-block
-should contain the chart object you wish to be rendered.
-
-Options
--------
-The directives have the following options::
-
-    .. altair-plot::
-        :namespace:  # specify a plotting namespace that is persistent within the doc
-        :hide-code:  # if set, then hide the code and only show the plot
-        :code-below:  # if set, then code is below rather than above the figure
-        :output:  [plot|repr|stdout|none]
-        :alt: text  # Alternate text when plot cannot be rendered
-        :links: editor source export  # specify one or more of these options
-        :chart-var-name: chart  # name of variable in namespace containing output
-
-
-Additionally, this extension introduces a global configuration
-``altairplot_links``, set in your ``conf.py`` which is a dictionary
-of links that will appear below plots, unless the ``:links:`` option
-again overrides it. It should look something like this::
-
-    # conf.py
-    # ...
-    altairplot_links = {'editor': True, 'source': True, 'export': True}
-    # ...
-
-If this configuration is not specified, all are set to True.
-"""
-
-import contextlib
-import io
-import os
-import json
-import warnings
-
-import jinja2
-
-from docutils import nodes
-from docutils.parsers.rst import Directive
-from docutils.parsers.rst.directives import flag, unchanged
-
-from sphinx.locale import _
-
-import altair as alt
-from altair.utils.execeval import eval_block
-
-# These default URLs can be changed in conf.py; see setup() below.
-VEGA_JS_URL_DEFAULT = "https://cdn.jsdelivr.net/npm/vega@{}".format(alt.VEGA_VERSION)
-VEGALITE_JS_URL_DEFAULT = "https://cdn.jsdelivr.net/npm/vega-lite@{}".format(
-    alt.VEGALITE_VERSION
-)
-VEGAEMBED_JS_URL_DEFAULT = "https://cdn.jsdelivr.net/npm/vega-embed@{}".format(
-    alt.VEGAEMBED_VERSION
-)
-
-
-VGL_TEMPLATE = jinja2.Template(
-    """
-<div id="{{ div_id }}">
-<script>
-  // embed when document is loaded, to ensure vega library is available
-  // this works on all modern browsers, except IE8 and older
-  document.addEventListener("DOMContentLoaded", function(event) {
-      var spec = {{ spec }};
-      var opt = {
-        "mode": "{{ mode }}",
-        "renderer": "{{ renderer }}",
-        "actions": {{ actions}}
-      };
-      vegaEmbed('#{{ div_id }}', spec, opt).catch(console.err);
-  });
-</script>
-</div>
-"""
-)
-
-
-class altair_plot(nodes.General, nodes.Element):
-    pass
-
-
-def purge_altair_namespaces(app, env, docname):
-    if not hasattr(env, "_altair_namespaces"):
-        return
-    env._altair_namespaces.pop(docname, {})
-
-
-DEFAULT_ALTAIRPLOT_LINKS = {"editor": True, "source": True, "export": True}
-
-
-def validate_links(links):
-    if links.strip().lower() == "none":
-        return False
-
-    links = links.strip().split()
-    diff = set(links) - set(DEFAULT_ALTAIRPLOT_LINKS.keys())
-    if diff:
-        raise ValueError("Following links are invalid: {}".format(list(diff)))
-    return {link: link in links for link in DEFAULT_ALTAIRPLOT_LINKS}
-
-
-def validate_output(output):
-    output = output.strip().lower()
-    if output not in ["plot", "repr", "stdout", "none"]:
-        raise ValueError(":output: flag must be one of [plot|repr|stdout|none]")
-    return output
-
-
-class AltairPlotDirective(Directive):
-    has_content = True
-
-    option_spec = {
-        "hide-code": flag,
-        "code-below": flag,
-        "namespace": unchanged,
-        "output": validate_output,
-        "alt": unchanged,
-        "links": validate_links,
-        "chart-var-name": unchanged,
-    }
-
-    def run(self):
-        env = self.state.document.settings.env
-        app = env.app
-
-        show_code = "hide-code" not in self.options
-        code_below = "code-below" in self.options
-
-        if not hasattr(env, "_altair_namespaces"):
-            env._altair_namespaces = {}
-        namespace_id = self.options.get("namespace", "default")
-        namespace = env._altair_namespaces.setdefault(env.docname, {}).setdefault(
-            namespace_id, {}
-        )
-
-        code = "\n".join(self.content)
-
-        if show_code:
-            source_literal = nodes.literal_block(code, code)
-            source_literal["language"] = "python"
-
-        # get the name of the source file we are currently processing
-        rst_source = self.state_machine.document["source"]
-        rst_dir = os.path.dirname(rst_source)
-        rst_filename = os.path.basename(rst_source)
-
-        # use the source file name to construct a friendly target_id
-        serialno = env.new_serialno("altair-plot")
-        rst_base = rst_filename.replace(".", "-")
-        div_id = "{}-altair-plot-{}".format(rst_base, serialno)
-        target_id = "{}-altair-source-{}".format(rst_base, serialno)
-        target_node = nodes.target("", "", ids=[target_id])
-
-        # create the node in which the plot will appear;
-        # this will be processed by html_visit_altair_plot
-        plot_node = altair_plot()
-        plot_node["target_id"] = target_id
-        plot_node["div_id"] = div_id
-        plot_node["code"] = code
-        plot_node["namespace"] = namespace
-        plot_node["relpath"] = os.path.relpath(rst_dir, env.srcdir)
-        plot_node["rst_source"] = rst_source
-        plot_node["rst_lineno"] = self.lineno
-        plot_node["links"] = self.options.get(
-            "links", app.builder.config.altairplot_links
-        )
-        plot_node["output"] = self.options.get("output", "plot")
-        plot_node["chart-var-name"] = self.options.get("chart-var-name", None)
-
-        if "alt" in self.options:
-            plot_node["alt"] = self.options["alt"]
-
-        result = [target_node]
-
-        if code_below:
-            result += [plot_node]
-        if show_code:
-            result += [source_literal]
-        if not code_below:
-            result += [plot_node]
-
-        return result
-
-
-def html_visit_altair_plot(self, node):
-    # Execute the code, saving output and namespace
-    namespace = node["namespace"]
-    try:
-        f = io.StringIO()
-        with contextlib.redirect_stdout(f):
-            chart = eval_block(node["code"], namespace)
-        stdout = f.getvalue()
-    except Exception as e:
-        warnings.warn(
-            "altair-plot: {}:{} Code Execution failed:"
-            "{}: {}".format(
-                node["rst_source"], node["rst_lineno"], e.__class__.__name__, str(e)
-            )
-        )
-        raise nodes.SkipNode
-
-    chart_name = node["chart-var-name"]
-    if chart_name is not None:
-        if chart_name not in namespace:
-            raise ValueError(
-                "chart-var-name='{}' not present in namespace" "".format(chart_name)
-            )
-        chart = namespace[chart_name]
-
-    output = node["output"]
-
-    if output == "none":
-        raise nodes.SkipNode
-    elif output == "stdout":
-        if not stdout:
-            raise nodes.SkipNode
-        else:
-            output_literal = nodes.literal_block(stdout, stdout)
-            output_literal["language"] = "none"
-            node.extend([output_literal])
-    elif output == "repr":
-        if chart is None:
-            raise nodes.SkipNode
-        else:
-            rep = "    " + repr(chart).replace("\n", "\n    ")
-            repr_literal = nodes.literal_block(rep, rep)
-            repr_literal["language"] = "none"
-            node.extend([repr_literal])
-    elif output == "plot":
-        if isinstance(chart, alt.TopLevelMixin):
-            # Last line should be a chart; convert to spec dict
-            try:
-                spec = chart.to_dict()
-            except alt.utils.schemapi.SchemaValidationError:
-                raise ValueError("Invalid chart: {0}".format(node["code"]))
-            actions = node["links"]
-
-            # TODO: add an option to save spects to file & load from there.
-            # TODO: add renderer option
-
-            # Write spec to a *.vl.json file
-            # dest_dir = os.path.join(self.builder.outdir, node['relpath'])
-            # if not os.path.exists(dest_dir):
-            #     os.makedirs(dest_dir)
-            # filename = "{0}.vl.json".format(node['target_id'])
-            # dest_path = os.path.join(dest_dir, filename)
-            # with open(dest_path, 'w') as f:
-            #     json.dump(spec, f)
-
-            # Pass relevant info into the template and append to the output
-            html = VGL_TEMPLATE.render(
-                div_id=node["div_id"],
-                spec=json.dumps(spec),
-                mode="vega-lite",
-                renderer="canvas",
-                actions=json.dumps(actions),
-            )
-            self.body.append(html)
-        else:
-            warnings.warn(
-                "altair-plot: {}:{} Malformed block. Last line of "
-                "code block should define a valid altair Chart object."
-                "".format(node["rst_source"], node["rst_lineno"])
-            )
-        raise nodes.SkipNode
-
-
-def generic_visit_altair_plot(self, node):
-    # TODO: generate PNGs and insert them here
-    if "alt" in node.attributes:
-        self.body.append(_("[ graph: %s ]") % node["alt"])
-    else:
-        self.body.append(_("[ graph ]"))
-    raise nodes.SkipNode
-
-
-def depart_altair_plot(self, node):
-    return
-
-
-def builder_inited(app):
-    app.add_js_file(app.config.altairplot_vega_js_url)
-    app.add_js_file(app.config.altairplot_vegalite_js_url)
-    app.add_js_file(app.config.altairplot_vegaembed_js_url)
-
-
-def setup(app):
-    setup.app = app
-    setup.config = app.config
-    setup.confdir = app.confdir
-
-    app.add_config_value("altairplot_links", DEFAULT_ALTAIRPLOT_LINKS, "env")
-
-    app.add_config_value("altairplot_vega_js_url", VEGA_JS_URL_DEFAULT, "html")
-    app.add_config_value("altairplot_vegalite_js_url", VEGALITE_JS_URL_DEFAULT, "html")
-    app.add_config_value(
-        "altairplot_vegaembed_js_url", VEGAEMBED_JS_URL_DEFAULT, "html"
-    )
-
-    app.add_directive("altair-plot", AltairPlotDirective)
-
-    app.add_css_file("altair-plot.css")
-
-    app.add_node(
-        altair_plot,
-        html=(html_visit_altair_plot, depart_altair_plot),
-        latex=(generic_visit_altair_plot, depart_altair_plot),
-        texinfo=(generic_visit_altair_plot, depart_altair_plot),
-        text=(generic_visit_altair_plot, depart_altair_plot),
-        man=(generic_visit_altair_plot, depart_altair_plot),
-    )
-
-    app.connect("env-purge-doc", purge_altair_namespaces)
-    app.connect("builder-inited", builder_inited)
-
-    return {"version": "0.1"}
diff --git a/altair/tests/test_magics.py b/altair/tests/test_magics.py
deleted file mode 100644
index 59ddff1..0000000
--- a/altair/tests/test_magics.py
+++ /dev/null
@@ -1,176 +0,0 @@
-import json
-import pytest
-
-try:
-    from IPython import InteractiveShell
-
-    IPYTHON_AVAILABLE = True
-except ImportError:
-    IPYTHON_AVAILABLE = False
-    pass
-
-from altair.vegalite.v4 import VegaLite
-from altair.vega.v5 import Vega
-
-
-DATA_RECORDS = [
-    {"amount": 28, "category": "A"},
-    {"amount": 55, "category": "B"},
-    {"amount": 43, "category": "C"},
-    {"amount": 91, "category": "D"},
-    {"amount": 81, "category": "E"},
-    {"amount": 53, "category": "F"},
-    {"amount": 19, "category": "G"},
-    {"amount": 87, "category": "H"},
-]
-
-if IPYTHON_AVAILABLE:
-    _ipshell = InteractiveShell.instance()
-    _ipshell.run_cell("%load_ext altair")
-    _ipshell.run_cell(
-        """
-import pandas as pd
-table = pd.DataFrame.from_records({})
-the_data = table
-""".format(
-            DATA_RECORDS
-        )
-    )
-
-
-VEGA_SPEC = {
-    "$schema": "https://vega.github.io/schema/vega/v5.json",
-    "axes": [
-        {"orient": "bottom", "scale": "xscale"},
-        {"orient": "left", "scale": "yscale"},
-    ],
-    "data": [{"name": "table", "values": DATA_RECORDS}],
-    "height": 200,
-    "marks": [
-        {
-            "encode": {
-                "enter": {
-                    "width": {"band": 1, "scale": "xscale"},
-                    "x": {"field": "category", "scale": "xscale"},
-                    "y": {"field": "amount", "scale": "yscale"},
-                    "y2": {"scale": "yscale", "value": 0},
-                },
-                "hover": {"fill": {"value": "red"}},
-                "update": {"fill": {"value": "steelblue"}},
-            },
-            "from": {"data": "table"},
-            "type": "rect",
-        },
-        {
-            "encode": {
-                "enter": {
-                    "align": {"value": "center"},
-                    "baseline": {"value": "bottom"},
-                    "fill": {"value": "#333"},
-                },
-                "update": {
-                    "fillOpacity": [
-                        {"test": "datum === tooltip", "value": 0},
-                        {"value": 1},
-                    ],
-                    "text": {"signal": "tooltip.amount"},
-                    "x": {"band": 0.5, "scale": "xscale", "signal": "tooltip.category"},
-                    "y": {"offset": -2, "scale": "yscale", "signal": "tooltip.amount"},
-                },
-            },
-            "type": "text",
-        },
-    ],
-    "padding": 5,
-    "scales": [
-        {
-            "domain": {"data": "table", "field": "category"},
-            "name": "xscale",
-            "padding": 0.05,
-            "range": "width",
-            "round": True,
-            "type": "band",
-        },
-        {
-            "domain": {"data": "table", "field": "amount"},
-            "name": "yscale",
-            "nice": True,
-            "range": "height",
-        },
-    ],
-    "signals": [
-        {
-            "name": "tooltip",
-            "on": [
-                {"events": "rect:mouseover", "update": "datum"},
-                {"events": "rect:mouseout", "update": "{}"},
-            ],
-            "value": {},
-        }
-    ],
-    "width": 400,
-}
-
-
-VEGALITE_SPEC = {
-    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
-    "data": {"values": DATA_RECORDS},
-    "description": "A simple bar chart with embedded data.",
-    "encoding": {
-        "x": {"field": "category", "type": "ordinal"},
-        "y": {"field": "amount", "type": "quantitative"},
-    },
-    "mark": "bar",
-}
-
-
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vegalite_magic_data_included():
-    result = _ipshell.run_cell("%%vegalite\n" + json.dumps(VEGALITE_SPEC))
-    assert isinstance(result.result, VegaLite)
-    assert VEGALITE_SPEC == result.result.spec
-
-
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vegalite_magic_json_flag():
-    result = _ipshell.run_cell("%%vegalite --json\n" + json.dumps(VEGALITE_SPEC))
-    assert isinstance(result.result, VegaLite)
-    assert VEGALITE_SPEC == result.result.spec
-
-
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vegalite_magic_pandas_data():
-    spec = {key: val for key, val in VEGALITE_SPEC.items() if key != "data"}
-    result = _ipshell.run_cell("%%vegalite table\n" + json.dumps(spec))
-    assert isinstance(result.result, VegaLite)
-    assert VEGALITE_SPEC == result.result.spec
-
-
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vega_magic_data_included():
-    result = _ipshell.run_cell("%%vega\n" + json.dumps(VEGA_SPEC))
-    assert isinstance(result.result, Vega)
-    assert VEGA_SPEC == result.result.spec
-
-
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vega_magic_json_flag():
-    result = _ipshell.run_cell("%%vega --json\n" + json.dumps(VEGA_SPEC))
-    assert isinstance(result.result, Vega)
-    assert VEGA_SPEC == result.result.spec
-
-
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vega_magic_pandas_data():
-    spec = {key: val for key, val in VEGA_SPEC.items() if key != "data"}
-    result = _ipshell.run_cell("%%vega table\n" + json.dumps(spec))
-    assert isinstance(result.result, Vega)
-    assert VEGA_SPEC == result.result.spec
-
-
-@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
-def test_vega_magic_pandas_data_renamed():
-    spec = {key: val for key, val in VEGA_SPEC.items() if key != "data"}
-    result = _ipshell.run_cell("%%vega table:the_data\n" + json.dumps(spec))
-    assert isinstance(result.result, Vega)
-    assert VEGA_SPEC == result.result.spec
diff --git a/altair/utils/__init__.py b/altair/utils/__init__.py
index 2a52383..0bd8ec5 100644
--- a/altair/utils/__init__.py
+++ b/altair/utils/__init__.py
@@ -4,15 +4,14 @@ from .core import (
     sanitize_dataframe,
     parse_shorthand,
     use_signature,
-    update_subtraits,
     update_nested,
     display_traceback,
     SchemaBase,
-    Undefined,
 )
 from .html import spec_to_html
 from .plugin_registry import PluginRegistry
 from .deprecation import AltairDeprecationWarning
+from .schemapi import Undefined
 
 
 __all__ = (
@@ -22,7 +21,6 @@ __all__ = (
     "spec_to_html",
     "parse_shorthand",
     "use_signature",
-    "update_subtraits",
     "update_nested",
     "display_traceback",
     "AltairDeprecationWarning",
diff --git a/altair/utils/core.py b/altair/utils/core.py
index 43bc1b4..8ecaa89 100644
--- a/altair/utils/core.py
+++ b/altair/utils/core.py
@@ -9,18 +9,27 @@ import re
 import sys
 import traceback
 import warnings
+from typing import Callable, TypeVar, Any
 
 import jsonschema
 import pandas as pd
 import numpy as np
 
-from .schemapi import SchemaBase, Undefined
+from altair.utils.schemapi import SchemaBase
+
+if sys.version_info >= (3, 10):
+    from typing import ParamSpec
+else:
+    from typing_extensions import ParamSpec
 
 try:
     from pandas.api.types import infer_dtype as _infer_dtype
 except ImportError:
     # Import for pandas < 0.20.0
-    from pandas.lib import infer_dtype as _infer_dtype
+    from pandas.lib import infer_dtype as _infer_dtype  # type: ignore[no-redef]
+
+_V = TypeVar("_V")
+_P = ParamSpec("_P")
 
 
 def infer_dtype(value):
@@ -193,8 +202,6 @@ def infer_vegalite_type(data):
     # Otherwise, infer based on the dtype of the input
     typ = infer_dtype(data)
 
-    # TODO: Once this returns 'O', please update test_select_x and test_select_y in test_api.py
-
     if typ in [
         "floating",
         "mixed-integer-float",
@@ -203,6 +210,8 @@ def infer_vegalite_type(data):
         "complex",
     ]:
         return "quantitative"
+    elif typ == "categorical" and data.cat.ordered:
+        return ("ordinal", data.cat.categories.tolist())
     elif typ in ["string", "bytes", "categorical", "boolean", "mixed", "unicode"]:
         return "nominal"
     elif typ in [
@@ -218,7 +227,8 @@ def infer_vegalite_type(data):
     else:
         warnings.warn(
             "I don't know how to infer vegalite type from '{}'.  "
-            "Defaulting to nominal.".format(typ)
+            "Defaulting to nominal.".format(typ),
+            stacklevel=1,
         )
         return "nominal"
 
@@ -314,10 +324,11 @@ def sanitize_dataframe(df):  # noqa: C901
         else:
             return val
 
-    for col_name, dtype in df.dtypes.iteritems():
+    for col_name, dtype in df.dtypes.items():
         if str(dtype) == "category":
-            # XXXX: work around bug in to_json for categorical types
+            # Work around bug in to_json for categorical types in older versions of pandas
             # https://github.com/pydata/pandas/issues/10778
+            # https://github.com/altair-viz/altair/pull/2170
             col = df[col_name].astype(object)
             df[col_name] = col.where(col.notnull(), None)
         elif str(dtype) == "string":
@@ -473,15 +484,15 @@ def parse_shorthand(
 
     valid_typecodes = list(TYPECODE_MAP) + list(INV_TYPECODE_MAP)
 
-    units = dict(
-        field="(?P<field>.*)",
-        type="(?P<type>{})".format("|".join(valid_typecodes)),
-        agg_count="(?P<aggregate>count)",
-        op_count="(?P<op>count)",
-        aggregate="(?P<aggregate>{})".format("|".join(AGGREGATES)),
-        window_op="(?P<op>{})".format("|".join(AGGREGATES + WINDOW_AGGREGATES)),
-        timeUnit="(?P<timeUnit>{})".format("|".join(TIMEUNITS)),
-    )
+    units = {
+        "field": "(?P<field>.*)",
+        "type": "(?P<type>{})".format("|".join(valid_typecodes)),
+        "agg_count": "(?P<aggregate>count)",
+        "op_count": "(?P<op>count)",
+        "aggregate": "(?P<aggregate>{})".format("|".join(AGGREGATES)),
+        "window_op": "(?P<op>{})".format("|".join(AGGREGATES + WINDOW_AGGREGATES)),
+        "timeUnit": "(?P<timeUnit>{})".format("|".join(TIMEUNITS)),
+    }
 
     patterns = []
 
@@ -525,23 +536,49 @@ def parse_shorthand(
 
     # if data is specified and type is not, infer type from data
     if isinstance(data, pd.DataFrame) and "type" not in attrs:
-        if "field" in attrs and attrs["field"] in data.columns:
-            attrs["type"] = infer_vegalite_type(data[attrs["field"]])
+        # Remove escape sequences so that types can be inferred for columns with special characters
+        if "field" in attrs and attrs["field"].replace("\\", "") in data.columns:
+            attrs["type"] = infer_vegalite_type(data[attrs["field"].replace("\\", "")])
+            # ordered categorical dataframe columns return the type and sort order as a tuple
+            if isinstance(attrs["type"], tuple):
+                attrs["sort"] = attrs["type"][1]
+                attrs["type"] = attrs["type"][0]
+
+    # If an unescaped colon is still present, it's often due to an incorrect data type specification
+    # but could also be due to using a column name with ":" in it.
+    if (
+        "field" in attrs
+        and ":" in attrs["field"]
+        and attrs["field"][attrs["field"].rfind(":") - 1] != "\\"
+    ):
+        raise ValueError(
+            '"{}" '.format(attrs["field"].split(":")[-1])
+            + "is not one of the valid encoding data types: {}.".format(
+                ", ".join(TYPECODE_MAP.values())
+            )
+            + "\nFor more details, see https://altair-viz.github.io/user_guide/encodings/index.html#encoding-data-types. "
+            + "If you are trying to use a column name that contains a colon, "
+            + 'prefix it with a backslash; for example "column\\:name" instead of "column:name".'
+        )
     return attrs
 
 
-def use_signature(Obj):
+def use_signature(Obj: Callable[_P, Any]):
     """Apply call signature and documentation of Obj to the decorated method"""
 
-    def decorate(f):
+    def decorate(f: Callable[..., _V]) -> Callable[_P, _V]:
         # call-signature of f is exposed via __wrapped__.
         # we want it to mimic Obj.__init__
-        f.__wrapped__ = Obj.__init__
-        f._uses_signature = Obj
+        f.__wrapped__ = Obj.__init__  # type: ignore
+        f._uses_signature = Obj  # type: ignore
 
         # Supplement the docstring of f with information from Obj
         if Obj.__doc__:
+            # Patch in a reference to the class this docstring is copied from,
+            # to generate a hyperlink.
             doclines = Obj.__doc__.splitlines()
+            doclines[0] = f"Refer to :class:`{Obj.__name__}`"
+
             if f.__doc__:
                 doc = f.__doc__ + "\n".join(doclines[1:])
             else:
@@ -557,34 +594,6 @@ def use_signature(Obj):
     return decorate
 
 
-def update_subtraits(obj, attrs, **kwargs):
-    """Recursively update sub-traits without overwriting other traits"""
-    # TODO: infer keywords from args
-    if not kwargs:
-        return obj
-
-    # obj can be a SchemaBase object or a dict
-    if obj is Undefined:
-        obj = dct = {}
-    elif isinstance(obj, SchemaBase):
-        dct = obj._kwds
-    else:
-        dct = obj
-
-    if isinstance(attrs, str):
-        attrs = (attrs,)
-
-    if len(attrs) == 0:
-        dct.update(kwargs)
-    else:
-        attr = attrs[0]
-        trait = dct.get(attr, Undefined)
-        if trait is Undefined:
-            trait = dct[attr] = {}
-        dct[attr] = update_subtraits(trait, attrs[1:], **kwargs)
-    return obj
-
-
 def update_nested(original, update, copy=False):
     """Update nested dictionaries
 
@@ -692,15 +701,6 @@ def infer_encoding_types(args, kwargs, channels):
         kwargs[encoding] = arg
 
     def _wrap_in_channel_class(obj, encoding):
-        try:
-            condition = obj["condition"]
-        except (KeyError, TypeError):
-            pass
-        else:
-            if condition is not Undefined:
-                obj = obj.copy()
-                obj["condition"] = _wrap_in_channel_class(condition, encoding)
-
         if isinstance(obj, SchemaBase):
             return obj
 
@@ -711,7 +711,9 @@ def infer_encoding_types(args, kwargs, channels):
             return [_wrap_in_channel_class(subobj, encoding) for subobj in obj]
 
         if encoding not in name_to_channel:
-            warnings.warn("Unrecognized encoding channel '{}'".format(encoding))
+            warnings.warn(
+                "Unrecognized encoding channel '{}'".format(encoding), stacklevel=1
+            )
             return obj
 
         classes = name_to_channel[encoding]
diff --git a/altair/utils/data.py b/altair/utils/data.py
index 403b69e..28e66bf 100644
--- a/altair/utils/data.py
+++ b/altair/utils/data.py
@@ -76,12 +76,16 @@ def limit_rows(data, max_rows=5000):
             values = data["values"]
         else:
             return data
+    elif hasattr(data, "__dataframe__"):
+        values = data
     if max_rows is not None and len(values) > max_rows:
         raise MaxRowsError(
             "The number of rows in your dataset is greater "
-            "than the maximum allowed ({}). "
-            "For information on how to plot larger datasets "
-            "in Altair, see the documentation".format(max_rows)
+            f"than the maximum allowed ({max_rows}).\n\n"
+            "See https://altair-viz.github.io/user_guide/large_datasets.html "
+            "for information on how to plot large datasets, "
+            "including how to install third-party data management tools and, "
+            "in the right circumstance, disable the restriction"
         )
     return data
 
@@ -98,6 +102,13 @@ def sample(data, n=None, frac=None):
             n = n if n else int(frac * len(values))
             values = random.sample(values, n)
             return {"values": values}
+    elif hasattr(data, "__dataframe__"):
+        # experimental interchange dataframe support
+        pi = import_pyarrow_interchange()
+        pa_table = pi.from_dataframe(data)
+        n = n if n else int(frac * len(pa_table))
+        indices = random.sample(range(len(pa_table)), n)
+        return pa_table.take(indices)
 
 
 @curried.curry
@@ -152,12 +163,17 @@ def to_values(data):
         if "values" not in data:
             raise KeyError("values expected in data dict, but not present.")
         return data
+    elif hasattr(data, "__dataframe__"):
+        # experimental interchange dataframe support
+        pi = import_pyarrow_interchange()
+        pa_table = pi.from_dataframe(data)
+        return {"values": pa_table.to_pylist()}
 
 
 def check_data_type(data):
     """Raise if the data is not a dict or DataFrame."""
-    if not isinstance(data, (dict, pd.DataFrame)) and not hasattr(
-        data, "__geo_interface__"
+    if not isinstance(data, (dict, pd.DataFrame)) and not any(
+        hasattr(data, attr) for attr in ["__geo_interface__", "__dataframe__"]
     ):
         raise TypeError(
             "Expected dict, DataFrame or a __geo_interface__ attribute, got: {}".format(
@@ -190,6 +206,11 @@ def _data_to_json_string(data):
         if "values" not in data:
             raise KeyError("values expected in data dict, but not present.")
         return json.dumps(data["values"], sort_keys=True)
+    elif hasattr(data, "__dataframe__"):
+        # experimental interchange dataframe support
+        pi = import_pyarrow_interchange()
+        pa_table = pi.from_dataframe(data)
+        return json.dumps(pa_table.to_pylist())
     else:
         raise NotImplementedError(
             "to_json only works with data expressed as " "a DataFrame or as a dict"
@@ -211,6 +232,16 @@ def _data_to_csv_string(data):
         if "values" not in data:
             raise KeyError("values expected in data dict, but not present")
         return pd.DataFrame.from_dict(data["values"]).to_csv(index=False)
+    elif hasattr(data, "__dataframe__"):
+        # experimental interchange dataframe support
+        pi = import_pyarrow_interchange()
+        import pyarrow as pa
+        import pyarrow.csv as pa_csv
+
+        pa_table = pi.from_dataframe(data)
+        csv_buffer = pa.BufferOutputStream()
+        pa_csv.write_csv(pa_table, csv_buffer)
+        return csv_buffer.getvalue().to_pybytes().decode()
     else:
         raise NotImplementedError(
             "to_csv only works with data expressed as " "a DataFrame or as a dict"
@@ -227,6 +258,7 @@ def pipe(data, *funcs):
         "alt.pipe() is deprecated, and will be removed in a future release. "
         "Use toolz.curried.pipe() instead.",
         AltairDeprecationWarning,
+        stacklevel=1,
     )
     return curried.pipe(data, *funcs)
 
@@ -240,5 +272,28 @@ def curry(*args, **kwargs):
         "alt.curry() is deprecated, and will be removed in a future release. "
         "Use toolz.curried.curry() instead.",
         AltairDeprecationWarning,
+        stacklevel=1,
     )
     return curried.curry(*args, **kwargs)
+
+
+def import_pyarrow_interchange():
+    import pkg_resources
+
+    try:
+        pkg_resources.require("pyarrow>=11.0.0")
+        # The package is installed and meets the minimum version requirement
+        import pyarrow.interchange as pi
+
+        return pi
+    except pkg_resources.DistributionNotFound as err:
+        # The package is not installed
+        raise ImportError(
+            "Usage of the DataFrame Interchange Protocol requires the package 'pyarrow', but it is not installed."
+        ) from err
+    except pkg_resources.VersionConflict as err:
+        # The package is installed but does not meet the minimum version requirement
+        raise ImportError(
+            "The installed version of 'pyarrow' does not meet the minimum requirement of version 11.0.0. "
+            "Please update 'pyarrow' to use the DataFrame Interchange Protocol."
+        ) from err
diff --git a/altair/utils/deprecation.py b/altair/utils/deprecation.py
index 9deca22..f0ed26a 100644
--- a/altair/utils/deprecation.py
+++ b/altair/utils/deprecation.py
@@ -40,7 +40,7 @@ def _deprecate(obj, name=None, message=None):
 
     Examples
     --------
-    >>> class Foo(object): pass
+    >>> class Foo: pass
     >>> OldFoo = _deprecate(Foo, "OldFoo")
     >>> f = OldFoo()  # doctest: +SKIP
     AltairDeprecationWarning: alt.OldFoo is deprecated. Use alt.Foo instead.
@@ -62,9 +62,10 @@ def _deprecate(obj, name=None, message=None):
 
         @functools.wraps(obj)
         def new_obj(*args, **kwargs):
-            warnings.warn(message, AltairDeprecationWarning)
+            warnings.warn(message, AltairDeprecationWarning, stacklevel=1)
             return obj(*args, **kwargs)
 
+        new_obj._deprecated = True
         return new_obj
     else:
         raise ValueError("Cannot deprecate object of type {}".format(type(obj)))
diff --git a/altair/utils/display.py b/altair/utils/display.py
index 92d7c78..730ca65 100644
--- a/altair/utils/display.py
+++ b/altair/utils/display.py
@@ -1,13 +1,12 @@
 import json
 import pkgutil
 import textwrap
-from typing import Callable, Dict
+from typing import Callable, Dict, Optional
 import uuid
 
-from jsonschema import validate
-
 from .plugin_registry import PluginRegistry
 from .mimebundle import spec_to_mimebundle
+from .schemapi import validate_jsonschema
 
 
 # ==============================================================================
@@ -98,7 +97,7 @@ class RendererRegistry(PluginRegistry[RendererType]):
 # ==============================================================================
 
 
-class Displayable(object):
+class Displayable:
     """A base display class for VegaLite v1/v2.
 
     This class takes a VegaLite v1/v2 spec and does the following:
@@ -113,7 +112,7 @@ class Displayable(object):
     through appropriate data model transformers.
     """
 
-    renderers = None
+    renderers: Optional[RendererRegistry] = None
     schema_path = ("altair", "")
 
     def __init__(self, spec, validate=False):
@@ -125,8 +124,13 @@ class Displayable(object):
     def _validate(self):
         # type: () -> None
         """Validate the spec against the schema."""
-        schema_dict = json.loads(pkgutil.get_data(*self.schema_path).decode("utf-8"))
-        validate(self.spec, schema_dict)
+        data = pkgutil.get_data(*self.schema_path)
+        assert data is not None
+        schema_dict = json.loads(data.decode("utf-8"))
+        validate_jsonschema(
+            self.spec,
+            schema_dict,
+        )
 
     def _repr_mimebundle_(self, include=None, exclude=None):
         """Return a MIME bundle for display in Jupyter frontends."""
@@ -163,7 +167,7 @@ def json_renderer_base(spec, str_repr, **options):
     )
 
 
-class HTMLRenderer(object):
+class HTMLRenderer:
     """Object to render charts as HTML, with a unique output div each time"""
 
     def __init__(self, output_div="altair-viz-{}", **kwargs):
diff --git a/altair/utils/execeval.py b/altair/utils/execeval.py
index c135fe4..514f874 100644
--- a/altair/utils/execeval.py
+++ b/altair/utils/execeval.py
@@ -10,7 +10,7 @@ else:
         return ast.Module(nodelist)
 
 
-class _CatchDisplay(object):
+class _CatchDisplay:
     """Class to temporarily catch sys.displayhook"""
 
     def __init__(self):
diff --git a/altair/utils/html.py b/altair/utils/html.py
index 1aa507e..a7a29fc 100644
--- a/altair/utils/html.py
+++ b/altair/utils/html.py
@@ -10,8 +10,14 @@ HTML_TEMPLATE = jinja2.Template(
 <head>
 {%- endif %}
   <style>
-    .error {
-        color: red;
+    #{{ output_div }}.vega-embed {
+      width: 100%;
+      display: flex;
+    }
+
+    #{{ output_div }}.vega-embed details,
+    #{{ output_div }}.vega-embed details summary {
+      position: relative;
     }
   </style>
 {%- if not requirejs %}
@@ -60,7 +66,7 @@ requirejs.config({
       var embedOpt = {{ embed_options }};
 
       function showError(el, error){
-          el.innerHTML = ('<div class="error" style="color:red;">'
+          el.innerHTML = ('<div style="color:red;">'
                           + '<p>JavaScript Error: ' + error.message + '</p>'
                           + "<p>This usually means there's a typo in your chart specification. "
                           + "See the javascript console for the full traceback.</p>"
@@ -83,6 +89,17 @@ requirejs.config({
 
 HTML_TEMPLATE_UNIVERSAL = jinja2.Template(
     """
+<style>
+  #{{ output_div }}.vega-embed {
+    width: 100%;
+    display: flex;
+  }
+
+  #{{ output_div }}.vega-embed details,
+  #{{ output_div }}.vega-embed details summary {
+    position: relative;
+  }
+</style>
 <div id="{{ output_div }}"></div>
 <script type="text/javascript">
   var VEGA_DEBUG = (typeof VEGA_DEBUG == "undefined") ? {} : VEGA_DEBUG;
@@ -141,9 +158,53 @@ HTML_TEMPLATE_UNIVERSAL = jinja2.Template(
 )
 
 
+# This is like the HTML_TEMPLATE template, but includes vega javascript inline
+# so that the resulting file is not dependent on external resources. This was
+# ported over from altair_saver.
+#
+# implies requirejs=False and full_html=True
+INLINE_HTML_TEMPLATE = jinja2.Template(
+    """\
+<!DOCTYPE html>
+<html>
+<head>
+  <style>
+    #{{ output_div }}.vega-embed {
+      width: 100%;
+      display: flex;
+    }
+
+    #{{ output_div }}.vega-embed details,
+    #{{ output_div }}.vega-embed details summary {
+      position: relative;
+    }
+  </style>
+  <script type="text/javascript">
+    // vega.js v{{ vega_version }}
+    {{ vega_script }}
+    // vega-lite.js v{{ vegalite_version }}
+    {{ vegalite_script }}
+    // vega-embed.js v{{ vegaembed_version }}
+    {{ vegaembed_script }}
+  </script>
+</head>
+<body>
+<div class="vega-visualization" id="{{ output_div }}"></div>
+<script type="text/javascript">
+  const spec = {{ spec }};
+  const embedOpt = {{ embed_options }};
+  vegaEmbed('#{{ output_div }}', spec, embedOpt).catch(console.error);
+</script>
+</body>
+</html>
+"""
+)
+
+
 TEMPLATES = {
     "standard": HTML_TEMPLATE,
     "universal": HTML_TEMPLATE_UNIVERSAL,
+    "inline": INLINE_HTML_TEMPLATE,
 }
 
 
@@ -153,7 +214,7 @@ def spec_to_html(
     vega_version,
     vegaembed_version,
     vegalite_version=None,
-    base_url="https://cdn.jsdelivr.net/npm/",
+    base_url="https://cdn.jsdelivr.net/npm",
     output_div="vis",
     embed_options=None,
     json_kwds=None,
@@ -218,6 +279,22 @@ def spec_to_html(
     if mode == "vega-lite" and vegalite_version is None:
         raise ValueError("must specify vega-lite version for mode='vega-lite'")
 
+    render_kwargs = {}
+    if template == "inline":
+        try:
+            from altair_viewer import get_bundled_script
+        except ImportError as err:
+            raise ImportError(
+                "The altair_viewer package is required to convert to HTML with inline=True"
+            ) from err
+        render_kwargs["vega_script"] = get_bundled_script("vega", vega_version)
+        render_kwargs["vegalite_script"] = get_bundled_script(
+            "vega-lite", vegalite_version
+        )
+        render_kwargs["vegaembed_script"] = get_bundled_script(
+            "vega-embed", vegaembed_version
+        )
+
     template = TEMPLATES.get(template, template)
     if not hasattr(template, "render"):
         raise ValueError("Invalid template: {0}".format(template))
@@ -233,4 +310,5 @@ def spec_to_html(
         output_div=output_div,
         fullhtml=fullhtml,
         requirejs=requirejs,
+        **render_kwargs,
     )
diff --git a/altair/utils/mimebundle.py b/altair/utils/mimebundle.py
index b758025..1e00542 100644
--- a/altair/utils/mimebundle.py
+++ b/altair/utils/mimebundle.py
@@ -8,9 +8,10 @@ def spec_to_mimebundle(
     vega_version=None,
     vegaembed_version=None,
     vegalite_version=None,
+    engine=None,
     **kwargs,
 ):
-    """Convert a vega/vega-lite specification to a mimebundle
+    """Convert a vega-lite specification to a mimebundle
 
     The mimebundle type is controlled by the ``format`` argument, which can be
     one of the following ['html', 'json', 'png', 'svg', 'pdf', 'vega', 'vega-lite']
@@ -21,7 +22,7 @@ def spec_to_mimebundle(
         a dictionary representing a vega-lite plot spec
     format : string {'html', 'json', 'png', 'svg', 'pdf', 'vega', 'vega-lite'}
         the file format to be saved.
-    mode : string {'vega', 'vega-lite'}
+    mode : string {'vega-lite'}
         The rendering mode.
     vega_version : string
         The version of vega.js to use
@@ -29,6 +30,8 @@ def spec_to_mimebundle(
         The version of vegaembed.js to use
     vegalite_version : string
         The version of vegalite.js to use. Only required if mode=='vega-lite'
+    engine: string {'vl-convert', 'altair_saver'}
+        the conversion engine to use for 'png', 'svg', 'pdf', and 'vega' formats
     **kwargs :
         Additional arguments will be passed to the generating function
 
@@ -40,24 +43,14 @@ def spec_to_mimebundle(
     Note
     ----
     The png, svg, pdf, and vega outputs require the altair_saver package
-    to be installed.
     """
-    if mode not in ["vega", "vega-lite"]:
-        raise ValueError("mode must be either 'vega' or 'vega-lite'")
+    if mode != "vega-lite":
+        raise ValueError("mode must be 'vega-lite'")
 
-    if mode == "vega" and format == "vega":
-        if vega_version is None:
-            raise ValueError("Must specify vega_version")
-        return {"application/vnd.vega.v{}+json".format(vega_version[0]): spec}
     if format in ["png", "svg", "pdf", "vega"]:
-        try:
-            import altair_saver
-        except ImportError:
-            raise ValueError(
-                "Saving charts in {fmt!r} format requires the altair_saver package: "
-                "see http://github.com/altair-viz/altair_saver/".format(fmt=format)
-            )
-        return altair_saver.render(spec, format, mode=mode, **kwargs)
+        return _spec_to_mimebundle_with_engine(
+            spec, format, mode, engine=engine, **kwargs
+        )
     if format == "html":
         html = spec_to_html(
             spec,
@@ -69,9 +62,6 @@ def spec_to_mimebundle(
         )
         return {"text/html": html}
     if format == "vega-lite":
-        assert mode == "vega-lite"  # sanity check: should never be False
-        if mode == "vega":
-            raise ValueError("Cannot convert a vega spec to vegalite")
         if vegalite_version is None:
             raise ValueError("Must specify vegalite_version")
         return {"application/vnd.vegalite.v{}+json".format(vegalite_version[0]): spec}
@@ -81,3 +71,126 @@ def spec_to_mimebundle(
         "format must be one of "
         "['html', 'json', 'png', 'svg', 'pdf', 'vega', 'vega-lite']"
     )
+
+
+def _spec_to_mimebundle_with_engine(spec, format, mode, **kwargs):
+    """Helper for Vega-Lite to mimebundle conversions that require an engine
+
+    Parameters
+    ----------
+    spec : dict
+        a dictionary representing a vega-lite plot spec
+    format : string {'png', 'svg', 'pdf', 'vega'}
+        the format of the mimebundle to be returned
+    mode : string {'vega-lite'}
+        The rendering mode.
+    engine: string {'vl-convert', 'altair_saver'}
+        the conversion engine to use
+    **kwargs :
+        Additional arguments will be passed to the conversion function
+    """
+    # Normalize the engine string (if any) by lower casing
+    # and removing underscores and hyphens
+    engine = kwargs.pop("engine", None)
+    normalized_engine = _validate_normalize_engine(engine, format)
+
+    if normalized_engine == "vlconvert":
+        import vl_convert as vlc
+        from ..vegalite import SCHEMA_VERSION
+
+        # Compute VlConvert's vl_version string (of the form 'v5_2')
+        # from SCHEMA_VERSION (of the form 'v5.2.0')
+        vl_version = "_".join(SCHEMA_VERSION.split(".")[:2])
+        if format == "vega":
+            vg = vlc.vegalite_to_vega(spec, vl_version=vl_version)
+            return {"application/vnd.vega.v5+json": vg}
+        elif format == "svg":
+            svg = vlc.vegalite_to_svg(spec, vl_version=vl_version)
+            return {"image/svg+xml": svg}
+        elif format == "png":
+            png = vlc.vegalite_to_png(
+                spec,
+                vl_version=vl_version,
+                scale=kwargs.get("scale_factor", 1.0),
+            )
+            return {"image/png": png}
+        else:
+            # This should be validated above
+            # but raise exception for the sake of future development
+            raise ValueError("Unexpected format {fmt!r}".format(fmt=format))
+    elif normalized_engine == "altairsaver":
+        import altair_saver
+
+        return altair_saver.render(spec, format, mode=mode, **kwargs)
+    else:
+        # This should be validated above
+        # but raise exception for the sake of future development
+        raise ValueError(
+            "Unexpected normalized_engine {eng!r}".format(eng=normalized_engine)
+        )
+
+
+def _validate_normalize_engine(engine, format):
+    """Helper to validate and normalize the user-provided engine
+
+    engine : {None, 'vl-convert', 'altair_saver'}
+        the user-provided engine string
+    format : string {'png', 'svg', 'pdf', 'vega'}
+        the format of the mimebundle to be returned
+    """
+    # Try to import vl_convert
+    try:
+        import vl_convert as vlc
+    except ImportError:
+        vlc = None
+
+    # Try to import altair_saver
+    try:
+        import altair_saver
+    except ImportError:
+        altair_saver = None
+
+    # Normalize engine string by lower casing and removing underscores and hyphens
+    normalized_engine = (
+        None if engine is None else engine.lower().replace("-", "").replace("_", "")
+    )
+
+    # Validate or infer default value of normalized_engine
+    if normalized_engine == "vlconvert":
+        if vlc is None:
+            raise ValueError(
+                "The 'vl-convert' conversion engine requires the vl-convert-python package"
+            )
+        if format == "pdf":
+            raise ValueError(
+                "The 'vl-convert' conversion engine does not support the {fmt!r} format.\n"
+                "Use the 'altair_saver' engine instead".format(fmt=format)
+            )
+    elif normalized_engine == "altairsaver":
+        if altair_saver is None:
+            raise ValueError(
+                "The 'altair_saver' conversion engine requires the altair_saver package"
+            )
+    elif normalized_engine is None:
+        if vlc is not None and format != "pdf":
+            normalized_engine = "vlconvert"
+        elif altair_saver is not None:
+            normalized_engine = "altairsaver"
+        else:
+            if format == "pdf":
+                raise ValueError(
+                    "Saving charts in {fmt!r} format requires the altair_saver package: "
+                    "see http://github.com/altair-viz/altair_saver/".format(fmt=format)
+                )
+            else:
+                raise ValueError(
+                    "Saving charts in {fmt!r} format requires the vl-convert-python or altair_saver package: "
+                    "see http://github.com/altair-viz/altair_saver/".format(fmt=format)
+                )
+    else:
+        raise ValueError(
+            "Invalid conversion engine {engine!r}. Expected one of {valid!r}".format(
+                engine=engine, valid=("vl-convert", "altair_saver")
+            )
+        )
+    return normalized_engine
diff --git a/altair/utils/plugin_registry.py b/altair/utils/plugin_registry.py
index b03cea7..37d3db2 100644
--- a/altair/utils/plugin_registry.py
+++ b/altair/utils/plugin_registry.py
@@ -1,14 +1,28 @@
+import sys
 from typing import Any, Dict, List, Optional, Generic, TypeVar, cast
 from types import TracebackType
 
-import entrypoints
+if sys.version_info >= (3, 8):
+    from importlib.metadata import entry_points
+else:
+    from importlib_metadata import entry_points
+
 from toolz import curry
 
 
 PluginType = TypeVar("PluginType")
 
 
-class PluginEnabler(object):
+class NoSuchEntryPoint(Exception):
+    def __init__(self, group, name):
+        self.group = group
+        self.name = name
+
+    def __str__(self):
+        return f"No {self.name!r} entry point found in group {self.group!r}"
+
+
+class PluginEnabler:
     """Context manager for enabling plugins
 
     This object lets you use enable() as a context manager to
@@ -101,16 +115,15 @@ class PluginRegistry(Generic[PluginType]):
         if value is None:
             return self._plugins.pop(name, None)
         else:
-            assert isinstance(value, self.plugin_type)
+            assert isinstance(value, self.plugin_type)  # type: ignore[arg-type]  # Should ideally be fixed by better annotating plugin_type
             self._plugins[name] = value
             return value
 
     def names(self) -> List[str]:
         """List the names of the registered and entry points plugins."""
         exts = list(self._plugins.keys())
-        more_exts = [
-            ep.name for ep in entrypoints.get_group_all(self.entry_point_group)
-        ]
+        e_points = importlib_metadata_get(self.entry_point_group)
+        more_exts = [ep.name for ep in e_points]
         exts.extend(more_exts)
         return sorted(set(exts))
 
@@ -139,12 +152,16 @@ class PluginRegistry(Generic[PluginType]):
     def _enable(self, name: str, **options) -> None:
         if name not in self._plugins:
             try:
-                ep = entrypoints.get_single(self.entry_point_group, name)
-            except entrypoints.NoSuchEntryPoint:
+                (ep,) = [
+                    ep
+                    for ep in importlib_metadata_get(self.entry_point_group)
+                    if ep.name == name
+                ]
+            except ValueError as err:
                 if name in self.entrypoint_err_messages:
-                    raise ValueError(self.entrypoint_err_messages[name])
+                    raise ValueError(self.entrypoint_err_messages[name]) from err
                 else:
-                    raise
+                    raise NoSuchEntryPoint(self.entry_point_group, name) from err
             value = cast(PluginType, ep.load())
             self.register(name, value)
         self._active_name = name
@@ -197,3 +214,15 @@ class PluginRegistry(Generic[PluginType]):
         return "{}(active={!r}, registered={!r})" "".format(
             self.__class__.__name__, self._active_name, list(self.names())
         )
+
+
+def importlib_metadata_get(group):
+    ep = entry_points()
+    # 'select' was introduced in Python 3.10 and 'get' got deprecated
+    # We don't check for Python version here as by checking with hasattr we
+    # also get compatibility with the importlib_metadata package which had a different
+    # deprecation cycle for 'get'
+    if hasattr(ep, "select"):
+        return ep.select(group=group)
+    else:
+        return ep.get(group, [])
diff --git a/altair/utils/save.py b/altair/utils/save.py
index 94ddab6..90d36f1 100644
--- a/altair/utils/save.py
+++ b/altair/utils/save.py
@@ -1,19 +1,59 @@
 import json
 import pathlib
+import warnings
 
 from .mimebundle import spec_to_mimebundle
+from ..vegalite.v5.data import data_transformers
 
 
-def write_file_or_filename(fp, content, mode="w"):
+def write_file_or_filename(fp, content, mode="w", encoding=None):
     """Write content to fp, whether fp is a string, a pathlib Path or a
     file-like object"""
     if isinstance(fp, str) or isinstance(fp, pathlib.PurePath):
-        with open(fp, mode) as f:
+        with open(file=fp, mode=mode, encoding=encoding) as f:
             f.write(content)
     else:
         fp.write(content)
 
 
+def set_inspect_format_argument(format, fp, inline):
+    """Inspect the format argument in the save function"""
+    if format is None:
+        if isinstance(fp, str):
+            format = fp.split(".")[-1]
+        elif isinstance(fp, pathlib.PurePath):
+            format = fp.suffix.lstrip(".")
+        else:
+            raise ValueError(
+                "must specify file format: "
+                "['png', 'svg', 'pdf', 'html', 'json', 'vega']"
+            )
+
+    if format != "html" and inline:
+        warnings.warn("inline argument ignored for non HTML formats.", stacklevel=1)
+
+    return format
+
+
+def set_inspect_mode_argument(mode, embed_options, spec, vegalite_version):
+    """Inspect the mode argument in the save function"""
+    if mode is None:
+        if "mode" in embed_options:
+            mode = embed_options["mode"]
+        elif "$schema" in spec:
+            mode = spec["$schema"].split("/")[-2]
+        else:
+            mode = "vega-lite"
+
+    if mode != "vega-lite":
+        raise ValueError("mode must be 'vega-lite', " "not '{}'".format(mode))
+
+    if mode == "vega-lite" and vegalite_version is None:
+        raise ValueError("must specify vega-lite version")
+
+    return mode
+
+
 def save(
     chart,
     fp,
@@ -24,13 +64,15 @@ def save(
     vegalite_version=None,
     embed_options=None,
     json_kwds=None,
-    webdriver="chrome",
+    webdriver=None,
     scale_factor=1,
+    engine=None,
+    inline=False,
     **kwargs,
 ):
     """Save a chart to file in a variety of formats
 
-    Supported formats are [json, html, png, svg]
+    Supported formats are [json, html, png, svg, pdf]
 
     Parameters
     ----------
@@ -39,28 +81,36 @@ def save(
     fp : string filename, pathlib.Path or file-like object
         file to which to write the chart.
     format : string (optional)
-        the format to write: one of ['json', 'html', 'png', 'svg'].
+        the format to write: one of ['json', 'html', 'png', 'svg', 'pdf'].
         If not specified, the format will be determined from the filename.
     mode : string (optional)
-        Either 'vega' or 'vegalite'. If not specified, then infer the mode from
+        Must be 'vega-lite'. If not specified, then infer the mode from
         the '$schema' property of the spec, or the ``opt`` dictionary.
-        If it's not specified in either of those places, then use 'vegalite'.
-    vega_version : string
+        If it's not specified in either of those places, then use 'vega-lite'.
+    vega_version : string (optional)
         For html output, the version of vega.js to use
-    vegalite_version : string
+    vegalite_version : string (optional)
         For html output, the version of vegalite.js to use
-    vegaembed_version : string
+    vegaembed_version : string (optional)
         For html output, the version of vegaembed.js to use
-    embed_options : dict
+    embed_options : dict (optional)
         The vegaEmbed options dictionary. Default is {}
         (See https://github.com/vega/vega-embed for details)
-    json_kwds : dict
+    json_kwds : dict (optional)
         Additional keyword arguments are passed to the output method
         associated with the specified format.
-    webdriver : string {'chrome' | 'firefox'}
+    webdriver : string {'chrome' | 'firefox'} (optional)
         Webdriver to use for png or svg output
-    scale_factor : float
+    scale_factor : float (optional)
         scale_factor to use to change size/resolution of png or svg output
+    engine: string {'vl-convert', 'altair_saver'}
+        the conversion engine to use for 'png', 'svg', and 'pdf' formats
+    inline: bool (optional)
+        If False (default), the required JavaScript libraries are loaded
+        from a CDN location in the resulting html file.
+        If True, the required JavaScript libraries are inlined into the resulting
+        html file so that it will work without an internet connection.
+        The altair_viewer package is required if True.
     **kwargs :
         additional kwargs passed to spec_to_mimebundle.
     """
@@ -70,65 +120,57 @@ def save(
     if embed_options is None:
         embed_options = {}
 
-    if format is None:
-        if isinstance(fp, str):
-            format = fp.split(".")[-1]
-        elif isinstance(fp, pathlib.PurePath):
-            format = fp.suffix.lstrip(".")
-        else:
-            raise ValueError(
-                "must specify file format: " "['png', 'svg', 'pdf', 'html', 'json']"
-            )
-
-    spec = chart.to_dict()
-
-    if mode is None:
-        if "mode" in embed_options:
-            mode = embed_options["mode"]
-        elif "$schema" in spec:
-            mode = spec["$schema"].split("/")[-2]
-        else:
-            mode = "vega-lite"
+    format = set_inspect_format_argument(format, fp, inline)
 
-    if mode not in ["vega", "vega-lite"]:
-        raise ValueError("mode must be 'vega' or 'vega-lite', " "not '{}'".format(mode))
+    # Temporarily turn off any data transformers so that all data is inlined
+    # when calling chart.to_dict. This is relevant for vl-convert which cannot access
+    # local json files which could be created by a json data transformer. Furthermore,
+    # we don't exit the with statement until this function completed due to the issue
+    # described at https://github.com/vega/vl-convert/issues/31
+    with data_transformers.enable("default"), data_transformers.disable_max_rows():
+        spec = chart.to_dict()
 
-    if mode == "vega-lite" and vegalite_version is None:
-        raise ValueError("must specify vega-lite version")
+        mode = set_inspect_mode_argument(mode, embed_options, spec, vegalite_version)
 
-    if format == "json":
-        json_spec = json.dumps(spec, **json_kwds)
-        write_file_or_filename(fp, json_spec, mode="w")
-    elif format == "html":
-        mimebundle = spec_to_mimebundle(
-            spec=spec,
-            format=format,
-            mode=mode,
-            vega_version=vega_version,
-            vegalite_version=vegalite_version,
-            vegaembed_version=vegaembed_version,
-            embed_options=embed_options,
-            json_kwds=json_kwds,
-            **kwargs,
-        )
-        write_file_or_filename(fp, mimebundle["text/html"], mode="w")
-    elif format in ["png", "svg", "pdf"]:
-        mimebundle = spec_to_mimebundle(
-            spec=spec,
-            format=format,
-            mode=mode,
-            vega_version=vega_version,
-            vegalite_version=vegalite_version,
-            vegaembed_version=vegaembed_version,
-            webdriver=webdriver,
-            scale_factor=scale_factor,
-            **kwargs,
-        )
-        if format == "png":
-            write_file_or_filename(fp, mimebundle["image/png"], mode="wb")
-        elif format == "pdf":
-            write_file_or_filename(fp, mimebundle["application/pdf"], mode="wb")
+        if format == "json":
+            json_spec = json.dumps(spec, **json_kwds)
+            write_file_or_filename(fp, json_spec, mode="w")
+        elif format == "html":
+            if inline:
+                kwargs["template"] = "inline"
+            mimebundle = spec_to_mimebundle(
+                spec=spec,
+                format=format,
+                mode=mode,
+                vega_version=vega_version,
+                vegalite_version=vegalite_version,
+                vegaembed_version=vegaembed_version,
+                embed_options=embed_options,
+                json_kwds=json_kwds,
+                **kwargs,
+            )
+            write_file_or_filename(fp, mimebundle["text/html"], mode="w")
+        elif format in ["png", "svg", "pdf", "vega"]:
+            mimebundle = spec_to_mimebundle(
+                spec=spec,
+                format=format,
+                mode=mode,
+                vega_version=vega_version,
+                vegalite_version=vegalite_version,
+                vegaembed_version=vegaembed_version,
+                webdriver=webdriver,
+                scale_factor=scale_factor,
+                engine=engine,
+                **kwargs,
+            )
+            if format == "png":
+                write_file_or_filename(fp, mimebundle["image/png"], mode="wb")
+            elif format == "pdf":
+                write_file_or_filename(fp, mimebundle["application/pdf"], mode="wb")
+            else:
+                encoding = kwargs.get("encoding", "utf-8")
+                write_file_or_filename(
+                    fp, mimebundle["image/svg+xml"], mode="w", encoding=encoding
+                )
         else:
-            write_file_or_filename(fp, mimebundle["image/svg+xml"], mode="w")
-    else:
-        raise ValueError("unrecognized format: '{}'".format(format))
+            raise ValueError("Unsupported format: '{}'".format(format))
diff --git a/altair/utils/schemapi.py b/altair/utils/schemapi.py
index 2dfdc8e..9fe29c2 100644
--- a/altair/utils/schemapi.py
+++ b/altair/utils/schemapi.py
@@ -4,11 +4,31 @@ import collections
 import contextlib
 import inspect
 import json
+import textwrap
+from typing import (
+    Any,
+    Sequence,
+    List,
+    Dict,
+    Optional,
+    DefaultDict,
+    Tuple,
+    Iterable,
+    Type,
+)
+from itertools import zip_longest
 
 import jsonschema
+import jsonschema.exceptions
+import jsonschema.validators
 import numpy as np
 import pandas as pd
 
+from altair import vegalite
+
+ValidationErrorList = List[jsonschema.exceptions.ValidationError]
+GroupedValidationErrors = Dict[str, ValidationErrorList]
+
 
 # If DEBUG_MODE is True, then schema objects are converted to dict and
 # validated at creation time. This slows things down, particularly for
@@ -25,7 +45,7 @@ def enable_debug_mode():
 
 def disable_debug_mode():
     global DEBUG_MODE
-    DEBUG_MODE = True
+    DEBUG_MODE = False
 
 
 @contextlib.contextmanager
@@ -39,6 +59,266 @@ def debug_mode(arg):
         DEBUG_MODE = original
 
 
+def validate_jsonschema(
+    spec: Dict[str, Any],
+    schema: Dict[str, Any],
+    rootschema: Optional[Dict[str, Any]] = None,
+    raise_error: bool = True,
+) -> Optional[jsonschema.exceptions.ValidationError]:
+    """Validates the passed in spec against the schema in the context of the
+    rootschema. If any errors are found, they are deduplicated and prioritized
+    and only the most relevant errors are kept. Errors are then either raised
+    or returned, depending on the value of `raise_error`.
+    """
+    errors = _get_errors_from_spec(spec, schema, rootschema=rootschema)
+    if errors:
+        leaf_errors = _get_leaves_of_error_tree(errors)
+        grouped_errors = _group_errors_by_json_path(leaf_errors)
+        grouped_errors = _subset_to_most_specific_json_paths(grouped_errors)
+        grouped_errors = _deduplicate_errors(grouped_errors)
+
+        # Nothing special about this first error but we need to choose one
+        # which can be raised
+        main_error = list(grouped_errors.values())[0][0]
+        # All errors are then attached as a new attribute to ValidationError so that
+        # they can be used in SchemaValidationError to craft a more helpful
+        # error message. Setting a new attribute like this is not ideal as
+        # it then no longer matches the type ValidationError. It would be better
+        # to refactor this function to never raise but only return errors.
+        main_error._all_errors = grouped_errors  # type: ignore[attr-defined]
+        if raise_error:
+            raise main_error
+        else:
+            return main_error
+    else:
+        return None
+
+
+def _get_errors_from_spec(
+    spec: Dict[str, Any],
+    schema: Dict[str, Any],
+    rootschema: Optional[Dict[str, Any]] = None,
+) -> ValidationErrorList:
+    """Uses the relevant jsonschema validator to validate the passed in spec
+    against the schema using the rootschema to resolve references.
+    The schema and rootschema themselves are not validated but instead considered
+    as valid.
+    """
+    # We don't use jsonschema.validate as this would validate the schema itself.
+    # Instead, we pass the schema directly to the validator class. This is done for
+    # two reasons: The schema comes from Vega-Lite and is not based on the user
+    # input, therefore there is no need to validate it in the first place. Furthermore,
+    # the "uri-reference" format checker fails for some of the references as URIs in
+    # "$ref" are not encoded,
+    # e.g. '#/definitions/ValueDefWithCondition<MarkPropFieldOrDatumDef,
+    # (Gradient|string|null)>' would be a valid $ref in a Vega-Lite schema but
+    # it is not a valid URI reference due to the characters such as '<'.
+    if rootschema is not None:
+        validator_cls = jsonschema.validators.validator_for(rootschema)
+        resolver = jsonschema.RefResolver.from_schema(rootschema)
+    else:
+        validator_cls = jsonschema.validators.validator_for(schema)
+        # No resolver is necessary if the schema is already the full schema
+        resolver = None
+
+    validator_kwargs = {"resolver": resolver}
+    if hasattr(validator_cls, "FORMAT_CHECKER"):
+        validator_kwargs["format_checker"] = validator_cls.FORMAT_CHECKER
+    validator = validator_cls(schema, **validator_kwargs)
+    errors = list(validator.iter_errors(spec))
+    return errors
+
+
+def _json_path(err: jsonschema.exceptions.ValidationError) -> str:
+    """Drop in replacement for the .json_path property of the jsonschema
+    ValidationError class, which is not available as property for
+    ValidationError with jsonschema<4.0.1.
+    More info, see https://github.com/altair-viz/altair/issues/3038
+    """
+    path = "$"
+    for elem in err.absolute_path:
+        if isinstance(elem, int):
+            path += "[" + str(elem) + "]"
+        else:
+            path += "." + elem
+    return path
+
+
+def _group_errors_by_json_path(
+    errors: ValidationErrorList,
+) -> GroupedValidationErrors:
+    """Groups errors by the `json_path` attribute of the jsonschema ValidationError
+    class. This attribute contains the path to the offending element within
+    a chart specification and can therefore be considered as an identifier of an
+    'issue' in the chart that needs to be fixed.
+    """
+    errors_by_json_path = collections.defaultdict(list)
+    for err in errors:
+        err_key = getattr(err, "json_path", _json_path(err))
+        errors_by_json_path[err_key].append(err)
+    return dict(errors_by_json_path)
+
+
+def _get_leaves_of_error_tree(
+    errors: ValidationErrorList,
+) -> ValidationErrorList:
+    """For each error in `errors`, it traverses down the "error tree" that is generated
+    by the jsonschema library to find and return all "leaf" errors. These are errors
+    which have no further errors that caused it and so they are the most specific errors
+    with the most specific error messages.
+    """
+    leaves: ValidationErrorList = []
+    for err in errors:
+        if err.context:
+            # This means that the error `err` was caused by errors in subschemas.
+            # The list of errors from the subschemas are available in the property
+            # `context`.
+            leaves.extend(_get_leaves_of_error_tree(err.context))
+        else:
+            leaves.append(err)
+    return leaves
+
+
+def _subset_to_most_specific_json_paths(
+    errors_by_json_path: GroupedValidationErrors,
+) -> GroupedValidationErrors:
+    """Removes key (json path), value (errors) pairs where the json path is fully
+    contained in another json path. For example if `errors_by_json_path` has two
+    keys, `$.encoding.X` and `$.encoding.X.tooltip`, then the first one will be removed
+    and only the second one is returned. This is done under the assumption that
+    more specific json paths give more helpful error messages to the user.
+    """
+    errors_by_json_path_specific: GroupedValidationErrors = {}
+    for json_path, errors in errors_by_json_path.items():
+        if not _contained_at_start_of_one_of_other_values(
+            json_path, list(errors_by_json_path.keys())
+        ):
+            errors_by_json_path_specific[json_path] = errors
+    return errors_by_json_path_specific
+
+
+def _contained_at_start_of_one_of_other_values(x: str, values: Sequence[str]) -> bool:
+    # Does not count as "contained at start of other value" if the values are
+    # the same. These cases should be handled separately
+    return any(value.startswith(x) for value in values if x != value)
+
+
+def _deduplicate_errors(
+    grouped_errors: GroupedValidationErrors,
+) -> GroupedValidationErrors:
+    """Some errors have very similar error messages or are just in general not helpful
+    for a user. This function removes as many of these cases as possible and
+    can be extended over time to handle new cases that come up.
+    """
+    grouped_errors_deduplicated: GroupedValidationErrors = {}
+    for json_path, element_errors in grouped_errors.items():
+        errors_by_validator = _group_errors_by_validator(element_errors)
+
+        deduplication_functions = {
+            "enum": _deduplicate_enum_errors,
+            "additionalProperties": _deduplicate_additional_properties_errors,
+        }
+        deduplicated_errors: ValidationErrorList = []
+        for validator, errors in errors_by_validator.items():
+            deduplication_func = deduplication_functions.get(validator, None)
+            if deduplication_func is not None:
+                errors = deduplication_func(errors)
+            deduplicated_errors.extend(_deduplicate_by_message(errors))
+
+        # Removes any ValidationError "'value' is a required property" as these
+        # errors are unlikely to be the relevant ones for the user. They come from
+        # validation against a schema definition where the output of `alt.value`
+        # would be valid. However, if a user uses `alt.value`, the `value` keyword
+        # is included automatically from that function and so it's unlikely
+        # that this was what the user intended if the keyword is not present
+        # in the first place.
+        deduplicated_errors = [
+            err for err in deduplicated_errors if not _is_required_value_error(err)
+        ]
+
+        grouped_errors_deduplicated[json_path] = deduplicated_errors
+    return grouped_errors_deduplicated
+
+
+def _is_required_value_error(err: jsonschema.exceptions.ValidationError) -> bool:
+    return err.validator == "required" and err.validator_value == ["value"]
+
+
+def _group_errors_by_validator(errors: ValidationErrorList) -> GroupedValidationErrors:
+    """Groups the errors by the json schema "validator" that casued the error. For
+    example if the error is that a value is not one of an enumeration in the json schema
+    then the "validator" is `"enum"`, if the error is due to an unknown property that
+    was set although no additional properties are allowed then "validator" is
+    `"additionalProperties`, etc.
+    """
+    errors_by_validator: DefaultDict[
+        str, ValidationErrorList
+    ] = collections.defaultdict(list)
+    for err in errors:
+        # Ignore mypy error as err.validator as it wrongly sees err.validator
+        # as of type Optional[Validator] instead of str which it is according
+        # to the documentation and all tested cases
+        errors_by_validator[err.validator].append(err)  # type: ignore[index]
+    return dict(errors_by_validator)
+
+
+def _deduplicate_enum_errors(errors: ValidationErrorList) -> ValidationErrorList:
+    """Deduplicate enum errors by removing the errors where the allowed values
+    are a subset of another error. For example, if `enum` contains two errors
+    and one has `validator_value` (i.e. accepted values) ["A", "B"] and the
+    other one ["A", "B", "C"] then the first one is removed and the final
+    `enum` list only contains the error with ["A", "B", "C"].
+    """
+    if len(errors) > 1:
+        # Values (and therefore `validator_value`) of an enum are always arrays,
+        # see https://json-schema.org/understanding-json-schema/reference/generic.html#enumerated-values
+        # which is why we can use join below
+        value_strings = [",".join(err.validator_value) for err in errors]
+        longest_enums: ValidationErrorList = []
+        for value_str, err in zip(value_strings, errors):
+            if not _contained_at_start_of_one_of_other_values(value_str, value_strings):
+                longest_enums.append(err)
+        errors = longest_enums
+    return errors
+
+
+def _deduplicate_additional_properties_errors(
+    errors: ValidationErrorList,
+) -> ValidationErrorList:
+    """If there are multiple additional property errors it usually means that
+    the offending element was validated against multiple schemas and
+    its parent is a common anyOf validator.
+    The error messages produced from these cases are usually
+    very similar and we just take the shortest one. For example,
+    the following 3 errors are raised for the `unknown` channel option in
+    `alt.X("variety", unknown=2)`:
+    - "Additional properties are not allowed ('unknown' was unexpected)"
+    - "Additional properties are not allowed ('field', 'unknown' were unexpected)"
+    - "Additional properties are not allowed ('field', 'type', 'unknown' were unexpected)"
+    """
+    if len(errors) > 1:
+        # Test if all parent errors are the same anyOf error and only do
+        # the prioritization in these cases. Can't think of a chart spec where this
+        # would not be the case but still allow for it below to not break anything.
+        parent = errors[0].parent
+        if (
+            parent is not None
+            and parent.validator == "anyOf"
+            # Use [1:] as don't have to check for first error as it was used
+            # above to define `parent`
+            and all(err.parent is parent for err in errors[1:])
+        ):
+            errors = [min(errors, key=lambda x: len(x.message))]
+    return errors
+
+
+def _deduplicate_by_message(errors: ValidationErrorList) -> ValidationErrorList:
+    """Deduplicate errors by message. This keeps the original order in case
+    it was chosen intentionally.
+    """
+    return list({e.message: e for e in errors}.values())
+
+
 def _subclasses(cls):
     """Breadth-first sequence of all classes which inherit from cls."""
     seen = set()
@@ -50,18 +330,14 @@ def _subclasses(cls):
             yield cls
 
 
-def _todict(obj, validate, context):
+def _todict(obj, context):
     """Convert an object to a dict representation."""
     if isinstance(obj, SchemaBase):
-        return obj.to_dict(validate=validate, context=context)
+        return obj.to_dict(validate=False, context=context)
     elif isinstance(obj, (list, tuple, np.ndarray)):
-        return [_todict(v, validate, context) for v in obj]
+        return [_todict(v, context) for v in obj]
     elif isinstance(obj, dict):
-        return {
-            k: _todict(v, validate, context)
-            for k, v in obj.items()
-            if v is not Undefined
-        }
+        return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
     elif hasattr(obj, "to_dict"):
         return obj.to_dict()
     elif isinstance(obj, np.number):
@@ -84,47 +360,215 @@ def _resolve_references(schema, root=None):
 class SchemaValidationError(jsonschema.ValidationError):
     """A wrapper for jsonschema.ValidationError with friendlier traceback"""
 
-    def __init__(self, obj, err):
-        super(SchemaValidationError, self).__init__(**self._get_contents(err))
+    def __init__(self, obj: "SchemaBase", err: jsonschema.ValidationError) -> None:
+        super().__init__(**err._contents())
         self.obj = obj
+        self._errors: GroupedValidationErrors = getattr(
+            err, "_all_errors", {getattr(err, "json_path", _json_path(err)): [err]}
+        )
+        # This is the message from err
+        self._original_message = self.message
+        self.message = self._get_message()
+
+    def __str__(self) -> str:
+        return self.message
+
+    def _get_message(self) -> str:
+        def indent_second_line_onwards(message: str, indent: int = 4) -> str:
+            modified_lines: List[str] = []
+            for idx, line in enumerate(message.split("\n")):
+                if idx > 0 and len(line) > 0:
+                    line = " " * indent + line
+                modified_lines.append(line)
+            return "\n".join(modified_lines)
+
+        error_messages: List[str] = []
+        # Only show a maximum of 3 errors as else the final message returned by this
+        # method could get very long.
+        for errors in list(self._errors.values())[:3]:
+            error_messages.append(self._get_message_for_errors_group(errors))
+
+        message = ""
+        if len(error_messages) > 1:
+            error_messages = [
+                indent_second_line_onwards(f"Error {error_id}: {m}")
+                for error_id, m in enumerate(error_messages, start=1)
+            ]
+            message += "Multiple errors were found.\n\n"
+        message += "\n\n".join(error_messages)
+        return message
+
+    def _get_message_for_errors_group(
+        self,
+        errors: ValidationErrorList,
+    ) -> str:
+        if errors[0].validator == "additionalProperties":
+            # During development, we only found cases where an additionalProperties
+            # error was raised if that was the only error for the offending instance
+            # as identifiable by the json path. Therefore, we just check here the first
+            # error. However, other constellations might exist in which case
+            # this should be adapted so that other error messages are shown as well.
+            message = self._get_additional_properties_error_message(errors[0])
+        else:
+            message = self._get_default_error_message(errors=errors)
+
+        return message.strip()
+
+    def _get_additional_properties_error_message(
+        self,
+        error: jsonschema.exceptions.ValidationError,
+    ) -> str:
+        """Output all existing parameters when an unknown parameter is specified."""
+        altair_cls = self._get_altair_class_for_error(error)
+        param_dict_keys = inspect.signature(altair_cls).parameters.keys()
+        param_names_table = self._format_params_as_table(param_dict_keys)
+
+        # Error messages for these errors look like this:
+        # "Additional properties are not allowed ('unknown' was unexpected)"
+        # Line below extracts "unknown" from this string
+        parameter_name = error.message.split("('")[-1].split("'")[0]
+        message = f"""\
+`{altair_cls.__name__}` has no parameter named '{parameter_name}'
+
+Existing parameter names are:
+{param_names_table}
+See the help for `{altair_cls.__name__}` to read the full description of these parameters"""
+        return message
+
+    def _get_altair_class_for_error(
+        self, error: jsonschema.exceptions.ValidationError
+    ) -> Type["SchemaBase"]:
+        """Try to get the lowest class possible in the chart hierarchy so
+        it can be displayed in the error message. This should lead to more informative
+        error messages pointing the user closer to the source of the issue.
+        """
+        for prop_name in reversed(error.absolute_path):
+            # Check if str as e.g. first item can be a 0
+            if isinstance(prop_name, str):
+                potential_class_name = prop_name[0].upper() + prop_name[1:]
+                cls = getattr(vegalite, potential_class_name, None)
+                if cls is not None:
+                    break
+        else:
+            # Did not find a suitable class based on traversing the path so we fall
+            # back on the class of the top-level object which created
+            # the SchemaValidationError
+            cls = self.obj.__class__
+        return cls
 
     @staticmethod
-    def _get_contents(err):
-        """Get a dictionary with the contents of a ValidationError"""
-        try:
-            # works in jsonschema 2.3 or later
-            contents = err._contents()
-        except AttributeError:
-            try:
-                # works in Python >=3.4
-                spec = inspect.getfullargspec(err.__init__)
-            except AttributeError:
-                # works in Python <3.4
-                spec = inspect.getargspec(err.__init__)
-            contents = {key: getattr(err, key) for key in spec.args[1:]}
-        return contents
-
-    def __str__(self):
-        cls = self.obj.__class__
-        schema_path = ["{}.{}".format(cls.__module__, cls.__name__)]
-        schema_path.extend(self.schema_path)
-        schema_path = "->".join(
-            str(val)
-            for val in schema_path[:-1]
-            if val not in ("properties", "additionalProperties", "patternProperties")
+    def _format_params_as_table(param_dict_keys: Iterable[str]) -> str:
+        """Format param names into a table so that they are easier to read"""
+        param_names: Tuple[str, ...]
+        name_lengths: Tuple[int, ...]
+        param_names, name_lengths = zip(  # type: ignore[assignment]  # Mypy does think it's Tuple[Any]
+            *[
+                (name, len(name))
+                for name in param_dict_keys
+                if name not in ["kwds", "self"]
+            ]
         )
-        return """Invalid specification
+        # Worst case scenario with the same longest param name in the same
+        # row for all columns
+        max_name_length = max(name_lengths)
+        max_column_width = 80
+        # Output a square table if not too big (since it is easier to read)
+        num_param_names = len(param_names)
+        square_columns = int(np.ceil(num_param_names**0.5))
+        columns = min(max_column_width // max_name_length, square_columns)
+
+        # Compute roughly equal column heights to evenly divide the param names
+        def split_into_equal_parts(n: int, p: int) -> List[int]:
+            return [n // p + 1] * (n % p) + [n // p] * (p - n % p)
+
+        column_heights = split_into_equal_parts(num_param_names, columns)
+
+        # Section the param names into columns and compute their widths
+        param_names_columns: List[Tuple[str, ...]] = []
+        column_max_widths: List[int] = []
+        last_end_idx: int = 0
+        for ch in column_heights:
+            param_names_columns.append(param_names[last_end_idx : last_end_idx + ch])
+            column_max_widths.append(
+                max([len(param_name) for param_name in param_names_columns[-1]])
+            )
+            last_end_idx = ch + last_end_idx
+
+        # Transpose the param name columns into rows to facilitate looping
+        param_names_rows: List[Tuple[str, ...]] = []
+        for li in zip_longest(*param_names_columns, fillvalue=""):
+            param_names_rows.append(li)
+        # Build the table as a string by iterating over and formatting the rows
+        param_names_table: str = ""
+        for param_names_row in param_names_rows:
+            for num, param_name in enumerate(param_names_row):
+                # Set column width based on the longest param in the column
+                max_name_length_column = column_max_widths[num]
+                column_pad = 3
+                param_names_table += "{:<{}}".format(
+                    param_name, max_name_length_column + column_pad
+                )
+                # Insert newlines and spacing after the last element in each row
+                if num == (len(param_names_row) - 1):
+                    param_names_table += "\n"
+        return param_names_table
+
+    def _get_default_error_message(
+        self,
+        errors: ValidationErrorList,
+    ) -> str:
+        bullet_points: List[str] = []
+        errors_by_validator = _group_errors_by_validator(errors)
+        if "enum" in errors_by_validator:
+            for error in errors_by_validator["enum"]:
+                bullet_points.append(f"one of {error.validator_value}")
+
+        if "type" in errors_by_validator:
+            types = [f"'{err.validator_value}'" for err in errors_by_validator["type"]]
+            point = "of type "
+            if len(types) == 1:
+                point += types[0]
+            elif len(types) == 2:
+                point += f"{types[0]} or {types[1]}"
+            else:
+                point += ", ".join(types[:-1]) + f", or {types[-1]}"
+            bullet_points.append(point)
+
+        # It should not matter which error is specifically used as they are all
+        # about the same offending instance (i.e. invalid value), so we can just
+        # take the first one
+        error = errors[0]
+        # Add a summary line when parameters are passed an invalid value
+        # For example: "'asdf' is an invalid value for `stack`
+        message = f"'{error.instance}' is an invalid value"
+        if error.absolute_path:
+            message += f" for `{error.absolute_path[-1]}`"
+
+        # Add bullet points
+        if len(bullet_points) == 0:
+            message += ".\n\n"
+        elif len(bullet_points) == 1:
+            message += f". Valid values are {bullet_points[0]}.\n\n"
+        else:
+            # We don't use .capitalize below to make the first letter uppercase
+            # as that makes the rest of the message lowercase
+            bullet_points = [point[0].upper() + point[1:] for point in bullet_points]
+            message += ". Valid values are:\n\n"
+            message += "\n".join([f"- {point}" for point in bullet_points])
+            message += "\n\n"
 
-        {}, validating {!r}
+        # Add unformatted messages of any remaining errors which were not
+        # considered so far. This is not expected to be used but more exists
+        # as a fallback for cases which were not known during development.
+        for validator, errors in errors_by_validator.items():
+            if validator not in ("enum", "type"):
+                message += "\n".join([e.message for e in errors])
 
-        {}
-        """.format(
-            schema_path, self.validator, self.message
-        )
+        return message
 
 
-class UndefinedType(object):
-    """A singleton object for marking undefined attributes"""
+class UndefinedType:
+    """A singleton object for marking undefined parameters"""
 
     __instance = None
 
@@ -137,20 +581,23 @@ class UndefinedType(object):
         return "Undefined"
 
 
-Undefined = UndefinedType()
+# In the future Altair may implement a more complete set of type hints.
+# But for now, we'll add an annotation to indicate that the type checker
+# should permit any value passed to a function argument whose default
+# value is Undefined.
+Undefined: Any = UndefinedType()
 
 
-class SchemaBase(object):
+class SchemaBase:
     """Base class for schema wrappers.
 
     Each derived class should set the _schema class attribute (and optionally
     the _rootschema class attribute) which is used for validation.
     """
 
-    _schema = None
-    _rootschema = None
+    _schema: Optional[Dict[str, Any]] = None
+    _rootschema: Optional[Dict[str, Any]] = None
     _class_is_valid_at_instantiation = True
-    _validator = jsonschema.Draft7Validator
 
     def __init__(self, *args, **kwds):
         # Two valid options for initialization, which should be handled by
@@ -292,11 +739,9 @@ class SchemaBase(object):
 
         Parameters
         ----------
-        validate : boolean or string
+        validate : boolean
             If True (default), then validate the output dictionary
-            against the schema. If "deep" then recursively validate
-            all objects in the spec. This takes much more time, but
-            it results in friendlier tracebacks for large objects.
+            against the schema.
         ignore : list
             A list of keys to ignore. This will *not* passed to child to_dict
             function calls.
@@ -318,14 +763,38 @@ class SchemaBase(object):
             context = {}
         if ignore is None:
             ignore = []
-        sub_validate = "deep" if validate == "deep" else False
 
         if self._args and not self._kwds:
-            result = _todict(self._args[0], validate=sub_validate, context=context)
+            result = _todict(self._args[0], context=context)
         elif not self._args:
+            kwds = self._kwds.copy()
+            # parsed_shorthand is added by FieldChannelMixin.
+            # It's used below to replace shorthand with its long form equivalent
+            # parsed_shorthand is removed from context if it exists so that it is
+            # not passed to child to_dict function calls
+            parsed_shorthand = context.pop("parsed_shorthand", {})
+            # Prevent that pandas categorical data is automatically sorted
+            # when a non-ordinal data type is specifed manually
+            # or if the encoding channel does not support sorting
+            if "sort" in parsed_shorthand and (
+                "sort" not in kwds or kwds["type"] not in ["ordinal", Undefined]
+            ):
+                parsed_shorthand.pop("sort")
+
+            kwds.update(
+                {
+                    k: v
+                    for k, v in parsed_shorthand.items()
+                    if kwds.get(k, Undefined) is Undefined
+                }
+            )
+            kwds = {
+                k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
+            }
+            if "mark" in kwds and isinstance(kwds["mark"], str):
+                kwds["mark"] = {"type": kwds["mark"]}
             result = _todict(
-                {k: v for k, v in self._kwds.items() if k not in ignore},
-                validate=sub_validate,
+                kwds,
                 context=context,
             )
         else:
@@ -337,22 +806,31 @@ class SchemaBase(object):
             try:
                 self.validate(result)
             except jsonschema.ValidationError as err:
-                raise SchemaValidationError(self, err)
+                # We do not raise `from err` as else the resulting
+                # traceback is very long as it contains part
+                # of the Vega-Lite schema. It would also first
+                # show the less helpful ValidationError instead of
+                # the more user friendly SchemaValidationError
+                raise SchemaValidationError(self, err) from None
         return result
 
     def to_json(
-        self, validate=True, ignore=[], context={}, indent=2, sort_keys=True, **kwargs
+        self,
+        validate=True,
+        ignore=None,
+        context=None,
+        indent=2,
+        sort_keys=True,
+        **kwargs,
     ):
         """Emit the JSON representation for this object as a string.
 
         Parameters
         ----------
-        validate : boolean or string
+        validate : boolean
             If True (default), then validate the output dictionary
-            against the schema. If "deep" then recursively validate
-            all objects in the spec. This takes much more time, but
-            it results in friendlier tracebacks for large objects.
-        ignore : list
+            against the schema.
+        ignore : list (optional)
             A list of keys to ignore. This will *not* passed to child to_dict
             function calls.
         context : dict (optional)
@@ -370,6 +848,10 @@ class SchemaBase(object):
         spec : string
             The JSON specification of the chart object.
         """
+        if ignore is None:
+            ignore = []
+        if context is None:
+            context = {}
         dct = self.to_dict(validate=validate, ignore=ignore, context=context)
         return json.dumps(dct, indent=indent, sort_keys=sort_keys, **kwargs)
 
@@ -439,9 +921,8 @@ class SchemaBase(object):
         """
         if schema is None:
             schema = cls._schema
-        resolver = jsonschema.RefResolver.from_schema(cls._rootschema or cls._schema)
-        return jsonschema.validate(
-            instance, schema, cls=cls._validator, resolver=resolver
+        return validate_jsonschema(
+            instance, schema, rootschema=cls._rootschema or cls._schema
         )
 
     @classmethod
@@ -458,20 +939,21 @@ class SchemaBase(object):
         Validate a property against property schema in the context of the
         rootschema
         """
-        value = _todict(value, validate=False, context={})
+        value = _todict(value, context={})
         props = cls.resolve_references(schema or cls._schema).get("properties", {})
-        resolver = jsonschema.RefResolver.from_schema(cls._rootschema or cls._schema)
-        return jsonschema.validate(value, props.get(name, {}), resolver=resolver)
+        return validate_jsonschema(
+            value, props.get(name, {}), rootschema=cls._rootschema or cls._schema
+        )
 
     def __dir__(self):
-        return list(self._kwds.keys())
+        return sorted(super().__dir__() + list(self._kwds.keys()))
 
 
 def _passthrough(*args, **kwds):
     return args[0] if args else kwds
 
 
-class _FromDict(object):
+class _FromDict:
     """Class used to construct SchemaBase class hierarchies from a dict
 
     The primary purpose of using this class is to be able to build a hash table
@@ -553,9 +1035,8 @@ class _FromDict(object):
         if "anyOf" in schema or "oneOf" in schema:
             schemas = schema.get("anyOf", []) + schema.get("oneOf", [])
             for possible_schema in schemas:
-                resolver = jsonschema.RefResolver.from_schema(rootschema)
                 try:
-                    jsonschema.validate(dct, possible_schema, resolver=resolver)
+                    validate_jsonschema(dct, possible_schema, rootschema=rootschema)
                 except jsonschema.ValidationError:
                     continue
                 else:
@@ -585,3 +1066,61 @@ class _FromDict(object):
             return cls(dct)
         else:
             return cls(dct)
+
+
+class _PropertySetter:
+    def __init__(self, prop, schema):
+        self.prop = prop
+        self.schema = schema
+
+    def __get__(self, obj, cls):
+        self.obj = obj
+        self.cls = cls
+        # The docs from the encoding class parameter (e.g. `bin` in X, Color,
+        # etc); this provides a general description of the parameter.
+        self.__doc__ = self.schema["description"].replace("__", "**")
+        property_name = f"{self.prop}"[0].upper() + f"{self.prop}"[1:]
+        if hasattr(vegalite, property_name):
+            altair_prop = getattr(vegalite, property_name)
+            # Add the docstring from the helper class (e.g. `BinParams`) so
+            # that all the parameter names of the helper class are included in
+            # the final docstring
+            parameter_index = altair_prop.__doc__.find("Parameters\n")
+            if parameter_index > -1:
+                self.__doc__ = (
+                    altair_prop.__doc__[:parameter_index].replace("    ", "")
+                    + self.__doc__
+                    + textwrap.dedent(
+                        f"\n\n    {altair_prop.__doc__[parameter_index:]}"
+                    )
+                )
+            # For short docstrings such as Aggregate, Stack, et
+            else:
+                self.__doc__ = (
+                    altair_prop.__doc__.replace("    ", "") + "\n" + self.__doc__
+                )
+            # Add signatures and tab completion for the method and parameter names
+            self.__signature__ = inspect.signature(altair_prop)
+            self.__wrapped__ = inspect.getfullargspec(altair_prop)
+            self.__name__ = altair_prop.__name__
+        else:
+            # It seems like bandPosition is the only parameter that doesn't
+            # have a helper class.
+            pass
+        return self
+
+    def __call__(self, *args, **kwargs):
+        obj = self.obj.copy()
+        # TODO: use schema to validate
+        obj[self.prop] = args[0] if args else kwargs
+        return obj
+
+
+def with_property_setters(cls):
+    """
+    Decorator to add property setters to a Schema class.
+    """
+    schema = cls.resolve_references()
+    for prop, propschema in schema.get("properties", {}).items():
+        setattr(cls, prop, _PropertySetter(prop, propschema))
+    return cls
diff --git a/altair/utils/server.py b/altair/utils/server.py
index f26a3f2..f2dfc29 100644
--- a/altair/utils/server.py
+++ b/altair/utils/server.py
@@ -23,7 +23,7 @@ You must interrupt the kernel to cancel this command.
 # Mock server used for testing
 
 
-class MockRequest(object):
+class MockRequest:
     def makefile(self, *args, **kwargs):
         return IO(b"GET /")
 
@@ -31,7 +31,7 @@ class MockRequest(object):
         pass
 
 
-class MockServer(object):
+class MockServer:
     def __init__(self, ip_port, Handler):
         Handler(MockRequest(), ip_port[0], self)
 
diff --git a/altair/utils/tests/test_schemapi.py b/altair/utils/tests/test_schemapi.py
deleted file mode 100644
index 09bbde7..0000000
--- a/altair/utils/tests/test_schemapi.py
+++ /dev/null
@@ -1,351 +0,0 @@
-# The contents of this file are automatically written by
-# tools/generate_schema_wrapper.py. Do not modify directly.
-import copy
-import io
-import json
-import jsonschema
-import pickle
-import pytest
-
-import numpy as np
-
-from ..schemapi import (
-    UndefinedType,
-    SchemaBase,
-    Undefined,
-    _FromDict,
-    SchemaValidationError,
-)
-
-# Make tests inherit from _TestSchema, so that when we test from_dict it won't
-# try to use SchemaBase objects defined elsewhere as wrappers.
-
-
-class _TestSchema(SchemaBase):
-    @classmethod
-    def _default_wrapper_classes(cls):
-        return _TestSchema.__subclasses__()
-
-
-class MySchema(_TestSchema):
-    _schema = {
-        "definitions": {
-            "StringMapping": {
-                "type": "object",
-                "additionalProperties": {"type": "string"},
-            },
-            "StringArray": {"type": "array", "items": {"type": "string"}},
-        },
-        "properties": {
-            "a": {"$ref": "#/definitions/StringMapping"},
-            "a2": {"type": "object", "additionalProperties": {"type": "number"}},
-            "b": {"$ref": "#/definitions/StringArray"},
-            "b2": {"type": "array", "items": {"type": "number"}},
-            "c": {"type": ["string", "number"]},
-            "d": {
-                "anyOf": [
-                    {"$ref": "#/definitions/StringMapping"},
-                    {"$ref": "#/definitions/StringArray"},
-                ]
-            },
-            "e": {"items": [{"type": "string"}, {"type": "string"}]},
-        },
-    }
-
-
-class StringMapping(_TestSchema):
-    _schema = {"$ref": "#/definitions/StringMapping"}
-    _rootschema = MySchema._schema
-
-
-class StringArray(_TestSchema):
-    _schema = {"$ref": "#/definitions/StringArray"}
-    _rootschema = MySchema._schema
-
-
-class Derived(_TestSchema):
-    _schema = {
-        "definitions": {
-            "Foo": {"type": "object", "properties": {"d": {"type": "string"}}},
-            "Bar": {"type": "string", "enum": ["A", "B"]},
-        },
-        "type": "object",
-        "additionalProperties": False,
-        "properties": {
-            "a": {"type": "integer"},
-            "b": {"type": "string"},
-            "c": {"$ref": "#/definitions/Foo"},
-        },
-    }
-
-
-class Foo(_TestSchema):
-    _schema = {"$ref": "#/definitions/Foo"}
-    _rootschema = Derived._schema
-
-
-class Bar(_TestSchema):
-    _schema = {"$ref": "#/definitions/Bar"}
-    _rootschema = Derived._schema
-
-
-class SimpleUnion(_TestSchema):
-    _schema = {"anyOf": [{"type": "integer"}, {"type": "string"}]}
-
-
-class DefinitionUnion(_TestSchema):
-    _schema = {"anyOf": [{"$ref": "#/definitions/Foo"}, {"$ref": "#/definitions/Bar"}]}
-    _rootschema = Derived._schema
-
-
-class SimpleArray(_TestSchema):
-    _schema = {
-        "type": "array",
-        "items": {"anyOf": [{"type": "integer"}, {"type": "string"}]},
-    }
-
-
-class InvalidProperties(_TestSchema):
-    _schema = {
-        "type": "object",
-        "properties": {"for": {}, "as": {}, "vega-lite": {}, "$schema": {}},
-    }
-
-
-def test_construct_multifaceted_schema():
-    dct = {
-        "a": {"foo": "bar"},
-        "a2": {"foo": 42},
-        "b": ["a", "b", "c"],
-        "b2": [1, 2, 3],
-        "c": 42,
-        "d": ["x", "y", "z"],
-        "e": ["a", "b"],
-    }
-
-    myschema = MySchema.from_dict(dct)
-    assert myschema.to_dict() == dct
-
-    myschema2 = MySchema(**dct)
-    assert myschema2.to_dict() == dct
-
-    assert isinstance(myschema.a, StringMapping)
-    assert isinstance(myschema.a2, dict)
-    assert isinstance(myschema.b, StringArray)
-    assert isinstance(myschema.b2, list)
-    assert isinstance(myschema.d, StringArray)
-
-
-def test_schema_cases():
-    assert Derived(a=4, b="yo").to_dict() == {"a": 4, "b": "yo"}
-    assert Derived(a=4, c={"d": "hey"}).to_dict() == {"a": 4, "c": {"d": "hey"}}
-    assert Derived(a=4, b="5", c=Foo(d="val")).to_dict() == {
-        "a": 4,
-        "b": "5",
-        "c": {"d": "val"},
-    }
-    assert Foo(d="hello", f=4).to_dict() == {"d": "hello", "f": 4}
-
-    assert Derived().to_dict() == {}
-    assert Foo().to_dict() == {}
-
-    with pytest.raises(jsonschema.ValidationError):
-        # a needs to be an integer
-        Derived(a="yo").to_dict()
-
-    with pytest.raises(jsonschema.ValidationError):
-        # Foo.d needs to be a string
-        Derived(c=Foo(4)).to_dict()
-
-    with pytest.raises(jsonschema.ValidationError):
-        # no additional properties allowed
-        Derived(foo="bar").to_dict()
-
-
-def test_round_trip():
-    D = {"a": 4, "b": "yo"}
-    assert Derived.from_dict(D).to_dict() == D
-
-    D = {"a": 4, "c": {"d": "hey"}}
-    assert Derived.from_dict(D).to_dict() == D
-
-    D = {"a": 4, "b": "5", "c": {"d": "val"}}
-    assert Derived.from_dict(D).to_dict() == D
-
-    D = {"d": "hello", "f": 4}
-    assert Foo.from_dict(D).to_dict() == D
-
-
-def test_from_dict():
-    D = {"a": 4, "b": "5", "c": {"d": "val"}}
-    obj = Derived.from_dict(D)
-    assert obj.a == 4
-    assert obj.b == "5"
-    assert isinstance(obj.c, Foo)
-
-
-def test_simple_type():
-    assert SimpleUnion(4).to_dict() == 4
-
-
-def test_simple_array():
-    assert SimpleArray([4, 5, "six"]).to_dict() == [4, 5, "six"]
-    assert SimpleArray.from_dict(list("abc")).to_dict() == list("abc")
-
-
-def test_definition_union():
-    obj = DefinitionUnion.from_dict("A")
-    assert isinstance(obj, Bar)
-    assert obj.to_dict() == "A"
-
-    obj = DefinitionUnion.from_dict("B")
-    assert isinstance(obj, Bar)
-    assert obj.to_dict() == "B"
-
-    obj = DefinitionUnion.from_dict({"d": "yo"})
-    assert isinstance(obj, Foo)
-    assert obj.to_dict() == {"d": "yo"}
-
-
-def test_invalid_properties():
-    dct = {"for": 2, "as": 3, "vega-lite": 4, "$schema": 5}
-    invalid = InvalidProperties.from_dict(dct)
-    assert invalid["for"] == 2
-    assert invalid["as"] == 3
-    assert invalid["vega-lite"] == 4
-    assert invalid["$schema"] == 5
-    assert invalid.to_dict() == dct
-
-
-def test_undefined_singleton():
-    assert Undefined is UndefinedType()
-
-
-@pytest.fixture
-def dct():
-    return {
-        "a": {"foo": "bar"},
-        "a2": {"foo": 42},
-        "b": ["a", "b", "c"],
-        "b2": [1, 2, 3],
-        "c": 42,
-        "d": ["x", "y", "z"],
-    }
-
-
-def test_copy_method(dct):
-    myschema = MySchema.from_dict(dct)
-
-    # Make sure copy is deep
-    copy = myschema.copy(deep=True)
-    copy["a"]["foo"] = "new value"
-    copy["b"] = ["A", "B", "C"]
-    copy["c"] = 164
-    assert myschema.to_dict() == dct
-
-    # If we ignore a value, changing the copy changes the original
-    copy = myschema.copy(deep=True, ignore=["a"])
-    copy["a"]["foo"] = "new value"
-    copy["b"] = ["A", "B", "C"]
-    copy["c"] = 164
-    mydct = myschema.to_dict()
-    assert mydct["a"]["foo"] == "new value"
-    assert mydct["b"][0] == dct["b"][0]
-    assert mydct["c"] == dct["c"]
-
-    # If copy is not deep, then changing copy below top level changes original
-    copy = myschema.copy(deep=False)
-    copy["a"]["foo"] = "baz"
-    copy["b"] = ["A", "B", "C"]
-    copy["c"] = 164
-    mydct = myschema.to_dict()
-    assert mydct["a"]["foo"] == "baz"
-    assert mydct["b"] == dct["b"]
-    assert mydct["c"] == dct["c"]
-
-
-def test_copy_module(dct):
-    myschema = MySchema.from_dict(dct)
-
-    cp = copy.deepcopy(myschema)
-    cp["a"]["foo"] = "new value"
-    cp["b"] = ["A", "B", "C"]
-    cp["c"] = 164
-    assert myschema.to_dict() == dct
-
-
-def test_attribute_error():
-    m = MySchema()
-    with pytest.raises(AttributeError) as err:
-        m.invalid_attribute
-    assert str(err.value) == (
-        "'MySchema' object has no attribute " "'invalid_attribute'"
-    )
-
-
-def test_to_from_json(dct):
-    json_str = MySchema.from_dict(dct).to_json()
-    new_dct = MySchema.from_json(json_str).to_dict()
-
-    assert new_dct == dct
-
-
-def test_to_from_pickle(dct):
-    myschema = MySchema.from_dict(dct)
-    output = io.BytesIO()
-    pickle.dump(myschema, output)
-    output.seek(0)
-    myschema_new = pickle.load(output)
-
-    assert myschema_new.to_dict() == dct
-
-
-def test_class_with_no_schema():
-    class BadSchema(SchemaBase):
-        pass
-
-    with pytest.raises(ValueError) as err:
-        BadSchema(4)
-    assert str(err.value).startswith("Cannot instantiate object")
-
-
-@pytest.mark.parametrize("use_json", [True, False])
-def test_hash_schema(use_json):
-    classes = _TestSchema._default_wrapper_classes()
-
-    for cls in classes:
-        hsh1 = _FromDict.hash_schema(cls._schema, use_json=use_json)
-        hsh2 = _FromDict.hash_schema(cls._schema, use_json=use_json)
-        assert hsh1 == hsh2
-        assert hash(hsh1) == hash(hsh2)
-
-
-def test_schema_validation_error():
-    try:
-        MySchema(a={"foo": 4})
-        the_err = None
-    except jsonschema.ValidationError as err:
-        the_err = err
-
-    assert isinstance(the_err, SchemaValidationError)
-    message = str(the_err)
-
-    assert message.startswith("Invalid specification")
-    assert "test_schemapi.MySchema->a" in message
-    assert "validating {!r}".format(the_err.validator) in message
-    assert the_err.message in message
-
-
-def test_serialize_numpy_types():
-    m = MySchema(
-        a={"date": np.datetime64("2019-01-01")},
-        a2={"int64": np.int64(1), "float64": np.float64(2)},
-        b2=np.arange(4),
-    )
-    out = m.to_json()
-    dct = json.loads(out)
-    assert dct == {
-        "a": {"date": "2019-01-01T00:00:00"},
-        "a2": {"int64": 1, "float64": 2},
-        "b2": [0, 1, 2, 3],
-    }
diff --git a/altair/vega/__init__.py b/altair/vega/__init__.py
deleted file mode 100644
index eec9f69..0000000
--- a/altair/vega/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-# flake8: noqa
-from .v5 import *
diff --git a/altair/vega/data.py b/altair/vega/data.py
deleted file mode 100644
index 8ad01f3..0000000
--- a/altair/vega/data.py
+++ /dev/null
@@ -1,47 +0,0 @@
-import pandas as pd
-from toolz import curried
-from ..utils.core import sanitize_dataframe
-from ..utils.data import (
-    MaxRowsError,
-    curry,
-    pipe,
-    sample,
-    to_csv,
-    to_json,
-    to_values,
-    check_data_type,
-)
-
-
-@curried.curry
-def limit_rows(data, max_rows=5000):
-    """Raise MaxRowsError if the data model has more than max_rows."""
-    if not isinstance(data, (list, pd.DataFrame)):
-        raise TypeError("Expected dict or DataFrame, got: {}".format(type(data)))
-    if len(data) > max_rows:
-        raise MaxRowsError(
-            "The number of rows in your dataset is greater than the max of {}".format(
-                max_rows
-            )
-        )
-    return data
-
-
-@curried.curry
-def default_data_transformer(data):
-    return curried.pipe(data, limit_rows, to_values)
-
-
-__all__ = (
-    "MaxRowsError",
-    "curry",
-    "default_data_transformer",
-    "limit_rows",
-    "pipe",
-    "sanitize_dataframe",
-    "sample",
-    "to_csv",
-    "to_json",
-    "to_values",
-    "check_data_type",
-)
diff --git a/altair/vega/display.py b/altair/vega/display.py
deleted file mode 100644
index adc3167..0000000
--- a/altair/vega/display.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from ..utils.display import Displayable, default_renderer_base, json_renderer_base
-from ..utils.display import MimeBundleType, RendererType, HTMLRenderer
-
-
-__all__ = (
-    "Displayable",
-    "default_renderer_base",
-    "json_renderer_base",
-    "MimeBundleType",
-    "RendererType",
-    "HTMLRenderer",
-)
diff --git a/altair/vega/tests/test_import.py b/altair/vega/tests/test_import.py
deleted file mode 100644
index c569b86..0000000
--- a/altair/vega/tests/test_import.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from altair.vega import SCHEMA_VERSION, SCHEMA_URL
-
-
-def test_schema_version():
-    assert SCHEMA_VERSION in SCHEMA_URL
diff --git a/altair/vega/v5/__init__.py b/altair/vega/v5/__init__.py
deleted file mode 100644
index 39d36c1..0000000
--- a/altair/vega/v5/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# flake8: noqa
-from .display import vega, Vega, renderers
-from .schema import *
-
-from .data import (
-    pipe,
-    curry,
-    limit_rows,
-    sample,
-    to_json,
-    to_csv,
-    to_values,
-    default_data_transformer,
-)
diff --git a/altair/vega/v5/data.py b/altair/vega/v5/data.py
deleted file mode 100644
index 7827336..0000000
--- a/altair/vega/v5/data.py
+++ /dev/null
@@ -1,29 +0,0 @@
-from ..data import (
-    MaxRowsError,
-    curry,
-    default_data_transformer,
-    limit_rows,
-    pipe,
-    sample,
-    to_csv,
-    to_json,
-    to_values,
-)
-
-
-# ==============================================================================
-# Vega 5 data transformers
-# ==============================================================================
-
-
-__all__ = (
-    "MaxRowsError",
-    "curry",
-    "default_data_transformer",
-    "limit_rows",
-    "pipe",
-    "sample",
-    "to_csv",
-    "to_json",
-    "to_values",
-)
diff --git a/altair/vega/v5/display.py b/altair/vega/v5/display.py
deleted file mode 100644
index 3e7f39a..0000000
--- a/altair/vega/v5/display.py
+++ /dev/null
@@ -1,110 +0,0 @@
-import os
-
-from ...utils import PluginRegistry
-from ..display import Displayable
-from ..display import default_renderer_base
-from ..display import json_renderer_base
-from ..display import RendererType
-from ..display import HTMLRenderer
-
-from .schema import SCHEMA_VERSION
-
-VEGA_VERSION = SCHEMA_VERSION.lstrip("v")
-VEGAEMBED_VERSION = "3"
-
-
-# ==============================================================================
-# Vega 5 renderer logic
-# ==============================================================================
-
-
-# The MIME type for Vega 5 releases.
-VEGA_MIME_TYPE = "application/vnd.vega.v5+json"  # type: str
-
-# The entry point group that can be used by other packages to declare other
-# renderers that will be auto-detected. Explicit registration is also
-# allowed by the PluginRegistery API.
-ENTRY_POINT_GROUP = "altair.vega.v5.renderer"  # type: str
-
-# The display message when rendering fails
-DEFAULT_DISPLAY = """\
-<Vega 5 object>
-
-If you see this message, it means the renderer has not been properly enabled
-for the frontend that you are using. For more information, see
-https://altair-viz.github.io/user_guide/troubleshooting.html
-"""
-
-renderers = PluginRegistry[RendererType](entry_point_group=ENTRY_POINT_GROUP)
-
-
-here = os.path.dirname(os.path.realpath(__file__))
-
-
-def default_renderer(spec):
-    return default_renderer_base(spec, VEGA_MIME_TYPE, DEFAULT_DISPLAY)
-
-
-def json_renderer(spec):
-    return json_renderer_base(spec, DEFAULT_DISPLAY)
-
-
-colab_renderer = HTMLRenderer(
-    mode="vega",
-    fullhtml=True,
-    requirejs=False,
-    output_div="altair-viz",
-    vega_version=VEGA_VERSION,
-    vegaembed_version=VEGAEMBED_VERSION,
-)
-
-
-kaggle_renderer = HTMLRenderer(
-    mode="vega",
-    fullhtml=False,
-    requirejs=True,
-    vega_version=VEGA_VERSION,
-    vegaembed_version=VEGAEMBED_VERSION,
-)
-
-
-html_renderer = HTMLRenderer(
-    mode="vega",
-    template="universal",
-    vega_version=VEGA_VERSION,
-    vegaembed_version=VEGAEMBED_VERSION,
-)
-
-
-renderers.register("default", default_renderer)
-renderers.register("html", html_renderer)
-renderers.register("jupyterlab", default_renderer)
-renderers.register("nteract", default_renderer)
-renderers.register("colab", colab_renderer)
-renderers.register("kaggle", kaggle_renderer)
-renderers.register("json", json_renderer)
-renderers.enable("default")
-
-
-class Vega(Displayable):
-    """An IPython/Jupyter display class for rendering Vega 5."""
-
-    renderers = renderers
-    schema_path = (__name__, "schema/vega-schema.json")
-
-
-def vega(spec, validate=True):
-    """Render and optionally validate a Vega 5 spec.
-
-    This will use the currently enabled renderer to render the spec.
-
-    Parameters
-    ==========
-    spec: dict
-        A fully compliant Vega 5 spec, with the data portion fully processed.
-    validate: bool
-        Should the spec be validated against the Vega 5 schema?
-    """
-    from IPython.display import display
-
-    display(Vega(spec, validate=validate))
diff --git a/altair/vega/v5/schema/__init__.py b/altair/vega/v5/schema/__init__.py
deleted file mode 100644
index 3764f92..0000000
--- a/altair/vega/v5/schema/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# flake8: noqa
-from .core import *
-
-SCHEMA_VERSION = 'v5.10.0'
-SCHEMA_URL = 'https://vega.github.io/schema/vega/v5.10.0.json'
diff --git a/altair/vega/v5/schema/core.py b/altair/vega/v5/schema/core.py
deleted file mode 100644
index 39b43e2..0000000
--- a/altair/vega/v5/schema/core.py
+++ /dev/null
@@ -1,3416 +0,0 @@
-# The contents of this file are automatically written by
-# tools/generate_schema_wrapper.py. Do not modify directly.
-
-from altair.utils.schemapi import SchemaBase, Undefined, _subclasses
-
-import pkgutil
-import json
-
-def load_schema():
-    """Load the json schema associated with this module's functions"""
-    return json.loads(pkgutil.get_data(__name__, 'vega-schema.json').decode('utf-8'))
-
-
-class VegaSchema(SchemaBase):
-    _rootschema = load_schema()
-    @classmethod
-    def _default_wrapper_classes(cls):
-        return _subclasses(VegaSchema)
-
-
-class Root(VegaSchema):
-    """Root schema wrapper
-
-    allOf(:class:`scope`, Mapping(required=[]))
-    """
-    _schema = VegaSchema._rootschema
-
-    def __init__(self, autosize=Undefined, axes=Undefined, background=Undefined, config=Undefined,
-                 data=Undefined, description=Undefined, encode=Undefined, height=Undefined,
-                 layout=Undefined, legends=Undefined, marks=Undefined, padding=Undefined,
-                 projections=Undefined, scales=Undefined, signals=Undefined, style=Undefined,
-                 title=Undefined, usermeta=Undefined, width=Undefined, **kwds):
-        super(Root, self).__init__(autosize=autosize, axes=axes, background=background, config=config,
-                                   data=data, description=description, encode=encode, height=height,
-                                   layout=layout, legends=legends, marks=marks, padding=padding,
-                                   projections=projections, scales=scales, signals=signals, style=style,
-                                   title=title, usermeta=usermeta, width=width, **kwds)
-
-
-class autosize(VegaSchema):
-    """autosize schema wrapper
-
-    oneOf(enum('pad', 'fit', 'fit-x', 'fit-y', 'none'), Mapping(required=[type]),
-    :class:`signal`)
-    """
-    _schema = {'$ref': '#/defs/autosize'}
-
-    def __init__(self, *args, **kwds):
-        super(autosize, self).__init__(*args, **kwds)
-
-
-class axis(VegaSchema):
-    """axis schema wrapper
-
-    Mapping(required=[orient, scale])
-
-    Attributes
-    ----------
-
-    orient : enum('top', 'bottom', 'left', 'right')
-
-    scale : string
-
-    bandPosition : oneOf(float, :class:`numberValue`)
-
-    domain : boolean
-
-    domainColor : oneOf(None, string, :class:`colorValue`)
-
-    domainDash : oneOf(List(float), :class:`arrayValue`)
-
-    domainDashOffset : oneOf(float, :class:`numberValue`)
-
-    domainOpacity : oneOf(float, :class:`numberValue`)
-
-    domainWidth : oneOf(float, :class:`numberValue`)
-
-    encode : Mapping(required=[])
-
-    format : oneOf(string, Mapping(required=[]), :class:`signal`)
-
-    formatType : oneOf(enum('number', 'time', 'utc'), :class:`signal`)
-
-    grid : boolean
-
-    gridColor : oneOf(None, string, :class:`colorValue`)
-
-    gridDash : oneOf(List(float), :class:`arrayValue`)
-
-    gridDashOffset : oneOf(float, :class:`numberValue`)
-
-    gridOpacity : oneOf(float, :class:`numberValue`)
-
-    gridScale : string
-
-    gridWidth : oneOf(float, :class:`numberValue`)
-
-    labelAlign : oneOf(enum('left', 'right', 'center'), :class:`alignValue`)
-
-    labelAngle : oneOf(float, :class:`numberValue`)
-
-    labelBaseline : oneOf(enum('top', 'middle', 'bottom', 'alphabetic', 'line-top',
-    'line-bottom'), :class:`baselineValue`)
-
-    labelBound : oneOf(boolean, float, :class:`signal`)
-
-    labelColor : oneOf(None, string, :class:`colorValue`)
-
-    labelFlush : oneOf(boolean, float, :class:`signal`)
-
-    labelFlushOffset : :class:`numberOrSignal`
-
-    labelFont : oneOf(string, :class:`stringValue`)
-
-    labelFontSize : oneOf(float, :class:`numberValue`)
-
-    labelFontStyle : oneOf(string, :class:`stringValue`)
-
-    labelFontWeight : oneOf(enum(None, 'normal', 'bold', 'lighter', 'bolder', '100', '200',
-    '300', '400', '500', '600', '700', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800,
-    900), :class:`fontWeightValue`)
-
-    labelLimit : oneOf(float, :class:`numberValue`)
-
-    labelLineHeight : oneOf(float, :class:`numberValue`)
-
-    labelOffset : oneOf(float, :class:`numberValue`)
-
-    labelOpacity : oneOf(float, :class:`numberValue`)
-
-    labelOverlap : :class:`labelOverlap`
-
-    labelPadding : oneOf(float, :class:`numberValue`)
-
-    labelSeparation : :class:`numberOrSignal`
-
-    labels : boolean
-
-    maxExtent : oneOf(float, :class:`numberValue`)
-
-    minExtent : oneOf(float, :class:`numberValue`)
-
-    offset : oneOf(float, :class:`numberValue`)
-
-    position : oneOf(float, :class:`numberValue`)
-
-    tickBand : :class:`tickBand`
-
-    tickColor : oneOf(None, string, :class:`colorValue`)
-
-    tickCount : :class:`tickCount`
-
-    tickDash : oneOf(List(float), :class:`arrayValue`)
-
-    tickDashOffset : oneOf(float, :class:`numberValue`)
-
-    tickExtra : :class:`booleanOrSignal`
-
-    tickMinStep : :class:`numberOrSignal`
-
-    tickOffset : oneOf(float, :class:`numberValue`)
-
-    tickOpacity : oneOf(float, :class:`numberValue`)
-
-    tickRound : oneOf(boolean, :class:`booleanValue`)
-
-    tickSize : oneOf(float, :class:`numberValue`)
-
-    tickWidth : oneOf(float, :class:`numberValue`)
-
-    ticks : boolean
-
-    title : :class:`textOrSignal`
-
-    titleAlign : oneOf(enum('left', 'right', 'center'), :class:`alignValue`)
-
-    titleAnchor : oneOf(enum(None, 'start', 'middle', 'end'), :class:`anchorValue`)
-
-    titleAngle : oneOf(float, :class:`numberValue`)
-
-    titleBaseline : oneOf(enum('top', 'middle', 'bottom', 'alphabetic', 'line-top',
-    'line-bottom'), :class:`baselineValue`)
-
-    titleColor : oneOf(None, string, :class:`colorValue`)
-
-    titleFont : oneOf(string, :class:`stringValue`)
-
-    titleFontSize : oneOf(float, :class:`numberValue`)
-
-    titleFontStyle : oneOf(string, :class:`stringValue`)
-
-    titleFontWeight : oneOf(enum(None, 'normal', 'bold', 'lighter', 'bolder', '100', '200',
-    '300', '400', '500', '600', '700', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800,
-    900), :class:`fontWeightValue`)
-
-    titleLimit : oneOf(float, :class:`numberValue`)
-
-    titleLineHeight : oneOf(float, :class:`numberValue`)
-
-    titleOpacity : oneOf(float, :class:`numberValue`)
-
-    titlePadding : oneOf(float, :class:`numberValue`)
-
-    titleX : oneOf(float, :class:`numberValue`)
-
-    titleY : oneOf(float, :class:`numberValue`)
-
-    translate : float
-
-    values : :class:`arrayOrSignal`
-
-    zindex : float
-
-    """
-    _schema = {'$ref': '#/defs/axis'}
-
-    def __init__(self, orient=Undefined, scale=Undefined, bandPosition=Undefined, domain=Undefined,
-                 domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined,
-                 domainOpacity=Undefined, domainWidth=Undefined, encode=Undefined, format=Undefined,
-                 formatType=Undefined, grid=Undefined, gridColor=Undefined, gridDash=Undefined,
-                 gridDashOffset=Undefined, gridOpacity=Undefined, gridScale=Undefined,
-                 gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined,
-                 labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined,
-                 labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined,
-                 labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined,
-                 labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined,
-                 labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined,
-                 labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined,
-                 offset=Undefined, position=Undefined, tickBand=Undefined, tickColor=Undefined,
-                 tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined,
-                 tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined,
-                 tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined,
-                 title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined,
-                 titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined,
-                 titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined,
-                 titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined,
-                 titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined,
-                 values=Undefined, zindex=Undefined, **kwds):
-        super(axis, self).__init__(orient=orient, scale=scale, bandPosition=bandPosition, domain=domain,
-                                   domainColor=domainColor, domainDash=domainDash,
-                                   domainDashOffset=domainDashOffset, domainOpacity=domainOpacity,
-                                   domainWidth=domainWidth, encode=encode, format=format,
-                                   formatType=formatType, grid=grid, gridColor=gridColor,
-                                   gridDash=gridDash, gridDashOffset=gridDashOffset,
-                                   gridOpacity=gridOpacity, gridScale=gridScale, gridWidth=gridWidth,
-                                   labelAlign=labelAlign, labelAngle=labelAngle,
-                                   labelBaseline=labelBaseline, labelBound=labelBound,
-                                   labelColor=labelColor, labelFlush=labelFlush,
-                                   labelFlushOffset=labelFlushOffset, labelFont=labelFont,
-                                   labelFontSize=labelFontSize, labelFontStyle=labelFontStyle,
-                                   labelFontWeight=labelFontWeight, labelLimit=labelLimit,
-                                   labelLineHeight=labelLineHeight, labelOffset=labelOffset,
-                                   labelOpacity=labelOpacity, labelOverlap=labelOverlap,
-                                   labelPadding=labelPadding, labelSeparation=labelSeparation,
-                                   labels=labels, maxExtent=maxExtent, minExtent=minExtent,
-                                   offset=offset, position=position, tickBand=tickBand,
-                                   tickColor=tickColor, tickCount=tickCount, tickDash=tickDash,
-                                   tickDashOffset=tickDashOffset, tickExtra=tickExtra,
-                                   tickMinStep=tickMinStep, tickOffset=tickOffset,
-                                   tickOpacity=tickOpacity, tickRound=tickRound, tickSize=tickSize,
-                                   tickWidth=tickWidth, ticks=ticks, title=title, titleAlign=titleAlign,
-                                   titleAnchor=titleAnchor, titleAngle=titleAngle,
-                                   titleBaseline=titleBaseline, titleColor=titleColor,
-                                   titleFont=titleFont, titleFontSize=titleFontSize,
-                                   titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight,
-                                   titleLimit=titleLimit, titleLineHeight=titleLineHeight,
-                                   titleOpacity=titleOpacity, titlePadding=titlePadding, titleX=titleX,
-                                   titleY=titleY, translate=translate, values=values, zindex=zindex,
-                                   **kwds)
-
-
-class background(VegaSchema):
-    """background schema wrapper
-
-    oneOf(string, :class:`signal`)
-    """
-    _schema = {'$ref': '#/defs/background'}
-
-    def __init__(self, *args, **kwds):
-        super(background, self).__init__(*args, **kwds)
-
-
-class bind(VegaSchema):
-    """bind schema wrapper
-
-    oneOf(Mapping(required=[input]), Mapping(required=[input, options]),
-    Mapping(required=[input]), Mapping(required=[input]))
-    """
-    _schema = {'$ref': '#/defs/bind'}
-
-    def __init__(self, *args, **kwds):
-        super(bind, self).__init__(*args, **kwds)
-
-
-class data(VegaSchema):
-    """data schema wrapper
-
-    oneOf(Mapping(required=[name]), Mapping(required=[source, name]), Mapping(required=[url,
-    name]), Mapping(required=[values, name]))
-    """
-    _schema = {'$ref': '#/defs/data'}
-
-    def __init__(self, *args, **kwds):
-        super(data, self).__init__(*args, **kwds)
-
-
-class rule(VegaSchema):
-    """rule schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    test : string
-
-    """
-    _schema = {'$ref': '#/defs/rule'}
-
-    def __init__(self, test=Undefined, **kwds):
-        super(rule, self).__init__(test=test, **kwds)
-
-
-class encodeEntry(VegaSchema):
-    """encodeEntry schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`alignValue`
-
-    angle : :class:`numberValue`
-
-    aspect : :class:`booleanValue`
-
-    baseline : :class:`baselineValue`
-
-    blend : :class:`blendValue`
-
-    clip : :class:`booleanValue`
-
-    cornerRadius : :class:`numberValue`
-
-    cornerRadiusBottomLeft : :class:`numberValue`
-
-    cornerRadiusBottomRight : :class:`numberValue`
-
-    cornerRadiusTopLeft : :class:`numberValue`
-
-    cornerRadiusTopRight : :class:`numberValue`
-
-    cursor : :class:`stringValue`
-
-    defined : :class:`booleanValue`
-
-    dir : :class:`stringValue`
-
-    dx : :class:`numberValue`
-
-    dy : :class:`numberValue`
-
-    ellipsis : :class:`stringValue`
-
-    endAngle : :class:`numberValue`
-
-    fill : :class:`colorValue`
-
-    fillOpacity : :class:`numberValue`
-
-    font : :class:`stringValue`
-
-    fontSize : :class:`numberValue`
-
-    fontStyle : :class:`stringValue`
-
-    fontWeight : :class:`fontWeightValue`
-
-    height : :class:`numberValue`
-
-    innerRadius : :class:`numberValue`
-
-    interpolate : :class:`stringValue`
-
-    limit : :class:`numberValue`
-
-    lineBreak : :class:`stringValue`
-
-    lineHeight : :class:`numberValue`
-
-    opacity : :class:`numberValue`
-
-    orient : :class:`directionValue`
-
-    outerRadius : :class:`numberValue`
-
-    padAngle : :class:`numberValue`
-
-    path : :class:`stringValue`
-
-    radius : :class:`numberValue`
-
-    scaleX : :class:`numberValue`
-
-    scaleY : :class:`numberValue`
-
-    shape : :class:`stringValue`
-
-    size : :class:`numberValue`
-
-    smooth : :class:`booleanValue`
-
-    startAngle : :class:`numberValue`
-
-    stroke : :class:`colorValue`
-
-    strokeCap : :class:`strokeCapValue`
-
-    strokeDash : :class:`arrayValue`
-
-    strokeDashOffset : :class:`numberValue`
-
-    strokeForeground : :class:`booleanValue`
-
-    strokeJoin : :class:`strokeJoinValue`
-
-    strokeMiterLimit : :class:`numberValue`
-
-    strokeOffset : :class:`numberValue`
-
-    strokeOpacity : :class:`numberValue`
-
-    strokeWidth : :class:`numberValue`
-
-    tension : :class:`numberValue`
-
-    text : :class:`textValue`
-
-    theta : :class:`numberValue`
-
-    tooltip : :class:`anyValue`
-
-    url : :class:`stringValue`
-
-    width : :class:`numberValue`
-
-    x : :class:`numberValue`
-
-    x2 : :class:`numberValue`
-
-    xc : :class:`numberValue`
-
-    y : :class:`numberValue`
-
-    y2 : :class:`numberValue`
-
-    yc : :class:`numberValue`
-
-    zindex : :class:`numberValue`
-
-    """
-    _schema = {'$ref': '#/defs/encodeEntry'}
-
-    def __init__(self, align=Undefined, angle=Undefined, aspect=Undefined, baseline=Undefined,
-                 blend=Undefined, clip=Undefined, cornerRadius=Undefined,
-                 cornerRadiusBottomLeft=Undefined, cornerRadiusBottomRight=Undefined,
-                 cornerRadiusTopLeft=Undefined, cornerRadiusTopRight=Undefined, cursor=Undefined,
-                 defined=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined,
-                 endAngle=Undefined, fill=Undefined, fillOpacity=Undefined, font=Undefined,
-                 fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined,
-                 innerRadius=Undefined, interpolate=Undefined, limit=Undefined, lineBreak=Undefined,
-                 lineHeight=Undefined, opacity=Undefined, orient=Undefined, outerRadius=Undefined,
-                 padAngle=Undefined, path=Undefined, radius=Undefined, scaleX=Undefined,
-                 scaleY=Undefined, shape=Undefined, size=Undefined, smooth=Undefined,
-                 startAngle=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                 strokeDashOffset=Undefined, strokeForeground=Undefined, strokeJoin=Undefined,
-                 strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
-                 xc=Undefined, y=Undefined, y2=Undefined, yc=Undefined, zindex=Undefined, **kwds):
-        super(encodeEntry, self).__init__(align=align, angle=angle, aspect=aspect, baseline=baseline,
-                                          blend=blend, clip=clip, cornerRadius=cornerRadius,
-                                          cornerRadiusBottomLeft=cornerRadiusBottomLeft,
-                                          cornerRadiusBottomRight=cornerRadiusBottomRight,
-                                          cornerRadiusTopLeft=cornerRadiusTopLeft,
-                                          cornerRadiusTopRight=cornerRadiusTopRight, cursor=cursor,
-                                          defined=defined, dir=dir, dx=dx, dy=dy, ellipsis=ellipsis,
-                                          endAngle=endAngle, fill=fill, fillOpacity=fillOpacity,
-                                          font=font, fontSize=fontSize, fontStyle=fontStyle,
-                                          fontWeight=fontWeight, height=height, innerRadius=innerRadius,
-                                          interpolate=interpolate, limit=limit, lineBreak=lineBreak,
-                                          lineHeight=lineHeight, opacity=opacity, orient=orient,
-                                          outerRadius=outerRadius, padAngle=padAngle, path=path,
-                                          radius=radius, scaleX=scaleX, scaleY=scaleY, shape=shape,
-                                          size=size, smooth=smooth, startAngle=startAngle,
-                                          stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                                          strokeDashOffset=strokeDashOffset,
-                                          strokeForeground=strokeForeground, strokeJoin=strokeJoin,
-                                          strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
-                                          strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                          tension=tension, text=text, theta=theta, tooltip=tooltip,
-                                          url=url, width=width, x=x, x2=x2, xc=xc, y=y, y2=y2, yc=yc,
-                                          zindex=zindex, **kwds)
-
-
-class encode(VegaSchema):
-    """encode schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/defs/encode'}
-
-    def __init__(self, **kwds):
-        super(encode, self).__init__(**kwds)
-
-
-class layout(VegaSchema):
-    """layout schema wrapper
-
-    oneOf(Mapping(required=[]), :class:`signal`)
-    """
-    _schema = {'$ref': '#/defs/layout'}
-
-    def __init__(self, *args, **kwds):
-        super(layout, self).__init__(*args, **kwds)
-
-
-class guideEncode(VegaSchema):
-    """guideEncode schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    interactive : boolean
-
-    name : string
-
-    style : :class:`style`
-
-    """
-    _schema = {'$ref': '#/defs/guideEncode'}
-
-    def __init__(self, interactive=Undefined, name=Undefined, style=Undefined, **kwds):
-        super(guideEncode, self).__init__(interactive=interactive, name=name, style=style, **kwds)
-
-
-class legend(VegaSchema):
-    """legend schema wrapper
-
-    allOf(Mapping(required=[]), anyOf(Mapping(required=[size]), Mapping(required=[shape]),
-    Mapping(required=[fill]), Mapping(required=[stroke]), Mapping(required=[opacity]),
-    Mapping(required=[strokeDash]), Mapping(required=[strokeWidth])))
-    """
-    _schema = {'$ref': '#/defs/legend'}
-
-    def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined,
-                 cornerRadius=Undefined, direction=Undefined, encode=Undefined, fill=Undefined,
-                 fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined,
-                 gradientOpacity=Undefined, gradientStrokeColor=Undefined,
-                 gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined,
-                 labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined,
-                 labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined,
-                 labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined,
-                 labelOpacity=Undefined, labelOverlap=Undefined, labelSeparation=Undefined,
-                 legendX=Undefined, legendY=Undefined, offset=Undefined, opacity=Undefined,
-                 orient=Undefined, padding=Undefined, rowPadding=Undefined, shape=Undefined,
-                 size=Undefined, stroke=Undefined, strokeColor=Undefined, strokeDash=Undefined,
-                 strokeWidth=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined,
-                 symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined,
-                 symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined,
-                 symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined,
-                 tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined,
-                 titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined,
-                 titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined,
-                 titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined,
-                 titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined,
-                 zindex=Undefined, **kwds):
-        super(legend, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding,
-                                     columns=columns, cornerRadius=cornerRadius, direction=direction,
-                                     encode=encode, fill=fill, fillColor=fillColor, format=format,
-                                     formatType=formatType, gradientLength=gradientLength,
-                                     gradientOpacity=gradientOpacity,
-                                     gradientStrokeColor=gradientStrokeColor,
-                                     gradientStrokeWidth=gradientStrokeWidth,
-                                     gradientThickness=gradientThickness, gridAlign=gridAlign,
-                                     labelAlign=labelAlign, labelBaseline=labelBaseline,
-                                     labelColor=labelColor, labelFont=labelFont,
-                                     labelFontSize=labelFontSize, labelFontStyle=labelFontStyle,
-                                     labelFontWeight=labelFontWeight, labelLimit=labelLimit,
-                                     labelOffset=labelOffset, labelOpacity=labelOpacity,
-                                     labelOverlap=labelOverlap, labelSeparation=labelSeparation,
-                                     legendX=legendX, legendY=legendY, offset=offset, opacity=opacity,
-                                     orient=orient, padding=padding, rowPadding=rowPadding, shape=shape,
-                                     size=size, stroke=stroke, strokeColor=strokeColor,
-                                     strokeDash=strokeDash, strokeWidth=strokeWidth,
-                                     symbolDash=symbolDash, symbolDashOffset=symbolDashOffset,
-                                     symbolFillColor=symbolFillColor, symbolLimit=symbolLimit,
-                                     symbolOffset=symbolOffset, symbolOpacity=symbolOpacity,
-                                     symbolSize=symbolSize, symbolStrokeColor=symbolStrokeColor,
-                                     symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType,
-                                     tickCount=tickCount, tickMinStep=tickMinStep, title=title,
-                                     titleAlign=titleAlign, titleAnchor=titleAnchor,
-                                     titleBaseline=titleBaseline, titleColor=titleColor,
-                                     titleFont=titleFont, titleFontSize=titleFontSize,
-                                     titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight,
-                                     titleLimit=titleLimit, titleLineHeight=titleLineHeight,
-                                     titleOpacity=titleOpacity, titleOrient=titleOrient,
-                                     titlePadding=titlePadding, type=type, values=values, zindex=zindex,
-                                     **kwds)
-
-
-class mark(VegaSchema):
-    """mark schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`marktype`
-
-    clip : :class:`markclip`
-
-    encode : :class:`encode`
-
-    interactive : :class:`booleanOrSignal`
-
-    key : string
-
-    name : string
-
-    on : :class:`onMarkTrigger`
-
-    role : string
-
-    sort : :class:`compare`
-
-    style : :class:`style`
-
-    transform : List(:class:`transformMark`)
-
-    """
-    _schema = {'$ref': '#/defs/mark'}
-
-    def __init__(self, type=Undefined, clip=Undefined, encode=Undefined, interactive=Undefined,
-                 key=Undefined, name=Undefined, on=Undefined, role=Undefined, sort=Undefined,
-                 style=Undefined, transform=Undefined, **kwds):
-        super(mark, self).__init__(type=type, clip=clip, encode=encode, interactive=interactive,
-                                   key=key, name=name, on=on, role=role, sort=sort, style=style,
-                                   transform=transform, **kwds)
-
-
-class markGroup(VegaSchema):
-    """markGroup schema wrapper
-
-    allOf(Mapping(required=[type]), :class:`mark`, :class:`scope`)
-    """
-    _schema = {'$ref': '#/defs/markGroup'}
-
-    def __init__(self, type=Undefined, axes=Undefined, clip=Undefined, data=Undefined, encode=Undefined,
-                 interactive=Undefined, key=Undefined, layout=Undefined, legends=Undefined,
-                 marks=Undefined, name=Undefined, on=Undefined, projections=Undefined, role=Undefined,
-                 scales=Undefined, signals=Undefined, sort=Undefined, style=Undefined, title=Undefined,
-                 transform=Undefined, usermeta=Undefined, **kwds):
-        super(markGroup, self).__init__(type=type, axes=axes, clip=clip, data=data, encode=encode,
-                                        interactive=interactive, key=key, layout=layout,
-                                        legends=legends, marks=marks, name=name, on=on,
-                                        projections=projections, role=role, scales=scales,
-                                        signals=signals, sort=sort, style=style, title=title,
-                                        transform=transform, usermeta=usermeta, **kwds)
-
-
-class markVisual(VegaSchema):
-    """markVisual schema wrapper
-
-    allOf(Mapping(required=[]), :class:`mark`)
-    """
-    _schema = {'$ref': '#/defs/markVisual'}
-
-    def __init__(self, type=Undefined, clip=Undefined, encode=Undefined, interactive=Undefined,
-                 key=Undefined, name=Undefined, on=Undefined, role=Undefined, sort=Undefined,
-                 style=Undefined, transform=Undefined, **kwds):
-        super(markVisual, self).__init__(type=type, clip=clip, encode=encode, interactive=interactive,
-                                         key=key, name=name, on=on, role=role, sort=sort, style=style,
-                                         transform=transform, **kwds)
-
-
-class listener(VegaSchema):
-    """listener schema wrapper
-
-    oneOf(:class:`signal`, Mapping(required=[scale]), :class:`stream`)
-    """
-    _schema = {'$ref': '#/defs/listener'}
-
-    def __init__(self, *args, **kwds):
-        super(listener, self).__init__(*args, **kwds)
-
-
-class onEvents(VegaSchema):
-    """onEvents schema wrapper
-
-    List(allOf(Mapping(required=[events]), oneOf(Mapping(required=[encode]),
-    Mapping(required=[update]))))
-    """
-    _schema = {'$ref': '#/defs/onEvents'}
-
-    def __init__(self, *args):
-        super(onEvents, self).__init__(*args)
-
-
-class onTrigger(VegaSchema):
-    """onTrigger schema wrapper
-
-    List(Mapping(required=[trigger]))
-    """
-    _schema = {'$ref': '#/defs/onTrigger'}
-
-    def __init__(self, *args):
-        super(onTrigger, self).__init__(*args)
-
-
-class onMarkTrigger(VegaSchema):
-    """onMarkTrigger schema wrapper
-
-    List(Mapping(required=[trigger]))
-    """
-    _schema = {'$ref': '#/defs/onMarkTrigger'}
-
-    def __init__(self, *args):
-        super(onMarkTrigger, self).__init__(*args)
-
-
-class padding(VegaSchema):
-    """padding schema wrapper
-
-    oneOf(float, Mapping(required=[]), :class:`signal`)
-    """
-    _schema = {'$ref': '#/defs/padding'}
-
-    def __init__(self, *args, **kwds):
-        super(padding, self).__init__(*args, **kwds)
-
-
-class projection(VegaSchema):
-    """projection schema wrapper
-
-    Mapping(required=[name])
-
-    Attributes
-    ----------
-
-    name : string
-
-    center : oneOf(List(:class:`numberOrSignal`), :class:`signal`)
-
-    clipAngle : :class:`numberOrSignal`
-
-    clipExtent : oneOf(List(oneOf(List(:class:`numberOrSignal`), :class:`signal`)),
-    :class:`signal`)
-
-    extent : oneOf(List(oneOf(List(:class:`numberOrSignal`), :class:`signal`)), :class:`signal`)
-
-    fit : oneOf(Mapping(required=[]), List(Any))
-
-    parallels : oneOf(List(:class:`numberOrSignal`), :class:`signal`)
-
-    pointRadius : :class:`numberOrSignal`
-
-    precision : :class:`numberOrSignal`
-
-    rotate : oneOf(List(:class:`numberOrSignal`), :class:`signal`)
-
-    scale : :class:`numberOrSignal`
-
-    size : oneOf(List(:class:`numberOrSignal`), :class:`signal`)
-
-    translate : oneOf(List(:class:`numberOrSignal`), :class:`signal`)
-
-    type : :class:`stringOrSignal`
-
-    """
-    _schema = {'$ref': '#/defs/projection'}
-
-    def __init__(self, name=Undefined, center=Undefined, clipAngle=Undefined, clipExtent=Undefined,
-                 extent=Undefined, fit=Undefined, parallels=Undefined, pointRadius=Undefined,
-                 precision=Undefined, rotate=Undefined, scale=Undefined, size=Undefined,
-                 translate=Undefined, type=Undefined, **kwds):
-        super(projection, self).__init__(name=name, center=center, clipAngle=clipAngle,
-                                         clipExtent=clipExtent, extent=extent, fit=fit,
-                                         parallels=parallels, pointRadius=pointRadius,
-                                         precision=precision, rotate=rotate, scale=scale, size=size,
-                                         translate=translate, type=type, **kwds)
-
-
-class scale(VegaSchema):
-    """scale schema wrapper
-
-    oneOf(Mapping(required=[type, name]), Mapping(required=[type, name]),
-    Mapping(required=[type, name]), Mapping(required=[type, name]), Mapping(required=[type,
-    name]), Mapping(required=[type, name]), Mapping(required=[type, name]),
-    Mapping(required=[type, name]), Mapping(required=[name]), Mapping(required=[type, name]),
-    Mapping(required=[type, name]), Mapping(required=[type, name]))
-    """
-    _schema = {'$ref': '#/defs/scale'}
-
-    def __init__(self, *args, **kwds):
-        super(scale, self).__init__(*args, **kwds)
-
-
-class scope(VegaSchema):
-    """scope schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    axes : List(:class:`axis`)
-
-    data : List(:class:`data`)
-
-    encode : :class:`encode`
-
-    layout : :class:`layout`
-
-    legends : List(:class:`legend`)
-
-    marks : List(oneOf(:class:`markGroup`, :class:`markVisual`))
-
-    projections : List(:class:`projection`)
-
-    scales : List(:class:`scale`)
-
-    signals : List(:class:`signal`)
-
-    title : :class:`title`
-
-    usermeta : Mapping(required=[])
-
-    """
-    _schema = {'$ref': '#/defs/scope'}
-
-    def __init__(self, axes=Undefined, data=Undefined, encode=Undefined, layout=Undefined,
-                 legends=Undefined, marks=Undefined, projections=Undefined, scales=Undefined,
-                 signals=Undefined, title=Undefined, usermeta=Undefined, **kwds):
-        super(scope, self).__init__(axes=axes, data=data, encode=encode, layout=layout, legends=legends,
-                                    marks=marks, projections=projections, scales=scales,
-                                    signals=signals, title=title, usermeta=usermeta, **kwds)
-
-
-class signalName(VegaSchema):
-    """signalName schema wrapper
-
-    not enum('parent', 'datum', 'event', 'item')
-    """
-    _schema = {'$ref': '#/defs/signalName'}
-
-    def __init__(self, *args):
-        super(signalName, self).__init__(*args)
-
-
-class signal(VegaSchema):
-    """signal schema wrapper
-
-    oneOf(Mapping(required=[name, push]), Mapping(required=[name]), Mapping(required=[name,
-    init]))
-    """
-    _schema = {'$ref': '#/defs/signal'}
-
-    def __init__(self, *args, **kwds):
-        super(signal, self).__init__(*args, **kwds)
-
-
-class stream(VegaSchema):
-    """stream schema wrapper
-
-    allOf(Mapping(required=[]), oneOf(Mapping(required=[type]), Mapping(required=[stream]),
-    Mapping(required=[merge])))
-    """
-    _schema = {'$ref': '#/defs/stream'}
-
-    def __init__(self, between=Undefined, consume=Undefined, debounce=Undefined, filter=Undefined,
-                 markname=Undefined, marktype=Undefined, throttle=Undefined, **kwds):
-        super(stream, self).__init__(between=between, consume=consume, debounce=debounce, filter=filter,
-                                     markname=markname, marktype=marktype, throttle=throttle, **kwds)
-
-
-class title(VegaSchema):
-    """title schema wrapper
-
-    oneOf(string, Mapping(required=[]))
-    """
-    _schema = {'$ref': '#/defs/title'}
-
-    def __init__(self, *args, **kwds):
-        super(title, self).__init__(*args, **kwds)
-
-
-class transform(VegaSchema):
-    """transform schema wrapper
-
-    oneOf(:class:`crossfilterTransform`, :class:`resolvefilterTransform`,
-    :class:`linkpathTransform`, :class:`pieTransform`, :class:`stackTransform`,
-    :class:`forceTransform`, :class:`contourTransform`, :class:`geojsonTransform`,
-    :class:`geopathTransform`, :class:`geopointTransform`, :class:`geoshapeTransform`,
-    :class:`graticuleTransform`, :class:`heatmapTransform`, :class:`isocontourTransform`,
-    :class:`kde2dTransform`, :class:`nestTransform`, :class:`packTransform`,
-    :class:`partitionTransform`, :class:`stratifyTransform`, :class:`treeTransform`,
-    :class:`treelinksTransform`, :class:`treemapTransform`, :class:`loessTransform`,
-    :class:`regressionTransform`, :class:`aggregateTransform`, :class:`binTransform`,
-    :class:`collectTransform`, :class:`countpatternTransform`, :class:`crossTransform`,
-    :class:`densityTransform`, :class:`dotbinTransform`, :class:`extentTransform`,
-    :class:`filterTransform`, :class:`flattenTransform`, :class:`foldTransform`,
-    :class:`formulaTransform`, :class:`imputeTransform`, :class:`joinaggregateTransform`,
-    :class:`kdeTransform`, :class:`lookupTransform`, :class:`pivotTransform`,
-    :class:`projectTransform`, :class:`quantileTransform`, :class:`sampleTransform`,
-    :class:`sequenceTransform`, :class:`timeunitTransform`, :class:`windowTransform`,
-    :class:`identifierTransform`, :class:`voronoiTransform`, :class:`wordcloudTransform`)
-    """
-    _schema = {'$ref': '#/defs/transform'}
-
-    def __init__(self, *args, **kwds):
-        super(transform, self).__init__(*args, **kwds)
-
-
-class transformMark(VegaSchema):
-    """transformMark schema wrapper
-
-    oneOf(:class:`crossfilterTransform`, :class:`resolvefilterTransform`,
-    :class:`linkpathTransform`, :class:`pieTransform`, :class:`stackTransform`,
-    :class:`forceTransform`, :class:`geojsonTransform`, :class:`geopathTransform`,
-    :class:`geopointTransform`, :class:`geoshapeTransform`, :class:`heatmapTransform`,
-    :class:`packTransform`, :class:`partitionTransform`, :class:`stratifyTransform`,
-    :class:`treeTransform`, :class:`treemapTransform`, :class:`binTransform`,
-    :class:`collectTransform`, :class:`dotbinTransform`, :class:`extentTransform`,
-    :class:`formulaTransform`, :class:`joinaggregateTransform`, :class:`lookupTransform`,
-    :class:`sampleTransform`, :class:`timeunitTransform`, :class:`windowTransform`,
-    :class:`identifierTransform`, :class:`voronoiTransform`, :class:`wordcloudTransform`)
-    """
-    _schema = {'$ref': '#/defs/transformMark'}
-
-    def __init__(self, *args, **kwds):
-        super(transformMark, self).__init__(*args, **kwds)
-
-
-class crossfilterTransform(VegaSchema):
-    """crossfilterTransform schema wrapper
-
-    Mapping(required=[type, fields, query])
-
-    Attributes
-    ----------
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    query : oneOf(List(Any), :class:`signal`)
-
-    type : enum('crossfilter')
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/crossfilterTransform'}
-
-    def __init__(self, fields=Undefined, query=Undefined, type=Undefined, signal=Undefined, **kwds):
-        super(crossfilterTransform, self).__init__(fields=fields, query=query, type=type, signal=signal,
-                                                   **kwds)
-
-
-class resolvefilterTransform(VegaSchema):
-    """resolvefilterTransform schema wrapper
-
-    Mapping(required=[type, ignore, filter])
-
-    Attributes
-    ----------
-
-    filter : Any
-
-    ignore : anyOf(float, :class:`signal`)
-
-    type : enum('resolvefilter')
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/resolvefilterTransform'}
-
-    def __init__(self, filter=Undefined, ignore=Undefined, type=Undefined, signal=Undefined, **kwds):
-        super(resolvefilterTransform, self).__init__(filter=filter, ignore=ignore, type=type,
-                                                     signal=signal, **kwds)
-
-
-class linkpathTransform(VegaSchema):
-    """linkpathTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('linkpath')
-
-    orient : anyOf(enum('horizontal', 'vertical', 'radial'), :class:`signal`)
-
-    require : :class:`signal`
-
-    shape : anyOf(enum('line', 'arc', 'curve', 'diagonal', 'orthogonal'), :class:`signal`)
-
-    signal : string
-
-    sourceX : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    sourceY : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    targetX : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    targetY : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/linkpathTransform'}
-
-    def __init__(self, type=Undefined, orient=Undefined, require=Undefined, shape=Undefined,
-                 signal=Undefined, sourceX=Undefined, sourceY=Undefined, targetX=Undefined,
-                 targetY=Undefined, **kwds):
-        super(linkpathTransform, self).__init__(type=type, orient=orient, require=require, shape=shape,
-                                                signal=signal, sourceX=sourceX, sourceY=sourceY,
-                                                targetX=targetX, targetY=targetY, **kwds)
-
-
-class pieTransform(VegaSchema):
-    """pieTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('pie')
-
-    endAngle : anyOf(float, :class:`signal`)
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    signal : string
-
-    sort : anyOf(boolean, :class:`signal`)
-
-    startAngle : anyOf(float, :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/pieTransform'}
-
-    def __init__(self, type=Undefined, endAngle=Undefined, field=Undefined, signal=Undefined,
-                 sort=Undefined, startAngle=Undefined, **kwds):
-        super(pieTransform, self).__init__(type=type, endAngle=endAngle, field=field, signal=signal,
-                                           sort=sort, startAngle=startAngle, **kwds)
-
-
-class stackTransform(VegaSchema):
-    """stackTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('stack')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    offset : anyOf(enum('zero', 'center', 'normalize'), :class:`signal`)
-
-    signal : string
-
-    sort : :class:`compare`
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/stackTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, groupby=Undefined, offset=Undefined,
-                 signal=Undefined, sort=Undefined, **kwds):
-        super(stackTransform, self).__init__(type=type, field=field, groupby=groupby, offset=offset,
-                                             signal=signal, sort=sort, **kwds)
-
-
-class forceTransform(VegaSchema):
-    """forceTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('force')
-
-    alpha : anyOf(float, :class:`signal`)
-
-    alphaMin : anyOf(float, :class:`signal`)
-
-    alphaTarget : anyOf(float, :class:`signal`)
-
-    forces : List(oneOf(Mapping(required=[force]), Mapping(required=[force]),
-    Mapping(required=[force]), Mapping(required=[force]), Mapping(required=[force]),
-    Mapping(required=[force])))
-
-    iterations : anyOf(float, :class:`signal`)
-
-    restart : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    static : anyOf(boolean, :class:`signal`)
-
-    velocityDecay : anyOf(float, :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/forceTransform'}
-
-    def __init__(self, type=Undefined, alpha=Undefined, alphaMin=Undefined, alphaTarget=Undefined,
-                 forces=Undefined, iterations=Undefined, restart=Undefined, signal=Undefined,
-                 static=Undefined, velocityDecay=Undefined, **kwds):
-        super(forceTransform, self).__init__(type=type, alpha=alpha, alphaMin=alphaMin,
-                                             alphaTarget=alphaTarget, forces=forces,
-                                             iterations=iterations, restart=restart, signal=signal,
-                                             static=static, velocityDecay=velocityDecay, **kwds)
-
-
-class contourTransform(VegaSchema):
-    """contourTransform schema wrapper
-
-    Mapping(required=[type, size])
-
-    Attributes
-    ----------
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    type : enum('contour')
-
-    bandwidth : anyOf(float, :class:`signal`)
-
-    cellSize : anyOf(float, :class:`signal`)
-
-    count : anyOf(float, :class:`signal`)
-
-    nice : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    smooth : anyOf(boolean, :class:`signal`)
-
-    thresholds : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    values : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    weight : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    """
-    _schema = {'$ref': '#/defs/contourTransform'}
-
-    def __init__(self, size=Undefined, type=Undefined, bandwidth=Undefined, cellSize=Undefined,
-                 count=Undefined, nice=Undefined, signal=Undefined, smooth=Undefined,
-                 thresholds=Undefined, values=Undefined, weight=Undefined, x=Undefined, y=Undefined,
-                 **kwds):
-        super(contourTransform, self).__init__(size=size, type=type, bandwidth=bandwidth,
-                                               cellSize=cellSize, count=count, nice=nice, signal=signal,
-                                               smooth=smooth, thresholds=thresholds, values=values,
-                                               weight=weight, x=x, y=y, **kwds)
-
-
-class geojsonTransform(VegaSchema):
-    """geojsonTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('geojson')
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    geojson : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/geojsonTransform'}
-
-    def __init__(self, type=Undefined, fields=Undefined, geojson=Undefined, signal=Undefined, **kwds):
-        super(geojsonTransform, self).__init__(type=type, fields=fields, geojson=geojson, signal=signal,
-                                               **kwds)
-
-
-class geopathTransform(VegaSchema):
-    """geopathTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('geopath')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    pointRadius : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    projection : string
-
-    signal : string
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/geopathTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, pointRadius=Undefined, projection=Undefined,
-                 signal=Undefined, **kwds):
-        super(geopathTransform, self).__init__(type=type, field=field, pointRadius=pointRadius,
-                                               projection=projection, signal=signal, **kwds)
-
-
-class geopointTransform(VegaSchema):
-    """geopointTransform schema wrapper
-
-    Mapping(required=[type, projection, fields])
-
-    Attributes
-    ----------
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    projection : string
-
-    type : enum('geopoint')
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/geopointTransform'}
-
-    def __init__(self, fields=Undefined, projection=Undefined, type=Undefined, signal=Undefined, **kwds):
-        super(geopointTransform, self).__init__(fields=fields, projection=projection, type=type,
-                                                signal=signal, **kwds)
-
-
-class geoshapeTransform(VegaSchema):
-    """geoshapeTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('geoshape')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    pointRadius : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    projection : string
-
-    signal : string
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/geoshapeTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, pointRadius=Undefined, projection=Undefined,
-                 signal=Undefined, **kwds):
-        super(geoshapeTransform, self).__init__(type=type, field=field, pointRadius=pointRadius,
-                                                projection=projection, signal=signal, **kwds)
-
-
-class graticuleTransform(VegaSchema):
-    """graticuleTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('graticule')
-
-    extent : oneOf(List(Any), :class:`signal`)
-
-    extentMajor : oneOf(List(Any), :class:`signal`)
-
-    extentMinor : oneOf(List(Any), :class:`signal`)
-
-    precision : anyOf(float, :class:`signal`)
-
-    signal : string
-
-    step : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    stepMajor : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    stepMinor : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/graticuleTransform'}
-
-    def __init__(self, type=Undefined, extent=Undefined, extentMajor=Undefined, extentMinor=Undefined,
-                 precision=Undefined, signal=Undefined, step=Undefined, stepMajor=Undefined,
-                 stepMinor=Undefined, **kwds):
-        super(graticuleTransform, self).__init__(type=type, extent=extent, extentMajor=extentMajor,
-                                                 extentMinor=extentMinor, precision=precision,
-                                                 signal=signal, step=step, stepMajor=stepMajor,
-                                                 stepMinor=stepMinor, **kwds)
-
-
-class heatmapTransform(VegaSchema):
-    """heatmapTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('heatmap')
-
-    color : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    opacity : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    resolve : anyOf(enum('shared', 'independent'), :class:`signal`)
-
-    signal : string
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/heatmapTransform'}
-
-    def __init__(self, type=Undefined, color=Undefined, field=Undefined, opacity=Undefined,
-                 resolve=Undefined, signal=Undefined, **kwds):
-        super(heatmapTransform, self).__init__(type=type, color=color, field=field, opacity=opacity,
-                                               resolve=resolve, signal=signal, **kwds)
-
-
-class isocontourTransform(VegaSchema):
-    """isocontourTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('isocontour')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    levels : anyOf(float, :class:`signal`)
-
-    nice : anyOf(boolean, :class:`signal`)
-
-    resolve : anyOf(enum('shared', 'independent'), :class:`signal`)
-
-    scale : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    signal : string
-
-    smooth : anyOf(boolean, :class:`signal`)
-
-    thresholds : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    translate : oneOf(List(anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)),
-    :class:`signal`)
-
-    zero : anyOf(boolean, :class:`signal`)
-
-    as : anyOf(string, :class:`signal`, None)
-
-    """
-    _schema = {'$ref': '#/defs/isocontourTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, levels=Undefined, nice=Undefined,
-                 resolve=Undefined, scale=Undefined, signal=Undefined, smooth=Undefined,
-                 thresholds=Undefined, translate=Undefined, zero=Undefined, **kwds):
-        super(isocontourTransform, self).__init__(type=type, field=field, levels=levels, nice=nice,
-                                                  resolve=resolve, scale=scale, signal=signal,
-                                                  smooth=smooth, thresholds=thresholds,
-                                                  translate=translate, zero=zero, **kwds)
-
-
-class kde2dTransform(VegaSchema):
-    """kde2dTransform schema wrapper
-
-    Mapping(required=[type, size, x, y])
-
-    Attributes
-    ----------
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    type : enum('kde2d')
-
-    x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    bandwidth : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    cellSize : anyOf(float, :class:`signal`)
-
-    counts : anyOf(boolean, :class:`signal`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    signal : string
-
-    weight : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/kde2dTransform'}
-
-    def __init__(self, size=Undefined, type=Undefined, x=Undefined, y=Undefined, bandwidth=Undefined,
-                 cellSize=Undefined, counts=Undefined, groupby=Undefined, signal=Undefined,
-                 weight=Undefined, **kwds):
-        super(kde2dTransform, self).__init__(size=size, type=type, x=x, y=y, bandwidth=bandwidth,
-                                             cellSize=cellSize, counts=counts, groupby=groupby,
-                                             signal=signal, weight=weight, **kwds)
-
-
-class nestTransform(VegaSchema):
-    """nestTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('nest')
-
-    generate : anyOf(boolean, :class:`signal`)
-
-    keys : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/nestTransform'}
-
-    def __init__(self, type=Undefined, generate=Undefined, keys=Undefined, signal=Undefined, **kwds):
-        super(nestTransform, self).__init__(type=type, generate=generate, keys=keys, signal=signal,
-                                            **kwds)
-
-
-class packTransform(VegaSchema):
-    """packTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('pack')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    padding : anyOf(float, :class:`signal`)
-
-    radius : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    signal : string
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    sort : :class:`compare`
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/packTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, padding=Undefined, radius=Undefined,
-                 signal=Undefined, size=Undefined, sort=Undefined, **kwds):
-        super(packTransform, self).__init__(type=type, field=field, padding=padding, radius=radius,
-                                            signal=signal, size=size, sort=sort, **kwds)
-
-
-class partitionTransform(VegaSchema):
-    """partitionTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('partition')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    padding : anyOf(float, :class:`signal`)
-
-    round : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    sort : :class:`compare`
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/partitionTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, padding=Undefined, round=Undefined,
-                 signal=Undefined, size=Undefined, sort=Undefined, **kwds):
-        super(partitionTransform, self).__init__(type=type, field=field, padding=padding, round=round,
-                                                 signal=signal, size=size, sort=sort, **kwds)
-
-
-class stratifyTransform(VegaSchema):
-    """stratifyTransform schema wrapper
-
-    Mapping(required=[type, key, parentKey])
-
-    Attributes
-    ----------
-
-    key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    parentKey : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('stratify')
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/stratifyTransform'}
-
-    def __init__(self, key=Undefined, parentKey=Undefined, type=Undefined, signal=Undefined, **kwds):
-        super(stratifyTransform, self).__init__(key=key, parentKey=parentKey, type=type, signal=signal,
-                                                **kwds)
-
-
-class treeTransform(VegaSchema):
-    """treeTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('tree')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    method : anyOf(enum('tidy', 'cluster'), :class:`signal`)
-
-    nodeSize : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    separation : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    sort : :class:`compare`
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/treeTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, method=Undefined, nodeSize=Undefined,
-                 separation=Undefined, signal=Undefined, size=Undefined, sort=Undefined, **kwds):
-        super(treeTransform, self).__init__(type=type, field=field, method=method, nodeSize=nodeSize,
-                                            separation=separation, signal=signal, size=size, sort=sort,
-                                            **kwds)
-
-
-class treelinksTransform(VegaSchema):
-    """treelinksTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('treelinks')
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/treelinksTransform'}
-
-    def __init__(self, type=Undefined, signal=Undefined, **kwds):
-        super(treelinksTransform, self).__init__(type=type, signal=signal, **kwds)
-
-
-class treemapTransform(VegaSchema):
-    """treemapTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('treemap')
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    method : anyOf(enum('squarify', 'resquarify', 'binary', 'dice', 'slice', 'slicedice'),
-    :class:`signal`)
-
-    padding : anyOf(float, :class:`signal`)
-
-    paddingBottom : anyOf(float, :class:`signal`)
-
-    paddingInner : anyOf(float, :class:`signal`)
-
-    paddingLeft : anyOf(float, :class:`signal`)
-
-    paddingOuter : anyOf(float, :class:`signal`)
-
-    paddingRight : anyOf(float, :class:`signal`)
-
-    paddingTop : anyOf(float, :class:`signal`)
-
-    ratio : anyOf(float, :class:`signal`)
-
-    round : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    sort : :class:`compare`
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/treemapTransform'}
-
-    def __init__(self, type=Undefined, field=Undefined, method=Undefined, padding=Undefined,
-                 paddingBottom=Undefined, paddingInner=Undefined, paddingLeft=Undefined,
-                 paddingOuter=Undefined, paddingRight=Undefined, paddingTop=Undefined, ratio=Undefined,
-                 round=Undefined, signal=Undefined, size=Undefined, sort=Undefined, **kwds):
-        super(treemapTransform, self).__init__(type=type, field=field, method=method, padding=padding,
-                                               paddingBottom=paddingBottom, paddingInner=paddingInner,
-                                               paddingLeft=paddingLeft, paddingOuter=paddingOuter,
-                                               paddingRight=paddingRight, paddingTop=paddingTop,
-                                               ratio=ratio, round=round, signal=signal, size=size,
-                                               sort=sort, **kwds)
-
-
-class loessTransform(VegaSchema):
-    """loessTransform schema wrapper
-
-    Mapping(required=[type, x, y])
-
-    Attributes
-    ----------
-
-    type : enum('loess')
-
-    x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    bandwidth : anyOf(float, :class:`signal`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/loessTransform'}
-
-    def __init__(self, type=Undefined, x=Undefined, y=Undefined, bandwidth=Undefined, groupby=Undefined,
-                 signal=Undefined, **kwds):
-        super(loessTransform, self).__init__(type=type, x=x, y=y, bandwidth=bandwidth, groupby=groupby,
-                                             signal=signal, **kwds)
-
-
-class regressionTransform(VegaSchema):
-    """regressionTransform schema wrapper
-
-    Mapping(required=[type, x, y])
-
-    Attributes
-    ----------
-
-    type : enum('regression')
-
-    x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    method : anyOf(string, :class:`signal`)
-
-    order : anyOf(float, :class:`signal`)
-
-    params : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/regressionTransform'}
-
-    def __init__(self, type=Undefined, x=Undefined, y=Undefined, extent=Undefined, groupby=Undefined,
-                 method=Undefined, order=Undefined, params=Undefined, signal=Undefined, **kwds):
-        super(regressionTransform, self).__init__(type=type, x=x, y=y, extent=extent, groupby=groupby,
-                                                  method=method, order=order, params=params,
-                                                  signal=signal, **kwds)
-
-
-class aggregateTransform(VegaSchema):
-    """aggregateTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('aggregate')
-
-    cross : anyOf(boolean, :class:`signal`)
-
-    drop : anyOf(boolean, :class:`signal`)
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`, None)),
-    :class:`signal`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    ops : oneOf(List(anyOf(enum('values', 'count', '__count__', 'missing', 'valid', 'sum',
-    'product', 'mean', 'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr',
-    'distinct', 'ci0', 'ci1', 'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'),
-    :class:`signal`)), :class:`signal`)
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/aggregateTransform'}
-
-    def __init__(self, type=Undefined, cross=Undefined, drop=Undefined, fields=Undefined,
-                 groupby=Undefined, key=Undefined, ops=Undefined, signal=Undefined, **kwds):
-        super(aggregateTransform, self).__init__(type=type, cross=cross, drop=drop, fields=fields,
-                                                 groupby=groupby, key=key, ops=ops, signal=signal,
-                                                 **kwds)
-
-
-class binTransform(VegaSchema):
-    """binTransform schema wrapper
-
-    Mapping(required=[type, field, extent])
-
-    Attributes
-    ----------
-
-    extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('bin')
-
-    anchor : anyOf(float, :class:`signal`)
-
-    base : anyOf(float, :class:`signal`)
-
-    divide : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    interval : anyOf(boolean, :class:`signal`)
-
-    maxbins : anyOf(float, :class:`signal`)
-
-    minstep : anyOf(float, :class:`signal`)
-
-    name : anyOf(string, :class:`signal`)
-
-    nice : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    span : anyOf(float, :class:`signal`)
-
-    step : anyOf(float, :class:`signal`)
-
-    steps : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/binTransform'}
-
-    def __init__(self, extent=Undefined, field=Undefined, type=Undefined, anchor=Undefined,
-                 base=Undefined, divide=Undefined, interval=Undefined, maxbins=Undefined,
-                 minstep=Undefined, name=Undefined, nice=Undefined, signal=Undefined, span=Undefined,
-                 step=Undefined, steps=Undefined, **kwds):
-        super(binTransform, self).__init__(extent=extent, field=field, type=type, anchor=anchor,
-                                           base=base, divide=divide, interval=interval, maxbins=maxbins,
-                                           minstep=minstep, name=name, nice=nice, signal=signal,
-                                           span=span, step=step, steps=steps, **kwds)
-
-
-class collectTransform(VegaSchema):
-    """collectTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('collect')
-
-    signal : string
-
-    sort : :class:`compare`
-
-    """
-    _schema = {'$ref': '#/defs/collectTransform'}
-
-    def __init__(self, type=Undefined, signal=Undefined, sort=Undefined, **kwds):
-        super(collectTransform, self).__init__(type=type, signal=signal, sort=sort, **kwds)
-
-
-class countpatternTransform(VegaSchema):
-    """countpatternTransform schema wrapper
-
-    Mapping(required=[type, field])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('countpattern')
-
-    case : anyOf(enum('upper', 'lower', 'mixed'), :class:`signal`)
-
-    pattern : anyOf(string, :class:`signal`)
-
-    signal : string
-
-    stopwords : anyOf(string, :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/countpatternTransform'}
-
-    def __init__(self, field=Undefined, type=Undefined, case=Undefined, pattern=Undefined,
-                 signal=Undefined, stopwords=Undefined, **kwds):
-        super(countpatternTransform, self).__init__(field=field, type=type, case=case, pattern=pattern,
-                                                    signal=signal, stopwords=stopwords, **kwds)
-
-
-class crossTransform(VegaSchema):
-    """crossTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('cross')
-
-    filter : :class:`exprString`
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/crossTransform'}
-
-    def __init__(self, type=Undefined, filter=Undefined, signal=Undefined, **kwds):
-        super(crossTransform, self).__init__(type=type, filter=filter, signal=signal, **kwds)
-
-
-class densityTransform(VegaSchema):
-    """densityTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('density')
-
-    distribution : oneOf(Mapping(required=[function]), Mapping(required=[function]),
-    Mapping(required=[function]), Mapping(required=[function, field]),
-    Mapping(required=[function]))
-
-    extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    maxsteps : anyOf(float, :class:`signal`)
-
-    method : anyOf(string, :class:`signal`)
-
-    minsteps : anyOf(float, :class:`signal`)
-
-    signal : string
-
-    steps : anyOf(float, :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/densityTransform'}
-
-    def __init__(self, type=Undefined, distribution=Undefined, extent=Undefined, maxsteps=Undefined,
-                 method=Undefined, minsteps=Undefined, signal=Undefined, steps=Undefined, **kwds):
-        super(densityTransform, self).__init__(type=type, distribution=distribution, extent=extent,
-                                               maxsteps=maxsteps, method=method, minsteps=minsteps,
-                                               signal=signal, steps=steps, **kwds)
-
-
-class dotbinTransform(VegaSchema):
-    """dotbinTransform schema wrapper
-
-    Mapping(required=[type, field])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('dotbin')
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    signal : string
-
-    smooth : anyOf(boolean, :class:`signal`)
-
-    step : anyOf(float, :class:`signal`)
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/dotbinTransform'}
-
-    def __init__(self, field=Undefined, type=Undefined, groupby=Undefined, signal=Undefined,
-                 smooth=Undefined, step=Undefined, **kwds):
-        super(dotbinTransform, self).__init__(field=field, type=type, groupby=groupby, signal=signal,
-                                              smooth=smooth, step=step, **kwds)
-
-
-class extentTransform(VegaSchema):
-    """extentTransform schema wrapper
-
-    Mapping(required=[type, field])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('extent')
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/extentTransform'}
-
-    def __init__(self, field=Undefined, type=Undefined, signal=Undefined, **kwds):
-        super(extentTransform, self).__init__(field=field, type=type, signal=signal, **kwds)
-
-
-class filterTransform(VegaSchema):
-    """filterTransform schema wrapper
-
-    Mapping(required=[type, expr])
-
-    Attributes
-    ----------
-
-    expr : :class:`exprString`
-
-    type : enum('filter')
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/filterTransform'}
-
-    def __init__(self, expr=Undefined, type=Undefined, signal=Undefined, **kwds):
-        super(filterTransform, self).__init__(expr=expr, type=type, signal=signal, **kwds)
-
-
-class flattenTransform(VegaSchema):
-    """flattenTransform schema wrapper
-
-    Mapping(required=[type, fields])
-
-    Attributes
-    ----------
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    type : enum('flatten')
-
-    index : anyOf(string, :class:`signal`)
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/flattenTransform'}
-
-    def __init__(self, fields=Undefined, type=Undefined, index=Undefined, signal=Undefined, **kwds):
-        super(flattenTransform, self).__init__(fields=fields, type=type, index=index, signal=signal,
-                                               **kwds)
-
-
-class foldTransform(VegaSchema):
-    """foldTransform schema wrapper
-
-    Mapping(required=[type, fields])
-
-    Attributes
-    ----------
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    type : enum('fold')
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/foldTransform'}
-
-    def __init__(self, fields=Undefined, type=Undefined, signal=Undefined, **kwds):
-        super(foldTransform, self).__init__(fields=fields, type=type, signal=signal, **kwds)
-
-
-class formulaTransform(VegaSchema):
-    """formulaTransform schema wrapper
-
-    Mapping(required=[type, expr, as])
-
-    Attributes
-    ----------
-
-    expr : :class:`exprString`
-
-    type : enum('formula')
-
-    initonly : anyOf(boolean, :class:`signal`)
-
-    signal : string
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/formulaTransform'}
-
-    def __init__(self, expr=Undefined, type=Undefined, initonly=Undefined, signal=Undefined, **kwds):
-        super(formulaTransform, self).__init__(expr=expr, type=type, initonly=initonly, signal=signal,
-                                               **kwds)
-
-
-class imputeTransform(VegaSchema):
-    """imputeTransform schema wrapper
-
-    Mapping(required=[type, field, key])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('impute')
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    keyvals : oneOf(List(Any), :class:`signal`)
-
-    method : anyOf(enum('value', 'mean', 'median', 'max', 'min'), :class:`signal`)
-
-    signal : string
-
-    value : Any
-
-    """
-    _schema = {'$ref': '#/defs/imputeTransform'}
-
-    def __init__(self, field=Undefined, key=Undefined, type=Undefined, groupby=Undefined,
-                 keyvals=Undefined, method=Undefined, signal=Undefined, value=Undefined, **kwds):
-        super(imputeTransform, self).__init__(field=field, key=key, type=type, groupby=groupby,
-                                              keyvals=keyvals, method=method, signal=signal,
-                                              value=value, **kwds)
-
-
-class joinaggregateTransform(VegaSchema):
-    """joinaggregateTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('joinaggregate')
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`, None)),
-    :class:`signal`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    ops : oneOf(List(anyOf(enum('values', 'count', '__count__', 'missing', 'valid', 'sum',
-    'product', 'mean', 'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr',
-    'distinct', 'ci0', 'ci1', 'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'),
-    :class:`signal`)), :class:`signal`)
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/joinaggregateTransform'}
-
-    def __init__(self, type=Undefined, fields=Undefined, groupby=Undefined, key=Undefined,
-                 ops=Undefined, signal=Undefined, **kwds):
-        super(joinaggregateTransform, self).__init__(type=type, fields=fields, groupby=groupby, key=key,
-                                                     ops=ops, signal=signal, **kwds)
-
-
-class kdeTransform(VegaSchema):
-    """kdeTransform schema wrapper
-
-    Mapping(required=[type, field])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('kde')
-
-    bandwidth : anyOf(float, :class:`signal`)
-
-    counts : anyOf(boolean, :class:`signal`)
-
-    cumulative : anyOf(boolean, :class:`signal`)
-
-    extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    maxsteps : anyOf(float, :class:`signal`)
-
-    minsteps : anyOf(float, :class:`signal`)
-
-    resolve : anyOf(enum('shared', 'independent'), :class:`signal`)
-
-    signal : string
-
-    steps : anyOf(float, :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/kdeTransform'}
-
-    def __init__(self, field=Undefined, type=Undefined, bandwidth=Undefined, counts=Undefined,
-                 cumulative=Undefined, extent=Undefined, groupby=Undefined, maxsteps=Undefined,
-                 minsteps=Undefined, resolve=Undefined, signal=Undefined, steps=Undefined, **kwds):
-        super(kdeTransform, self).__init__(field=field, type=type, bandwidth=bandwidth, counts=counts,
-                                           cumulative=cumulative, extent=extent, groupby=groupby,
-                                           maxsteps=maxsteps, minsteps=minsteps, resolve=resolve,
-                                           signal=signal, steps=steps, **kwds)
-
-
-class lookupTransform(VegaSchema):
-    """lookupTransform schema wrapper
-
-    Mapping(required=[type, from, key, fields])
-
-    Attributes
-    ----------
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('lookup')
-
-    default : Any
-
-    signal : string
-
-    values : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    from : string
-
-    """
-    _schema = {'$ref': '#/defs/lookupTransform'}
-
-    def __init__(self, fields=Undefined, key=Undefined, type=Undefined, default=Undefined,
-                 signal=Undefined, values=Undefined, **kwds):
-        super(lookupTransform, self).__init__(fields=fields, key=key, type=type, default=default,
-                                              signal=signal, values=values, **kwds)
-
-
-class pivotTransform(VegaSchema):
-    """pivotTransform schema wrapper
-
-    Mapping(required=[type, field, value])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('pivot')
-
-    value : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    key : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    limit : anyOf(float, :class:`signal`)
-
-    op : anyOf(enum('values', 'count', '__count__', 'missing', 'valid', 'sum', 'product',
-    'mean', 'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr', 'distinct', 'ci0',
-    'ci1', 'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'), :class:`signal`)
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/defs/pivotTransform'}
-
-    def __init__(self, field=Undefined, type=Undefined, value=Undefined, groupby=Undefined,
-                 key=Undefined, limit=Undefined, op=Undefined, signal=Undefined, **kwds):
-        super(pivotTransform, self).__init__(field=field, type=type, value=value, groupby=groupby,
-                                             key=key, limit=limit, op=op, signal=signal, **kwds)
-
-
-class projectTransform(VegaSchema):
-    """projectTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('project')
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    signal : string
-
-    as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/projectTransform'}
-
-    def __init__(self, type=Undefined, fields=Undefined, signal=Undefined, **kwds):
-        super(projectTransform, self).__init__(type=type, fields=fields, signal=signal, **kwds)
-
-
-class quantileTransform(VegaSchema):
-    """quantileTransform schema wrapper
-
-    Mapping(required=[type, field])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('quantile')
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    probs : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    signal : string
-
-    step : anyOf(float, :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/quantileTransform'}
-
-    def __init__(self, field=Undefined, type=Undefined, groupby=Undefined, probs=Undefined,
-                 signal=Undefined, step=Undefined, **kwds):
-        super(quantileTransform, self).__init__(field=field, type=type, groupby=groupby, probs=probs,
-                                                signal=signal, step=step, **kwds)
-
-
-class sampleTransform(VegaSchema):
-    """sampleTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('sample')
-
-    signal : string
-
-    size : anyOf(float, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/sampleTransform'}
-
-    def __init__(self, type=Undefined, signal=Undefined, size=Undefined, **kwds):
-        super(sampleTransform, self).__init__(type=type, signal=signal, size=size, **kwds)
-
-
-class sequenceTransform(VegaSchema):
-    """sequenceTransform schema wrapper
-
-    Mapping(required=[type, start, stop])
-
-    Attributes
-    ----------
-
-    start : anyOf(float, :class:`signal`)
-
-    stop : anyOf(float, :class:`signal`)
-
-    type : enum('sequence')
-
-    signal : string
-
-    step : anyOf(float, :class:`signal`)
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/sequenceTransform'}
-
-    def __init__(self, start=Undefined, stop=Undefined, type=Undefined, signal=Undefined,
-                 step=Undefined, **kwds):
-        super(sequenceTransform, self).__init__(start=start, stop=stop, type=type, signal=signal,
-                                                step=step, **kwds)
-
-
-class timeunitTransform(VegaSchema):
-    """timeunitTransform schema wrapper
-
-    Mapping(required=[type, field])
-
-    Attributes
-    ----------
-
-    field : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    type : enum('timeunit')
-
-    extent : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    interval : anyOf(boolean, :class:`signal`)
-
-    maxbins : anyOf(float, :class:`signal`)
-
-    signal : string
-
-    step : anyOf(float, :class:`signal`)
-
-    timezone : anyOf(enum('local', 'utc'), :class:`signal`)
-
-    units : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/timeunitTransform'}
-
-    def __init__(self, field=Undefined, type=Undefined, extent=Undefined, interval=Undefined,
-                 maxbins=Undefined, signal=Undefined, step=Undefined, timezone=Undefined,
-                 units=Undefined, **kwds):
-        super(timeunitTransform, self).__init__(field=field, type=type, extent=extent,
-                                                interval=interval, maxbins=maxbins, signal=signal,
-                                                step=step, timezone=timezone, units=units, **kwds)
-
-
-class windowTransform(VegaSchema):
-    """windowTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('window')
-
-    fields : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`, None)),
-    :class:`signal`)
-
-    frame : oneOf(List(anyOf(float, :class:`signal`, None)), :class:`signal`)
-
-    groupby : oneOf(List(oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)),
-    :class:`signal`)
-
-    ignorePeers : anyOf(boolean, :class:`signal`)
-
-    ops : oneOf(List(anyOf(enum('row_number', 'rank', 'dense_rank', 'percent_rank', 'cume_dist',
-    'ntile', 'lag', 'lead', 'first_value', 'last_value', 'nth_value', 'prev_value',
-    'next_value', 'values', 'count', '__count__', 'missing', 'valid', 'sum', 'product', 'mean',
-    'average', 'variance', 'variancep', 'stdev', 'stdevp', 'stderr', 'distinct', 'ci0', 'ci1',
-    'median', 'q1', 'q3', 'argmin', 'argmax', 'min', 'max'), :class:`signal`)), :class:`signal`)
-
-    params : oneOf(List(anyOf(float, :class:`signal`, None)), :class:`signal`)
-
-    signal : string
-
-    sort : :class:`compare`
-
-    as : oneOf(List(anyOf(string, :class:`signal`, None)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/windowTransform'}
-
-    def __init__(self, type=Undefined, fields=Undefined, frame=Undefined, groupby=Undefined,
-                 ignorePeers=Undefined, ops=Undefined, params=Undefined, signal=Undefined,
-                 sort=Undefined, **kwds):
-        super(windowTransform, self).__init__(type=type, fields=fields, frame=frame, groupby=groupby,
-                                              ignorePeers=ignorePeers, ops=ops, params=params,
-                                              signal=signal, sort=sort, **kwds)
-
-
-class identifierTransform(VegaSchema):
-    """identifierTransform schema wrapper
-
-    Mapping(required=[type, as])
-
-    Attributes
-    ----------
-
-    type : enum('identifier')
-
-    signal : string
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/identifierTransform'}
-
-    def __init__(self, type=Undefined, signal=Undefined, **kwds):
-        super(identifierTransform, self).__init__(type=type, signal=signal, **kwds)
-
-
-class voronoiTransform(VegaSchema):
-    """voronoiTransform schema wrapper
-
-    Mapping(required=[type, x, y])
-
-    Attributes
-    ----------
-
-    type : enum('voronoi')
-
-    x : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    y : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    extent : oneOf(List(Any), :class:`signal`)
-
-    signal : string
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    as : anyOf(string, :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/voronoiTransform'}
-
-    def __init__(self, type=Undefined, x=Undefined, y=Undefined, extent=Undefined, signal=Undefined,
-                 size=Undefined, **kwds):
-        super(voronoiTransform, self).__init__(type=type, x=x, y=y, extent=extent, signal=signal,
-                                               size=size, **kwds)
-
-
-class wordcloudTransform(VegaSchema):
-    """wordcloudTransform schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('wordcloud')
-
-    font : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    fontSize : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    fontSizeRange : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`, None)
-
-    fontStyle : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    fontWeight : anyOf(string, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    padding : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    rotate : anyOf(float, :class:`signal`, :class:`expr`, :class:`paramField`)
-
-    signal : string
-
-    size : oneOf(List(anyOf(float, :class:`signal`)), :class:`signal`)
-
-    spiral : anyOf(string, :class:`signal`)
-
-    text : oneOf(:class:`scaleField`, :class:`paramField`, :class:`expr`)
-
-    as : oneOf(List(anyOf(string, :class:`signal`)), :class:`signal`)
-
-    """
-    _schema = {'$ref': '#/defs/wordcloudTransform'}
-
-    def __init__(self, type=Undefined, font=Undefined, fontSize=Undefined, fontSizeRange=Undefined,
-                 fontStyle=Undefined, fontWeight=Undefined, padding=Undefined, rotate=Undefined,
-                 signal=Undefined, size=Undefined, spiral=Undefined, text=Undefined, **kwds):
-        super(wordcloudTransform, self).__init__(type=type, font=font, fontSize=fontSize,
-                                                 fontSizeRange=fontSizeRange, fontStyle=fontStyle,
-                                                 fontWeight=fontWeight, padding=padding, rotate=rotate,
-                                                 signal=signal, size=size, spiral=spiral, text=text,
-                                                 **kwds)
-
-
-class labelOverlap(VegaSchema):
-    """labelOverlap schema wrapper
-
-    oneOf(boolean, enum('parity', 'greedy'), :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/labelOverlap'}
-
-    def __init__(self, *args, **kwds):
-        super(labelOverlap, self).__init__(*args, **kwds)
-
-
-class tickBand(VegaSchema):
-    """tickBand schema wrapper
-
-    oneOf(enum('center', 'extent'), :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/tickBand'}
-
-    def __init__(self, *args, **kwds):
-        super(tickBand, self).__init__(*args, **kwds)
-
-
-class tickCount(VegaSchema):
-    """tickCount schema wrapper
-
-    oneOf(float, enum('millisecond', 'second', 'minute', 'hour', 'day', 'week', 'month',
-    'year'), Mapping(required=[interval]), :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/tickCount'}
-
-    def __init__(self, *args, **kwds):
-        super(tickCount, self).__init__(*args, **kwds)
-
-
-class element(VegaSchema):
-    """element schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/refs/element'}
-
-    def __init__(self, *args):
-        super(element, self).__init__(*args)
-
-
-class paramField(VegaSchema):
-    """paramField schema wrapper
-
-    Mapping(required=[field])
-
-    Attributes
-    ----------
-
-    field : string
-
-    as : string
-
-    """
-    _schema = {'$ref': '#/refs/paramField'}
-
-    def __init__(self, field=Undefined, **kwds):
-        super(paramField, self).__init__(field=field, **kwds)
-
-
-class field(VegaSchema):
-    """field schema wrapper
-
-    oneOf(string, :class:`signal`, Mapping(required=[datum]), Mapping(required=[group]),
-    Mapping(required=[parent]))
-    """
-    _schema = {'$ref': '#/refs/field'}
-
-    def __init__(self, *args, **kwds):
-        super(field, self).__init__(*args, **kwds)
-
-
-class scale(VegaSchema):
-    """scale schema wrapper
-
-    oneOf(string, :class:`signal`, Mapping(required=[datum]), Mapping(required=[group]),
-    Mapping(required=[parent]))
-    """
-    _schema = {'$ref': '#/refs/scale'}
-
-    def __init__(self, *args, **kwds):
-        super(scale, self).__init__(*args, **kwds)
-
-
-class stringModifiers(VegaSchema):
-    """stringModifiers schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    scale : :class:`scale`
-
-    """
-    _schema = {'$ref': '#/refs/stringModifiers'}
-
-    def __init__(self, scale=Undefined, **kwds):
-        super(stringModifiers, self).__init__(scale=scale, **kwds)
-
-
-class numberModifiers(VegaSchema):
-    """numberModifiers schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : oneOf(float, boolean)
-
-    exponent : oneOf(float, :class:`numberValue`)
-
-    extra : boolean
-
-    mult : oneOf(float, :class:`numberValue`)
-
-    offset : oneOf(float, :class:`numberValue`)
-
-    round : boolean
-
-    scale : :class:`scale`
-
-    """
-    _schema = {'$ref': '#/refs/numberModifiers'}
-
-    def __init__(self, band=Undefined, exponent=Undefined, extra=Undefined, mult=Undefined,
-                 offset=Undefined, round=Undefined, scale=Undefined, **kwds):
-        super(numberModifiers, self).__init__(band=band, exponent=exponent, extra=extra, mult=mult,
-                                              offset=offset, round=round, scale=scale, **kwds)
-
-
-class anyValue(VegaSchema):
-    """anyValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/anyValue'}
-
-    def __init__(self, *args, **kwds):
-        super(anyValue, self).__init__(*args, **kwds)
-
-
-class blendValue(VegaSchema):
-    """blendValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/blendValue'}
-
-    def __init__(self, *args, **kwds):
-        super(blendValue, self).__init__(*args, **kwds)
-
-
-class numberValue(VegaSchema):
-    """numberValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`numberModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`numberModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/numberValue'}
-
-    def __init__(self, *args, **kwds):
-        super(numberValue, self).__init__(*args, **kwds)
-
-
-class stringValue(VegaSchema):
-    """stringValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/stringValue'}
-
-    def __init__(self, *args, **kwds):
-        super(stringValue, self).__init__(*args, **kwds)
-
-
-class textValue(VegaSchema):
-    """textValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/textValue'}
-
-    def __init__(self, *args, **kwds):
-        super(textValue, self).__init__(*args, **kwds)
-
-
-class booleanValue(VegaSchema):
-    """booleanValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/booleanValue'}
-
-    def __init__(self, *args, **kwds):
-        super(booleanValue, self).__init__(*args, **kwds)
-
-
-class arrayValue(VegaSchema):
-    """arrayValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/arrayValue'}
-
-    def __init__(self, *args, **kwds):
-        super(arrayValue, self).__init__(*args, **kwds)
-
-
-class fontWeightValue(VegaSchema):
-    """fontWeightValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/fontWeightValue'}
-
-    def __init__(self, *args, **kwds):
-        super(fontWeightValue, self).__init__(*args, **kwds)
-
-
-class anchorValue(VegaSchema):
-    """anchorValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/anchorValue'}
-
-    def __init__(self, *args, **kwds):
-        super(anchorValue, self).__init__(*args, **kwds)
-
-
-class alignValue(VegaSchema):
-    """alignValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/alignValue'}
-
-    def __init__(self, *args, **kwds):
-        super(alignValue, self).__init__(*args, **kwds)
-
-
-class baselineValue(VegaSchema):
-    """baselineValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/baselineValue'}
-
-    def __init__(self, *args, **kwds):
-        super(baselineValue, self).__init__(*args, **kwds)
-
-
-class directionValue(VegaSchema):
-    """directionValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/directionValue'}
-
-    def __init__(self, *args, **kwds):
-        super(directionValue, self).__init__(*args, **kwds)
-
-
-class orientValue(VegaSchema):
-    """orientValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/orientValue'}
-
-    def __init__(self, *args, **kwds):
-        super(orientValue, self).__init__(*args, **kwds)
-
-
-class strokeCapValue(VegaSchema):
-    """strokeCapValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/strokeCapValue'}
-
-    def __init__(self, *args, **kwds):
-        super(strokeCapValue, self).__init__(*args, **kwds)
-
-
-class strokeJoinValue(VegaSchema):
-    """strokeJoinValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))), allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))))
-    """
-    _schema = {'$ref': '#/refs/strokeJoinValue'}
-
-    def __init__(self, *args, **kwds):
-        super(strokeJoinValue, self).__init__(*args, **kwds)
-
-
-class baseColorValue(VegaSchema):
-    """baseColorValue schema wrapper
-
-    oneOf(allOf(:class:`stringModifiers`, anyOf(oneOf(:class:`signal`,
-    Mapping(required=[value]), Mapping(required=[field]), Mapping(required=[range])),
-    Mapping(required=[scale, value]), Mapping(required=[scale, band]),
-    Mapping(required=[offset]))), Mapping(required=[value]), Mapping(required=[value]),
-    Mapping(required=[gradient]), Mapping(required=[color]))
-    """
-    _schema = {'$ref': '#/refs/baseColorValue'}
-
-    def __init__(self, *args, **kwds):
-        super(baseColorValue, self).__init__(*args, **kwds)
-
-
-class colorRGB(VegaSchema):
-    """colorRGB schema wrapper
-
-    Mapping(required=[r, g, b])
-
-    Attributes
-    ----------
-
-    b : :class:`numberValue`
-
-    g : :class:`numberValue`
-
-    r : :class:`numberValue`
-
-    """
-    _schema = {'$ref': '#/refs/colorRGB'}
-
-    def __init__(self, b=Undefined, g=Undefined, r=Undefined, **kwds):
-        super(colorRGB, self).__init__(b=b, g=g, r=r, **kwds)
-
-
-class colorHSL(VegaSchema):
-    """colorHSL schema wrapper
-
-    Mapping(required=[h, s, l])
-
-    Attributes
-    ----------
-
-    h : :class:`numberValue`
-
-    l : :class:`numberValue`
-
-    s : :class:`numberValue`
-
-    """
-    _schema = {'$ref': '#/refs/colorHSL'}
-
-    def __init__(self, h=Undefined, l=Undefined, s=Undefined, **kwds):
-        super(colorHSL, self).__init__(h=h, l=l, s=s, **kwds)
-
-
-class colorLAB(VegaSchema):
-    """colorLAB schema wrapper
-
-    Mapping(required=[l, a, b])
-
-    Attributes
-    ----------
-
-    a : :class:`numberValue`
-
-    b : :class:`numberValue`
-
-    l : :class:`numberValue`
-
-    """
-    _schema = {'$ref': '#/refs/colorLAB'}
-
-    def __init__(self, a=Undefined, b=Undefined, l=Undefined, **kwds):
-        super(colorLAB, self).__init__(a=a, b=b, l=l, **kwds)
-
-
-class colorHCL(VegaSchema):
-    """colorHCL schema wrapper
-
-    Mapping(required=[h, c, l])
-
-    Attributes
-    ----------
-
-    c : :class:`numberValue`
-
-    h : :class:`numberValue`
-
-    l : :class:`numberValue`
-
-    """
-    _schema = {'$ref': '#/refs/colorHCL'}
-
-    def __init__(self, c=Undefined, h=Undefined, l=Undefined, **kwds):
-        super(colorHCL, self).__init__(c=c, h=h, l=l, **kwds)
-
-
-class colorValue(VegaSchema):
-    """colorValue schema wrapper
-
-    oneOf(List(allOf(:class:`rule`, :class:`baseColorValue`)), :class:`baseColorValue`)
-    """
-    _schema = {'$ref': '#/refs/colorValue'}
-
-    def __init__(self, *args, **kwds):
-        super(colorValue, self).__init__(*args, **kwds)
-
-
-class gradientStops(VegaSchema):
-    """gradientStops schema wrapper
-
-    List(Mapping(required=[offset, color]))
-    """
-    _schema = {'$ref': '#/refs/gradientStops'}
-
-    def __init__(self, *args):
-        super(gradientStops, self).__init__(*args)
-
-
-class linearGradient(VegaSchema):
-    """linearGradient schema wrapper
-
-    Mapping(required=[gradient, stops])
-
-    Attributes
-    ----------
-
-    gradient : enum('linear')
-
-    stops : :class:`gradientStops`
-
-    id : string
-
-    x1 : float
-
-    x2 : float
-
-    y1 : float
-
-    y2 : float
-
-    """
-    _schema = {'$ref': '#/refs/linearGradient'}
-
-    def __init__(self, gradient=Undefined, stops=Undefined, id=Undefined, x1=Undefined, x2=Undefined,
-                 y1=Undefined, y2=Undefined, **kwds):
-        super(linearGradient, self).__init__(gradient=gradient, stops=stops, id=id, x1=x1, x2=x2, y1=y1,
-                                             y2=y2, **kwds)
-
-
-class radialGradient(VegaSchema):
-    """radialGradient schema wrapper
-
-    Mapping(required=[gradient, stops])
-
-    Attributes
-    ----------
-
-    gradient : enum('radial')
-
-    stops : :class:`gradientStops`
-
-    id : string
-
-    r1 : float
-
-    r2 : float
-
-    x1 : float
-
-    x2 : float
-
-    y1 : float
-
-    y2 : float
-
-    """
-    _schema = {'$ref': '#/refs/radialGradient'}
-
-    def __init__(self, gradient=Undefined, stops=Undefined, id=Undefined, r1=Undefined, r2=Undefined,
-                 x1=Undefined, x2=Undefined, y1=Undefined, y2=Undefined, **kwds):
-        super(radialGradient, self).__init__(gradient=gradient, stops=stops, id=id, r1=r1, r2=r2, x1=x1,
-                                             x2=x2, y1=y1, y2=y2, **kwds)
-
-
-class expr(VegaSchema):
-    """expr schema wrapper
-
-    Mapping(required=[expr])
-
-    Attributes
-    ----------
-
-    expr : string
-
-    as : string
-
-    """
-    _schema = {'$ref': '#/refs/expr'}
-
-    def __init__(self, expr=Undefined, **kwds):
-        super(expr, self).__init__(expr=expr, **kwds)
-
-
-class exprString(VegaSchema):
-    """exprString schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/refs/exprString'}
-
-    def __init__(self, *args):
-        super(exprString, self).__init__(*args)
-
-
-class compare(VegaSchema):
-    """compare schema wrapper
-
-    oneOf(Mapping(required=[]), Mapping(required=[]))
-    """
-    _schema = {'$ref': '#/refs/compare'}
-
-    def __init__(self, *args, **kwds):
-        super(compare, self).__init__(*args, **kwds)
-
-
-class from_(VegaSchema):
-    """from_ schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    data : string
-
-    """
-    _schema = {'$ref': '#/refs/from'}
-
-    def __init__(self, data=Undefined, **kwds):
-        super(from_, self).__init__(data=data, **kwds)
-
-
-class facet(VegaSchema):
-    """facet schema wrapper
-
-    Mapping(required=[facet])
-
-    Attributes
-    ----------
-
-    facet : oneOf(Mapping(required=[name, data, field]), Mapping(required=[name, data,
-    groupby]))
-
-    data : string
-
-    """
-    _schema = {'$ref': '#/refs/facet'}
-
-    def __init__(self, facet=Undefined, data=Undefined, **kwds):
-        super(facet, self).__init__(facet=facet, data=data, **kwds)
-
-
-class markclip(VegaSchema):
-    """markclip schema wrapper
-
-    oneOf(:class:`booleanOrSignal`, Mapping(required=[path]), Mapping(required=[sphere]))
-    """
-    _schema = {'$ref': '#/refs/markclip'}
-
-    def __init__(self, *args, **kwds):
-        super(markclip, self).__init__(*args, **kwds)
-
-
-class style(VegaSchema):
-    """style schema wrapper
-
-    oneOf(string, List(string))
-    """
-    _schema = {'$ref': '#/refs/style'}
-
-    def __init__(self, *args, **kwds):
-        super(style, self).__init__(*args, **kwds)
-
-
-class marktype(VegaSchema):
-    """marktype schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/refs/marktype'}
-
-    def __init__(self, *args):
-        super(marktype, self).__init__(*args)
-
-
-class scaleField(VegaSchema):
-    """scaleField schema wrapper
-
-    oneOf(string, :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/scaleField'}
-
-    def __init__(self, *args, **kwds):
-        super(scaleField, self).__init__(*args, **kwds)
-
-
-class sortOrder(VegaSchema):
-    """sortOrder schema wrapper
-
-    oneOf(enum('ascending', 'descending'), :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/sortOrder'}
-
-    def __init__(self, *args, **kwds):
-        super(sortOrder, self).__init__(*args, **kwds)
-
-
-class scaleBins(VegaSchema):
-    """scaleBins schema wrapper
-
-    oneOf(List(:class:`numberOrSignal`), Mapping(required=[step]), :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/scaleBins'}
-
-    def __init__(self, *args, **kwds):
-        super(scaleBins, self).__init__(*args, **kwds)
-
-
-class scaleInterpolate(VegaSchema):
-    """scaleInterpolate schema wrapper
-
-    oneOf(string, :class:`signal`, Mapping(required=[type]))
-    """
-    _schema = {'$ref': '#/refs/scaleInterpolate'}
-
-    def __init__(self, *args, **kwds):
-        super(scaleInterpolate, self).__init__(*args, **kwds)
-
-
-class scaleData(VegaSchema):
-    """scaleData schema wrapper
-
-    oneOf(Mapping(required=[data, field]), Mapping(required=[data, fields]),
-    Mapping(required=[fields]))
-    """
-    _schema = {'$ref': '#/refs/scaleData'}
-
-    def __init__(self, *args, **kwds):
-        super(scaleData, self).__init__(*args, **kwds)
-
-
-class selector(VegaSchema):
-    """selector schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/refs/selector'}
-
-    def __init__(self, *args):
-        super(selector, self).__init__(*args)
-
-
-class signal(VegaSchema):
-    """signal schema wrapper
-
-    Mapping(required=[signal])
-
-    Attributes
-    ----------
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/refs/signal'}
-
-    def __init__(self, signal=Undefined, **kwds):
-        super(signal, self).__init__(signal=signal, **kwds)
-
-
-class arrayOrSignal(VegaSchema):
-    """arrayOrSignal schema wrapper
-
-    oneOf(List(Any), :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/arrayOrSignal'}
-
-    def __init__(self, *args, **kwds):
-        super(arrayOrSignal, self).__init__(*args, **kwds)
-
-
-class booleanOrSignal(VegaSchema):
-    """booleanOrSignal schema wrapper
-
-    oneOf(boolean, :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/booleanOrSignal'}
-
-    def __init__(self, *args, **kwds):
-        super(booleanOrSignal, self).__init__(*args, **kwds)
-
-
-class numberOrSignal(VegaSchema):
-    """numberOrSignal schema wrapper
-
-    oneOf(float, :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/numberOrSignal'}
-
-    def __init__(self, *args, **kwds):
-        super(numberOrSignal, self).__init__(*args, **kwds)
-
-
-class stringOrSignal(VegaSchema):
-    """stringOrSignal schema wrapper
-
-    oneOf(string, :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/stringOrSignal'}
-
-    def __init__(self, *args, **kwds):
-        super(stringOrSignal, self).__init__(*args, **kwds)
-
-
-class textOrSignal(VegaSchema):
-    """textOrSignal schema wrapper
-
-    oneOf(oneOf(string, List(string)), :class:`signal`)
-    """
-    _schema = {'$ref': '#/refs/textOrSignal'}
-
-    def __init__(self, *args, **kwds):
-        super(textOrSignal, self).__init__(*args, **kwds)
-
diff --git a/altair/vega/v5/schema/vega-schema.json b/altair/vega/v5/schema/vega-schema.json
deleted file mode 100644
index f428db3..0000000
--- a/altair/vega/v5/schema/vega-schema.json
+++ /dev/null
@@ -1,15964 +0,0 @@
-{
-  "$schema": "http://json-schema.org/draft-06/schema#",
-  "title": "Vega Visualization Specification Language",
-  "defs": {
-    "autosize": {
-      "oneOf": [
-        {
-          "enum": [
-            "pad",
-            "fit",
-            "fit-x",
-            "fit-y",
-            "none"
-          ],
-          "default": "pad"
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "pad",
-                "fit",
-                "fit-x",
-                "fit-y",
-                "none"
-              ],
-              "default": "pad"
-            },
-            "resize": {
-              "type": "boolean"
-            },
-            "contains": {
-              "enum": [
-                "content",
-                "padding"
-              ]
-            }
-          },
-          "required": [
-            "type"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "axis": {
-      "type": "object",
-      "properties": {
-        "orient": {
-          "enum": [
-            "top",
-            "bottom",
-            "left",
-            "right"
-          ]
-        },
-        "scale": {
-          "type": "string"
-        },
-        "format": {
-          "oneOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "object",
-              "properties": {
-                "year": {
-                  "type": "string"
-                },
-                "quarter": {
-                  "type": "string"
-                },
-                "month": {
-                  "type": "string"
-                },
-                "date": {
-                  "type": "string"
-                },
-                "week": {
-                  "type": "string"
-                },
-                "day": {
-                  "type": "string"
-                },
-                "hours": {
-                  "type": "string"
-                },
-                "minutes": {
-                  "type": "string"
-                },
-                "seconds": {
-                  "type": "string"
-                },
-                "milliseconds": {
-                  "type": "string"
-                }
-              },
-              "additionalProperties": false
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "formatType": {
-          "oneOf": [
-            {
-              "enum": [
-                "number",
-                "time",
-                "utc"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "minExtent": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "maxExtent": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "offset": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "position": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "bandPosition": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "translate": {
-          "type": "number"
-        },
-        "values": {
-          "$ref": "#/refs/arrayOrSignal"
-        },
-        "zindex": {
-          "type": "number"
-        },
-        "title": {
-          "$ref": "#/refs/textOrSignal"
-        },
-        "titlePadding": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "titleAlign": {
-          "oneOf": [
-            {
-              "enum": [
-                "left",
-                "right",
-                "center"
-              ]
-            },
-            {
-              "$ref": "#/refs/alignValue"
-            }
-          ]
-        },
-        "titleAnchor": {
-          "oneOf": [
-            {
-              "enum": [
-                null,
-                "start",
-                "middle",
-                "end"
-              ]
-            },
-            {
-              "$ref": "#/refs/anchorValue"
-            }
-          ]
-        },
-        "titleAngle": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "titleX": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "titleY": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "titleBaseline": {
-          "oneOf": [
-            {
-              "enum": [
-                "top",
-                "middle",
-                "bottom",
-                "alphabetic",
-                "line-top",
-                "line-bottom"
-              ]
-            },
-            {
-              "$ref": "#/refs/baselineValue"
-            }
-          ]
-        },
-        "titleColor": {
-          "oneOf": [
-            {
-              "type": "null"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/colorValue"
-            }
-          ]
-        },
-        "titleFont": {
-          "oneOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/stringValue"
-            }
-          ]
-        },
-        "titleFontSize": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "titleFontStyle": {
-          "oneOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/stringValue"
-            }
-          ]
-        },
-        "titleFontWeight": {
-          "oneOf": [
-            {
-              "enum": [
-                null,
-                "normal",
-                "bold",
-                "lighter",
-                "bolder",
-                "100",
-                "200",
-                "300",
-                "400",
-                "500",
-                "600",
-                "700",
-                "800",
-                "900",
-                100,
-                200,
-                300,
-                400,
-                500,
-                600,
-                700,
-                800,
-                900
-              ]
-            },
-            {
-              "$ref": "#/refs/fontWeightValue"
-            }
-          ]
-        },
-        "titleLimit": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "titleLineHeight": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "titleOpacity": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "domain": {
-          "type": "boolean"
-        },
-        "domainColor": {
-          "oneOf": [
-            {
-              "type": "null"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/colorValue"
-            }
-          ]
-        },
-        "domainDash": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "type": "number"
-              }
-            },
-            {
-              "$ref": "#/refs/arrayValue"
-            }
-          ]
-        },
-        "domainDashOffset": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "domainOpacity": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "domainWidth": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "ticks": {
-          "type": "boolean"
-        },
-        "tickBand": {
-          "$ref": "#/refs/tickBand"
-        },
-        "tickColor": {
-          "oneOf": [
-            {
-              "type": "null"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/colorValue"
-            }
-          ]
-        },
-        "tickDash": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "type": "number"
-              }
-            },
-            {
-              "$ref": "#/refs/arrayValue"
-            }
-          ]
-        },
-        "tickDashOffset": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "tickOffset": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "tickOpacity": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "tickRound": {
-          "oneOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/booleanValue"
-            }
-          ]
-        },
-        "tickSize": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "tickWidth": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "tickCount": {
-          "$ref": "#/refs/tickCount"
-        },
-        "tickExtra": {
-          "$ref": "#/refs/booleanOrSignal"
-        },
-        "tickMinStep": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "grid": {
-          "type": "boolean"
-        },
-        "gridScale": {
-          "type": "string"
-        },
-        "gridColor": {
-          "oneOf": [
-            {
-              "type": "null"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/colorValue"
-            }
-          ]
-        },
-        "gridDash": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "type": "number"
-              }
-            },
-            {
-              "$ref": "#/refs/arrayValue"
-            }
-          ]
-        },
-        "gridDashOffset": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "gridOpacity": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "gridWidth": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labels": {
-          "type": "boolean"
-        },
-        "labelAlign": {
-          "oneOf": [
-            {
-              "enum": [
-                "left",
-                "right",
-                "center"
-              ]
-            },
-            {
-              "$ref": "#/refs/alignValue"
-            }
-          ]
-        },
-        "labelBaseline": {
-          "oneOf": [
-            {
-              "enum": [
-                "top",
-                "middle",
-                "bottom",
-                "alphabetic",
-                "line-top",
-                "line-bottom"
-              ]
-            },
-            {
-              "$ref": "#/refs/baselineValue"
-            }
-          ]
-        },
-        "labelBound": {
-          "oneOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "labelFlush": {
-          "oneOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "labelFlushOffset": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "labelOverlap": {
-          "$ref": "#/refs/labelOverlap"
-        },
-        "labelAngle": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labelColor": {
-          "oneOf": [
-            {
-              "type": "null"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/colorValue"
-            }
-          ]
-        },
-        "labelFont": {
-          "oneOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/stringValue"
-            }
-          ]
-        },
-        "labelFontSize": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labelFontWeight": {
-          "oneOf": [
-            {
-              "enum": [
-                null,
-                "normal",
-                "bold",
-                "lighter",
-                "bolder",
-                "100",
-                "200",
-                "300",
-                "400",
-                "500",
-                "600",
-                "700",
-                "800",
-                "900",
-                100,
-                200,
-                300,
-                400,
-                500,
-                600,
-                700,
-                800,
-                900
-              ]
-            },
-            {
-              "$ref": "#/refs/fontWeightValue"
-            }
-          ]
-        },
-        "labelFontStyle": {
-          "oneOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/stringValue"
-            }
-          ]
-        },
-        "labelLimit": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labelLineHeight": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labelOpacity": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labelOffset": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labelPadding": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "labelSeparation": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "encode": {
-          "type": "object",
-          "properties": {
-            "axis": {
-              "$ref": "#/defs/guideEncode"
-            },
-            "ticks": {
-              "$ref": "#/defs/guideEncode"
-            },
-            "labels": {
-              "$ref": "#/defs/guideEncode"
-            },
-            "title": {
-              "$ref": "#/defs/guideEncode"
-            },
-            "grid": {
-              "$ref": "#/defs/guideEncode"
-            },
-            "domain": {
-              "$ref": "#/defs/guideEncode"
-            }
-          },
-          "additionalProperties": false
-        }
-      },
-      "required": [
-        "orient",
-        "scale"
-      ],
-      "additionalProperties": false
-    },
-    "background": {
-      "$ref": "#/refs/stringOrSignal"
-    },
-    "bind": {
-      "oneOf": [
-        {
-          "type": "object",
-          "properties": {
-            "input": {
-              "enum": [
-                "checkbox"
-              ]
-            },
-            "element": {
-              "$ref": "#/refs/element"
-            },
-            "debounce": {
-              "type": "number"
-            },
-            "name": {
-              "type": "string"
-            }
-          },
-          "required": [
-            "input"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "input": {
-              "enum": [
-                "radio",
-                "select"
-              ]
-            },
-            "element": {
-              "$ref": "#/refs/element"
-            },
-            "options": {
-              "type": "array"
-            },
-            "labels": {
-              "type": "array",
-              "items": {
-                "type": "string"
-              }
-            },
-            "debounce": {
-              "type": "number"
-            },
-            "name": {
-              "type": "string"
-            }
-          },
-          "required": [
-            "input",
-            "options"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "input": {
-              "enum": [
-                "range"
-              ]
-            },
-            "element": {
-              "$ref": "#/refs/element"
-            },
-            "min": {
-              "type": "number"
-            },
-            "max": {
-              "type": "number"
-            },
-            "step": {
-              "type": "number"
-            },
-            "debounce": {
-              "type": "number"
-            },
-            "name": {
-              "type": "string"
-            }
-          },
-          "required": [
-            "input"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "input": {
-              "not": {
-                "enum": [
-                  "checkbox",
-                  "radio",
-                  "range",
-                  "select"
-                ]
-              }
-            },
-            "element": {
-              "$ref": "#/refs/element"
-            },
-            "debounce": {
-              "type": "number"
-            },
-            "name": {
-              "type": "string"
-            }
-          },
-          "required": [
-            "input"
-          ],
-          "additionalProperties": true
-        }
-      ]
-    },
-    "data": {
-      "oneOf": [
-        {
-          "type": "object",
-          "properties": {
-            "name": {
-              "type": "string"
-            },
-            "transform": {
-              "type": "array",
-              "items": {
-                "$ref": "#/defs/transform"
-              }
-            },
-            "on": {
-              "$ref": "#/defs/onTrigger"
-            }
-          },
-          "required": [
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "source": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "type": "string"
-                  },
-                  "minItems": 1
-                }
-              ]
-            },
-            "name": {
-              "type": "string"
-            },
-            "transform": {
-              "type": "array",
-              "items": {
-                "$ref": "#/defs/transform"
-              }
-            },
-            "on": {
-              "$ref": "#/defs/onTrigger"
-            }
-          },
-          "required": [
-            "source",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "url": {
-              "$ref": "#/refs/stringOrSignal"
-            },
-            "format": {
-              "oneOf": [
-                {
-                  "anyOf": [
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "$ref": "#/refs/stringOrSignal"
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        }
-                      }
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "enum": [
-                            "json"
-                          ]
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        },
-                        "property": {
-                          "$ref": "#/refs/stringOrSignal"
-                        },
-                        "copy": {
-                          "$ref": "#/refs/booleanOrSignal"
-                        }
-                      },
-                      "additionalProperties": false
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "enum": [
-                            "csv",
-                            "tsv"
-                          ]
-                        },
-                        "header": {
-                          "type": "array",
-                          "items": {
-                            "type": "string"
-                          }
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "type"
-                      ],
-                      "additionalProperties": false
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "enum": [
-                            "dsv"
-                          ]
-                        },
-                        "delimiter": {
-                          "type": "string"
-                        },
-                        "header": {
-                          "type": "array",
-                          "items": {
-                            "type": "string"
-                          }
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "type",
-                        "delimiter"
-                      ],
-                      "additionalProperties": false
-                    },
-                    {
-                      "oneOf": [
-                        {
-                          "type": "object",
-                          "properties": {
-                            "type": {
-                              "enum": [
-                                "topojson"
-                              ]
-                            },
-                            "feature": {
-                              "$ref": "#/refs/stringOrSignal"
-                            },
-                            "property": {
-                              "$ref": "#/refs/stringOrSignal"
-                            }
-                          },
-                          "required": [
-                            "type",
-                            "feature"
-                          ],
-                          "additionalProperties": false
-                        },
-                        {
-                          "type": "object",
-                          "properties": {
-                            "type": {
-                              "enum": [
-                                "topojson"
-                              ]
-                            },
-                            "mesh": {
-                              "$ref": "#/refs/stringOrSignal"
-                            },
-                            "property": {
-                              "$ref": "#/refs/stringOrSignal"
-                            },
-                            "filter": {
-                              "enum": [
-                                "interior",
-                                "exterior",
-                                null
-                              ]
-                            }
-                          },
-                          "required": [
-                            "type",
-                            "mesh"
-                          ],
-                          "additionalProperties": false
-                        }
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "async": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "transform": {
-              "type": "array",
-              "items": {
-                "$ref": "#/defs/transform"
-              }
-            },
-            "on": {
-              "$ref": "#/defs/onTrigger"
-            }
-          },
-          "required": [
-            "url",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "values": {
-              "oneOf": [
-                {},
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "format": {
-              "oneOf": [
-                {
-                  "anyOf": [
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "$ref": "#/refs/stringOrSignal"
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        }
-                      }
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "enum": [
-                            "json"
-                          ]
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        },
-                        "property": {
-                          "$ref": "#/refs/stringOrSignal"
-                        },
-                        "copy": {
-                          "$ref": "#/refs/booleanOrSignal"
-                        }
-                      },
-                      "additionalProperties": false
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "enum": [
-                            "csv",
-                            "tsv"
-                          ]
-                        },
-                        "header": {
-                          "type": "array",
-                          "items": {
-                            "type": "string"
-                          }
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "type"
-                      ],
-                      "additionalProperties": false
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "type": {
-                          "enum": [
-                            "dsv"
-                          ]
-                        },
-                        "delimiter": {
-                          "type": "string"
-                        },
-                        "header": {
-                          "type": "array",
-                          "items": {
-                            "type": "string"
-                          }
-                        },
-                        "parse": {
-                          "oneOf": [
-                            {
-                              "enum": [
-                                "auto"
-                              ]
-                            },
-                            {
-                              "type": "object",
-                              "properties": {},
-                              "additionalProperties": {
-                                "oneOf": [
-                                  {
-                                    "enum": [
-                                      "boolean",
-                                      "number",
-                                      "date",
-                                      "string"
-                                    ]
-                                  },
-                                  {
-                                    "type": "string",
-                                    "pattern": "^(date|utc):.*$"
-                                  }
-                                ]
-                              }
-                            },
-                            {
-                              "$ref": "#/refs/signal"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "type",
-                        "delimiter"
-                      ],
-                      "additionalProperties": false
-                    },
-                    {
-                      "oneOf": [
-                        {
-                          "type": "object",
-                          "properties": {
-                            "type": {
-                              "enum": [
-                                "topojson"
-                              ]
-                            },
-                            "feature": {
-                              "$ref": "#/refs/stringOrSignal"
-                            },
-                            "property": {
-                              "$ref": "#/refs/stringOrSignal"
-                            }
-                          },
-                          "required": [
-                            "type",
-                            "feature"
-                          ],
-                          "additionalProperties": false
-                        },
-                        {
-                          "type": "object",
-                          "properties": {
-                            "type": {
-                              "enum": [
-                                "topojson"
-                              ]
-                            },
-                            "mesh": {
-                              "$ref": "#/refs/stringOrSignal"
-                            },
-                            "property": {
-                              "$ref": "#/refs/stringOrSignal"
-                            },
-                            "filter": {
-                              "enum": [
-                                "interior",
-                                "exterior",
-                                null
-                              ]
-                            }
-                          },
-                          "required": [
-                            "type",
-                            "mesh"
-                          ],
-                          "additionalProperties": false
-                        }
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "async": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "transform": {
-              "type": "array",
-              "items": {
-                "$ref": "#/defs/transform"
-              }
-            },
-            "on": {
-              "$ref": "#/defs/onTrigger"
-            }
-          },
-          "required": [
-            "values",
-            "name"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "rule": {
-      "type": "object",
-      "properties": {
-        "test": {
-          "type": "string"
-        }
-      }
-    },
-    "encodeEntry": {
-      "type": "object",
-      "properties": {
-        "x": {
-          "$ref": "#/refs/numberValue"
-        },
-        "x2": {
-          "$ref": "#/refs/numberValue"
-        },
-        "xc": {
-          "$ref": "#/refs/numberValue"
-        },
-        "width": {
-          "$ref": "#/refs/numberValue"
-        },
-        "y": {
-          "$ref": "#/refs/numberValue"
-        },
-        "y2": {
-          "$ref": "#/refs/numberValue"
-        },
-        "yc": {
-          "$ref": "#/refs/numberValue"
-        },
-        "height": {
-          "$ref": "#/refs/numberValue"
-        },
-        "opacity": {
-          "$ref": "#/refs/numberValue"
-        },
-        "fill": {
-          "$ref": "#/refs/colorValue"
-        },
-        "fillOpacity": {
-          "$ref": "#/refs/numberValue"
-        },
-        "stroke": {
-          "$ref": "#/refs/colorValue"
-        },
-        "strokeOpacity": {
-          "$ref": "#/refs/numberValue"
-        },
-        "strokeWidth": {
-          "$ref": "#/refs/numberValue"
-        },
-        "strokeCap": {
-          "$ref": "#/refs/strokeCapValue"
-        },
-        "strokeDash": {
-          "$ref": "#/refs/arrayValue"
-        },
-        "strokeDashOffset": {
-          "$ref": "#/refs/numberValue"
-        },
-        "strokeJoin": {
-          "$ref": "#/refs/strokeJoinValue"
-        },
-        "strokeMiterLimit": {
-          "$ref": "#/refs/numberValue"
-        },
-        "blend": {
-          "$ref": "#/refs/blendValue"
-        },
-        "cursor": {
-          "$ref": "#/refs/stringValue"
-        },
-        "tooltip": {
-          "$ref": "#/refs/anyValue"
-        },
-        "zindex": {
-          "$ref": "#/refs/numberValue"
-        },
-        "clip": {
-          "$ref": "#/refs/booleanValue"
-        },
-        "strokeForeground": {
-          "$ref": "#/refs/booleanValue"
-        },
-        "strokeOffset": {
-          "$ref": "#/refs/numberValue"
-        },
-        "cornerRadius": {
-          "$ref": "#/refs/numberValue"
-        },
-        "cornerRadiusTopLeft": {
-          "$ref": "#/refs/numberValue"
-        },
-        "cornerRadiusTopRight": {
-          "$ref": "#/refs/numberValue"
-        },
-        "cornerRadiusBottomRight": {
-          "$ref": "#/refs/numberValue"
-        },
-        "cornerRadiusBottomLeft": {
-          "$ref": "#/refs/numberValue"
-        },
-        "angle": {
-          "$ref": "#/refs/numberValue"
-        },
-        "size": {
-          "$ref": "#/refs/numberValue"
-        },
-        "shape": {
-          "$ref": "#/refs/stringValue"
-        },
-        "path": {
-          "$ref": "#/refs/stringValue"
-        },
-        "scaleX": {
-          "$ref": "#/refs/numberValue"
-        },
-        "scaleY": {
-          "$ref": "#/refs/numberValue"
-        },
-        "innerRadius": {
-          "$ref": "#/refs/numberValue"
-        },
-        "outerRadius": {
-          "$ref": "#/refs/numberValue"
-        },
-        "startAngle": {
-          "$ref": "#/refs/numberValue"
-        },
-        "endAngle": {
-          "$ref": "#/refs/numberValue"
-        },
-        "padAngle": {
-          "$ref": "#/refs/numberValue"
-        },
-        "interpolate": {
-          "$ref": "#/refs/stringValue"
-        },
-        "tension": {
-          "$ref": "#/refs/numberValue"
-        },
-        "orient": {
-          "$ref": "#/refs/directionValue"
-        },
-        "defined": {
-          "$ref": "#/refs/booleanValue"
-        },
-        "url": {
-          "$ref": "#/refs/stringValue"
-        },
-        "align": {
-          "$ref": "#/refs/alignValue"
-        },
-        "baseline": {
-          "$ref": "#/refs/baselineValue"
-        },
-        "aspect": {
-          "$ref": "#/refs/booleanValue"
-        },
-        "smooth": {
-          "$ref": "#/refs/booleanValue"
-        },
-        "text": {
-          "$ref": "#/refs/textValue"
-        },
-        "dir": {
-          "$ref": "#/refs/stringValue"
-        },
-        "ellipsis": {
-          "$ref": "#/refs/stringValue"
-        },
-        "limit": {
-          "$ref": "#/refs/numberValue"
-        },
-        "lineBreak": {
-          "$ref": "#/refs/stringValue"
-        },
-        "lineHeight": {
-          "$ref": "#/refs/numberValue"
-        },
-        "dx": {
-          "$ref": "#/refs/numberValue"
-        },
-        "dy": {
-          "$ref": "#/refs/numberValue"
-        },
-        "radius": {
-          "$ref": "#/refs/numberValue"
-        },
-        "theta": {
-          "$ref": "#/refs/numberValue"
-        },
-        "font": {
-          "$ref": "#/refs/stringValue"
-        },
-        "fontSize": {
-          "$ref": "#/refs/numberValue"
-        },
-        "fontWeight": {
-          "$ref": "#/refs/fontWeightValue"
-        },
-        "fontStyle": {
-          "$ref": "#/refs/stringValue"
-        }
-      },
-      "additionalProperties": true
-    },
-    "encode": {
-      "type": "object",
-      "additionalProperties": false,
-      "patternProperties": {
-        "^.+$": {
-          "$ref": "#/defs/encodeEntry"
-        }
-      }
-    },
-    "layout": {
-      "oneOf": [
-        {
-          "type": "object",
-          "properties": {
-            "align": {
-              "oneOf": [
-                {
-                  "oneOf": [
-                    {
-                      "enum": [
-                        "all",
-                        "each",
-                        "none"
-                      ]
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "row": {
-                      "oneOf": [
-                        {
-                          "enum": [
-                            "all",
-                            "each",
-                            "none"
-                          ]
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "column": {
-                      "oneOf": [
-                        {
-                          "enum": [
-                            "all",
-                            "each",
-                            "none"
-                          ]
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "bounds": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "full",
-                    "flush"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "center": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "row": {
-                      "$ref": "#/refs/booleanOrSignal"
-                    },
-                    "column": {
-                      "$ref": "#/refs/booleanOrSignal"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "columns": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "padding": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "row": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "column": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "offset": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "rowHeader": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "rowFooter": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "rowTitle": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "columnHeader": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "columnFooter": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "columnTitle": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "headerBand": {
-              "oneOf": [
-                {
-                  "$ref": "#/refs/numberOrSignal"
-                },
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "row": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "column": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "footerBand": {
-              "oneOf": [
-                {
-                  "$ref": "#/refs/numberOrSignal"
-                },
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "row": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "column": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "titleBand": {
-              "oneOf": [
-                {
-                  "$ref": "#/refs/numberOrSignal"
-                },
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "row": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "column": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "titleAnchor": {
-              "oneOf": [
-                {
-                  "oneOf": [
-                    {
-                      "enum": [
-                        "start",
-                        "end"
-                      ]
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "row": {
-                      "oneOf": [
-                        {
-                          "enum": [
-                            "start",
-                            "end"
-                          ]
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "column": {
-                      "oneOf": [
-                        {
-                          "enum": [
-                            "start",
-                            "end"
-                          ]
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            }
-          },
-          "additionalProperties": false
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "guideEncode": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string"
-        },
-        "interactive": {
-          "type": "boolean",
-          "default": false
-        },
-        "style": {
-          "$ref": "#/refs/style"
-        }
-      },
-      "additionalProperties": false,
-      "patternProperties": {
-        "^(?!interactive|name|style).+$": {
-          "$ref": "#/defs/encodeEntry"
-        }
-      }
-    },
-    "legend": {
-      "allOf": [
-        {
-          "type": "object",
-          "properties": {
-            "size": {
-              "type": "string"
-            },
-            "shape": {
-              "type": "string"
-            },
-            "fill": {
-              "type": "string"
-            },
-            "stroke": {
-              "type": "string"
-            },
-            "opacity": {
-              "type": "string"
-            },
-            "strokeDash": {
-              "type": "string"
-            },
-            "strokeWidth": {
-              "type": "string"
-            },
-            "type": {
-              "enum": [
-                "gradient",
-                "symbol"
-              ]
-            },
-            "direction": {
-              "enum": [
-                "vertical",
-                "horizontal"
-              ]
-            },
-            "orient": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "none",
-                    "left",
-                    "right",
-                    "top",
-                    "bottom",
-                    "top-left",
-                    "top-right",
-                    "bottom-left",
-                    "bottom-right"
-                  ],
-                  "default": "right"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "tickCount": {
-              "$ref": "#/refs/tickCount"
-            },
-            "tickMinStep": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "symbolLimit": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "values": {
-              "$ref": "#/refs/arrayOrSignal"
-            },
-            "zindex": {
-              "type": "number"
-            },
-            "cornerRadius": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "fillColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "offset": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "padding": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "strokeColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "legendX": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "legendY": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "title": {
-              "$ref": "#/refs/textOrSignal"
-            },
-            "titleAlign": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "left",
-                    "right",
-                    "center"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/alignValue"
-                }
-              ]
-            },
-            "titleAnchor": {
-              "oneOf": [
-                {
-                  "enum": [
-                    null,
-                    "start",
-                    "middle",
-                    "end"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/anchorValue"
-                }
-              ]
-            },
-            "titleBaseline": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "top",
-                    "middle",
-                    "bottom",
-                    "alphabetic",
-                    "line-top",
-                    "line-bottom"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/baselineValue"
-                }
-              ]
-            },
-            "titleColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "titleFont": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "titleFontSize": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "titleFontStyle": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "titleFontWeight": {
-              "oneOf": [
-                {
-                  "enum": [
-                    null,
-                    "normal",
-                    "bold",
-                    "lighter",
-                    "bolder",
-                    "100",
-                    "200",
-                    "300",
-                    "400",
-                    "500",
-                    "600",
-                    "700",
-                    "800",
-                    "900",
-                    100,
-                    200,
-                    300,
-                    400,
-                    500,
-                    600,
-                    700,
-                    800,
-                    900
-                  ]
-                },
-                {
-                  "$ref": "#/refs/fontWeightValue"
-                }
-              ]
-            },
-            "titleLimit": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "titleLineHeight": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "titleOpacity": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "titleOrient": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "left",
-                    "right",
-                    "top",
-                    "bottom"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/orientValue"
-                }
-              ]
-            },
-            "titlePadding": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "gradientLength": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "gradientOpacity": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "gradientStrokeColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "gradientStrokeWidth": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "gradientThickness": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "clipHeight": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "columns": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "columnPadding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "rowPadding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "gridAlign": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "all",
-                    "each",
-                    "none"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "symbolDash": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "type": "number"
-                  }
-                },
-                {
-                  "$ref": "#/refs/arrayValue"
-                }
-              ]
-            },
-            "symbolDashOffset": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "symbolFillColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "symbolOffset": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "symbolOpacity": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "symbolSize": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "symbolStrokeColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "symbolStrokeWidth": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "symbolType": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "format": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "year": {
-                      "type": "string"
-                    },
-                    "quarter": {
-                      "type": "string"
-                    },
-                    "month": {
-                      "type": "string"
-                    },
-                    "date": {
-                      "type": "string"
-                    },
-                    "week": {
-                      "type": "string"
-                    },
-                    "day": {
-                      "type": "string"
-                    },
-                    "hours": {
-                      "type": "string"
-                    },
-                    "minutes": {
-                      "type": "string"
-                    },
-                    "seconds": {
-                      "type": "string"
-                    },
-                    "milliseconds": {
-                      "type": "string"
-                    }
-                  },
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "formatType": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "number",
-                    "time",
-                    "utc"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "labelAlign": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "left",
-                    "right",
-                    "center"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/alignValue"
-                }
-              ]
-            },
-            "labelBaseline": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "top",
-                    "middle",
-                    "bottom",
-                    "alphabetic",
-                    "line-top",
-                    "line-bottom"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/baselineValue"
-                }
-              ]
-            },
-            "labelColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "labelFont": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "labelFontSize": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "labelFontStyle": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "labelFontWeight": {
-              "oneOf": [
-                {
-                  "enum": [
-                    null,
-                    "normal",
-                    "bold",
-                    "lighter",
-                    "bolder",
-                    "100",
-                    "200",
-                    "300",
-                    "400",
-                    "500",
-                    "600",
-                    "700",
-                    "800",
-                    "900",
-                    100,
-                    200,
-                    300,
-                    400,
-                    500,
-                    600,
-                    700,
-                    800,
-                    900
-                  ]
-                },
-                {
-                  "$ref": "#/refs/fontWeightValue"
-                }
-              ]
-            },
-            "labelLimit": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "labelOffset": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "labelOpacity": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "labelOverlap": {
-              "$ref": "#/refs/labelOverlap"
-            },
-            "labelSeparation": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "encode": {
-              "type": "object",
-              "properties": {
-                "title": {
-                  "$ref": "#/defs/guideEncode"
-                },
-                "labels": {
-                  "$ref": "#/defs/guideEncode"
-                },
-                "legend": {
-                  "$ref": "#/defs/guideEncode"
-                },
-                "entries": {
-                  "$ref": "#/defs/guideEncode"
-                },
-                "symbols": {
-                  "$ref": "#/defs/guideEncode"
-                },
-                "gradient": {
-                  "$ref": "#/defs/guideEncode"
-                }
-              },
-              "additionalProperties": false
-            }
-          },
-          "additionalProperties": false
-        },
-        {
-          "anyOf": [
-            {
-              "type": "object",
-              "required": [
-                "size"
-              ]
-            },
-            {
-              "type": "object",
-              "required": [
-                "shape"
-              ]
-            },
-            {
-              "type": "object",
-              "required": [
-                "fill"
-              ]
-            },
-            {
-              "type": "object",
-              "required": [
-                "stroke"
-              ]
-            },
-            {
-              "type": "object",
-              "required": [
-                "opacity"
-              ]
-            },
-            {
-              "type": "object",
-              "required": [
-                "strokeDash"
-              ]
-            },
-            {
-              "type": "object",
-              "required": [
-                "strokeWidth"
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "mark": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "$ref": "#/refs/marktype"
-        },
-        "role": {
-          "type": "string"
-        },
-        "name": {
-          "type": "string"
-        },
-        "style": {
-          "$ref": "#/refs/style"
-        },
-        "key": {
-          "type": "string"
-        },
-        "clip": {
-          "$ref": "#/refs/markclip"
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        },
-        "interactive": {
-          "$ref": "#/refs/booleanOrSignal"
-        },
-        "encode": {
-          "$ref": "#/defs/encode"
-        },
-        "transform": {
-          "type": "array",
-          "items": {
-            "$ref": "#/defs/transformMark"
-          }
-        },
-        "on": {
-          "$ref": "#/defs/onMarkTrigger"
-        }
-      },
-      "required": [
-        "type"
-      ]
-    },
-    "markGroup": {
-      "allOf": [
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "group"
-              ]
-            },
-            "from": {
-              "oneOf": [
-                {
-                  "$ref": "#/refs/from"
-                },
-                {
-                  "$ref": "#/refs/facet"
-                }
-              ]
-            }
-          },
-          "required": [
-            "type"
-          ]
-        },
-        {
-          "$ref": "#/defs/mark"
-        },
-        {
-          "$ref": "#/defs/scope"
-        }
-      ]
-    },
-    "markVisual": {
-      "allOf": [
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "not": {
-                "enum": [
-                  "group"
-                ]
-              }
-            },
-            "from": {
-              "$ref": "#/refs/from"
-            }
-          }
-        },
-        {
-          "$ref": "#/defs/mark"
-        }
-      ]
-    },
-    "listener": {
-      "oneOf": [
-        {
-          "$ref": "#/refs/signal"
-        },
-        {
-          "type": "object",
-          "properties": {
-            "scale": {
-              "type": "string"
-            }
-          },
-          "required": [
-            "scale"
-          ]
-        },
-        {
-          "$ref": "#/defs/stream"
-        }
-      ]
-    },
-    "onEvents": {
-      "type": "array",
-      "items": {
-        "allOf": [
-          {
-            "type": "object",
-            "properties": {
-              "events": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/selector"
-                  },
-                  {
-                    "$ref": "#/defs/listener"
-                  },
-                  {
-                    "type": "array",
-                    "items": {
-                      "$ref": "#/defs/listener"
-                    },
-                    "minItems": 1
-                  }
-                ]
-              },
-              "force": {
-                "type": "boolean"
-              }
-            },
-            "required": [
-              "events"
-            ]
-          },
-          {
-            "oneOf": [
-              {
-                "type": "object",
-                "properties": {
-                  "encode": {
-                    "type": "string"
-                  }
-                },
-                "required": [
-                  "encode"
-                ]
-              },
-              {
-                "type": "object",
-                "properties": {
-                  "update": {
-                    "oneOf": [
-                      {
-                        "$ref": "#/refs/exprString"
-                      },
-                      {
-                        "$ref": "#/refs/expr"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "object",
-                        "properties": {
-                          "value": {}
-                        },
-                        "required": [
-                          "value"
-                        ]
-                      }
-                    ]
-                  }
-                },
-                "required": [
-                  "update"
-                ]
-              }
-            ]
-          }
-        ]
-      }
-    },
-    "onTrigger": {
-      "type": "array",
-      "items": {
-        "type": "object",
-        "properties": {
-          "trigger": {
-            "$ref": "#/refs/exprString"
-          },
-          "insert": {
-            "$ref": "#/refs/exprString"
-          },
-          "remove": {
-            "oneOf": [
-              {
-                "type": "boolean"
-              },
-              {
-                "$ref": "#/refs/exprString"
-              }
-            ]
-          },
-          "toggle": {
-            "$ref": "#/refs/exprString"
-          },
-          "modify": {
-            "$ref": "#/refs/exprString"
-          },
-          "values": {
-            "$ref": "#/refs/exprString"
-          }
-        },
-        "required": [
-          "trigger"
-        ],
-        "additionalProperties": false
-      }
-    },
-    "onMarkTrigger": {
-      "type": "array",
-      "items": {
-        "type": "object",
-        "properties": {
-          "trigger": {
-            "$ref": "#/refs/exprString"
-          },
-          "modify": {
-            "$ref": "#/refs/exprString"
-          },
-          "values": {
-            "$ref": "#/refs/exprString"
-          }
-        },
-        "required": [
-          "trigger"
-        ],
-        "additionalProperties": false
-      }
-    },
-    "padding": {
-      "oneOf": [
-        {
-          "type": "number"
-        },
-        {
-          "type": "object",
-          "properties": {
-            "top": {
-              "type": "number"
-            },
-            "bottom": {
-              "type": "number"
-            },
-            "left": {
-              "type": "number"
-            },
-            "right": {
-              "type": "number"
-            }
-          },
-          "additionalProperties": false
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "projection": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string"
-        },
-        "type": {
-          "$ref": "#/refs/stringOrSignal"
-        },
-        "clipAngle": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "clipExtent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "type": "array",
-                    "items": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "minItems": 2,
-                    "maxItems": 2
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "scale": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "translate": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "$ref": "#/refs/numberOrSignal"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "center": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "$ref": "#/refs/numberOrSignal"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "rotate": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "$ref": "#/refs/numberOrSignal"
-              },
-              "minItems": 2,
-              "maxItems": 3
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "parallels": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "$ref": "#/refs/numberOrSignal"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "precision": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "pointRadius": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "fit": {
-          "oneOf": [
-            {
-              "type": "object"
-            },
-            {
-              "type": "array"
-            }
-          ]
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "type": "array",
-                    "items": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "minItems": 2,
-                    "maxItems": 2
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "$ref": "#/refs/numberOrSignal"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "name"
-      ],
-      "additionalProperties": true
-    },
-    "scale": {
-      "oneOf": [
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "identity"
-              ]
-            },
-            "nice": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "ordinal"
-              ]
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "oneOf": [
-                    {
-                      "type": "object",
-                      "properties": {
-                        "data": {
-                          "type": "string"
-                        },
-                        "field": {
-                          "$ref": "#/refs/stringOrSignal"
-                        },
-                        "sort": {
-                          "oneOf": [
-                            {
-                              "type": "boolean"
-                            },
-                            {
-                              "type": "object",
-                              "properties": {
-                                "field": {
-                                  "$ref": "#/refs/stringOrSignal"
-                                },
-                                "op": {
-                                  "$ref": "#/refs/stringOrSignal"
-                                },
-                                "order": {
-                                  "$ref": "#/refs/sortOrder"
-                                }
-                              },
-                              "additionalProperties": false
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "data",
-                        "field"
-                      ],
-                      "additionalProperties": false
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "data": {
-                          "type": "string"
-                        },
-                        "fields": {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/stringOrSignal"
-                          },
-                          "minItems": 1
-                        },
-                        "sort": {
-                          "oneOf": [
-                            {
-                              "type": "boolean"
-                            },
-                            {
-                              "type": "object",
-                              "properties": {
-                                "op": {
-                                  "enum": [
-                                    "count"
-                                  ]
-                                },
-                                "order": {
-                                  "$ref": "#/refs/sortOrder"
-                                }
-                              },
-                              "additionalProperties": false
-                            },
-                            {
-                              "type": "object",
-                              "properties": {
-                                "field": {
-                                  "$ref": "#/refs/stringOrSignal"
-                                },
-                                "op": {
-                                  "enum": [
-                                    "count",
-                                    "min",
-                                    "max"
-                                  ]
-                                },
-                                "order": {
-                                  "$ref": "#/refs/sortOrder"
-                                }
-                              },
-                              "required": [
-                                "field",
-                                "op"
-                              ],
-                              "additionalProperties": false
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "data",
-                        "fields"
-                      ],
-                      "additionalProperties": false
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "fields": {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "object",
-                                "properties": {
-                                  "data": {
-                                    "type": "string"
-                                  },
-                                  "field": {
-                                    "$ref": "#/refs/stringOrSignal"
-                                  }
-                                },
-                                "required": [
-                                  "data",
-                                  "field"
-                                ],
-                                "additionalProperties": false
-                              },
-                              {
-                                "type": "array",
-                                "items": {
-                                  "oneOf": [
-                                    {
-                                      "type": "string"
-                                    },
-                                    {
-                                      "type": "number"
-                                    },
-                                    {
-                                      "type": "boolean"
-                                    }
-                                  ]
-                                }
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          },
-                          "minItems": 1
-                        },
-                        "sort": {
-                          "oneOf": [
-                            {
-                              "type": "boolean"
-                            },
-                            {
-                              "type": "object",
-                              "properties": {
-                                "op": {
-                                  "enum": [
-                                    "count"
-                                  ]
-                                },
-                                "order": {
-                                  "$ref": "#/refs/sortOrder"
-                                }
-                              },
-                              "additionalProperties": false
-                            },
-                            {
-                              "type": "object",
-                              "properties": {
-                                "field": {
-                                  "$ref": "#/refs/stringOrSignal"
-                                },
-                                "op": {
-                                  "enum": [
-                                    "count",
-                                    "min",
-                                    "max"
-                                  ]
-                                },
-                                "order": {
-                                  "$ref": "#/refs/sortOrder"
-                                }
-                              },
-                              "required": [
-                                "field",
-                                "op"
-                              ],
-                              "additionalProperties": false
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "fields"
-                      ],
-                      "additionalProperties": false
-                    }
-                  ]
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "domainImplicit": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "band"
-              ]
-            },
-            "paddingInner": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "step": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "required": [
-                    "step"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "padding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "paddingOuter": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "align": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "point"
-              ]
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "step": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "required": [
-                    "step"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "padding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "paddingOuter": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "align": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "quantize",
-                "threshold"
-              ]
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "nice": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "zero": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "quantile"
-              ]
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "bin-ordinal"
-              ]
-            },
-            "bins": {
-              "$ref": "#/refs/scaleBins"
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "time",
-                "utc"
-              ]
-            },
-            "nice": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "enum": [
-                    "millisecond",
-                    "second",
-                    "minute",
-                    "hour",
-                    "day",
-                    "week",
-                    "month",
-                    "year"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "interval": {
-                      "oneOf": [
-                        {
-                          "enum": [
-                            "millisecond",
-                            "second",
-                            "minute",
-                            "hour",
-                            "day",
-                            "week",
-                            "month",
-                            "year"
-                          ]
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "step": {
-                      "$ref": "#/refs/numberOrSignal"
-                    }
-                  },
-                  "required": [
-                    "interval"
-                  ],
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "bins": {
-              "$ref": "#/refs/scaleBins"
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "clamp": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "padding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "linear",
-                "sqrt",
-                "sequential"
-              ]
-            },
-            "nice": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "zero": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "bins": {
-              "$ref": "#/refs/scaleBins"
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "clamp": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "padding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "log"
-              ]
-            },
-            "base": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "nice": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "zero": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "bins": {
-              "$ref": "#/refs/scaleBins"
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "clamp": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "padding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "pow"
-              ]
-            },
-            "exponent": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "nice": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "zero": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "bins": {
-              "$ref": "#/refs/scaleBins"
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "clamp": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "padding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "enum": [
-                "symlog"
-              ]
-            },
-            "constant": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "nice": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "zero": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "range": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "width",
-                    "height",
-                    "symbol",
-                    "category",
-                    "ordinal",
-                    "ramp",
-                    "diverging",
-                    "heatmap"
-                  ]
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "scheme": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "array",
-                          "items": {
-                            "oneOf": [
-                              {
-                                "type": "string"
-                              },
-                              {
-                                "$ref": "#/refs/signal"
-                              }
-                            ]
-                          }
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    },
-                    "count": {
-                      "$ref": "#/refs/numberOrSignal"
-                    },
-                    "extent": {
-                      "oneOf": [
-                        {
-                          "type": "array",
-                          "items": {
-                            "$ref": "#/refs/numberOrSignal"
-                          },
-                          "numItems": 2
-                        },
-                        {
-                          "$ref": "#/refs/signal"
-                        }
-                      ]
-                    }
-                  },
-                  "required": [
-                    "scheme"
-                  ],
-                  "additionalProperties": false
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "bins": {
-              "$ref": "#/refs/scaleBins"
-            },
-            "interpolate": {
-              "$ref": "#/refs/scaleInterpolate"
-            },
-            "clamp": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "padding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "name": {
-              "type": "string"
-            },
-            "domain": {
-              "oneOf": [
-                {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "type": "null"
-                      },
-                      {
-                        "type": "boolean"
-                      },
-                      {
-                        "type": "string"
-                      },
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "type": "array",
-                        "items": {
-                          "$ref": "#/refs/numberOrSignal"
-                        }
-                      }
-                    ]
-                  }
-                },
-                {
-                  "$ref": "#/refs/scaleData"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "domainMin": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMax": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainMid": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "domainRaw": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "array"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "reverse": {
-              "$ref": "#/refs/booleanOrSignal"
-            },
-            "round": {
-              "$ref": "#/refs/booleanOrSignal"
-            }
-          },
-          "required": [
-            "type",
-            "name"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "scope": {
-      "type": "object",
-      "properties": {
-        "encode": {
-          "$ref": "#/defs/encode"
-        },
-        "layout": {
-          "$ref": "#/defs/layout"
-        },
-        "signals": {
-          "type": "array",
-          "items": {
-            "$ref": "#/defs/signal"
-          }
-        },
-        "data": {
-          "type": "array",
-          "items": {
-            "$ref": "#/defs/data"
-          }
-        },
-        "scales": {
-          "type": "array",
-          "items": {
-            "$ref": "#/defs/scale"
-          }
-        },
-        "projections": {
-          "type": "array",
-          "items": {
-            "$ref": "#/defs/projection"
-          }
-        },
-        "axes": {
-          "type": "array",
-          "items": {
-            "$ref": "#/defs/axis"
-          }
-        },
-        "legends": {
-          "type": "array",
-          "items": {
-            "$ref": "#/defs/legend"
-          }
-        },
-        "title": {
-          "$ref": "#/defs/title"
-        },
-        "marks": {
-          "type": "array",
-          "items": {
-            "oneOf": [
-              {
-                "$ref": "#/defs/markGroup"
-              },
-              {
-                "$ref": "#/defs/markVisual"
-              }
-            ]
-          }
-        },
-        "usermeta": {
-          "type": "object"
-        }
-      }
-    },
-    "signalName": {
-      "type": "string",
-      "not": {
-        "enum": [
-          "parent",
-          "datum",
-          "event",
-          "item"
-        ]
-      }
-    },
-    "signal": {
-      "oneOf": [
-        {
-          "type": "object",
-          "properties": {
-            "name": {
-              "$ref": "#/defs/signalName"
-            },
-            "description": {
-              "type": "string"
-            },
-            "push": {
-              "enum": [
-                "outer"
-              ]
-            },
-            "on": {
-              "$ref": "#/defs/onEvents"
-            }
-          },
-          "required": [
-            "name",
-            "push"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "name": {
-              "$ref": "#/defs/signalName"
-            },
-            "description": {
-              "type": "string"
-            },
-            "value": {},
-            "react": {
-              "type": "boolean",
-              "default": true
-            },
-            "update": {
-              "$ref": "#/refs/exprString"
-            },
-            "on": {
-              "$ref": "#/defs/onEvents"
-            },
-            "bind": {
-              "$ref": "#/defs/bind"
-            }
-          },
-          "required": [
-            "name"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "name": {
-              "$ref": "#/defs/signalName"
-            },
-            "description": {
-              "type": "string"
-            },
-            "value": {},
-            "init": {
-              "$ref": "#/refs/exprString"
-            },
-            "on": {
-              "$ref": "#/defs/onEvents"
-            },
-            "bind": {
-              "$ref": "#/defs/bind"
-            }
-          },
-          "required": [
-            "name",
-            "init"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "stream": {
-      "allOf": [
-        {
-          "type": "object",
-          "properties": {
-            "between": {
-              "type": "array",
-              "items": {
-                "$ref": "#/defs/stream"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            "marktype": {
-              "type": "string"
-            },
-            "markname": {
-              "type": "string"
-            },
-            "filter": {
-              "oneOf": [
-                {
-                  "$ref": "#/refs/exprString"
-                },
-                {
-                  "type": "array",
-                  "items": {
-                    "$ref": "#/refs/exprString"
-                  },
-                  "minItems": 1
-                }
-              ]
-            },
-            "throttle": {
-              "type": "number"
-            },
-            "debounce": {
-              "type": "number"
-            },
-            "consume": {
-              "type": "boolean"
-            }
-          }
-        },
-        {
-          "oneOf": [
-            {
-              "type": "object",
-              "properties": {
-                "type": {
-                  "type": "string"
-                },
-                "source": {
-                  "type": "string"
-                }
-              },
-              "required": [
-                "type"
-              ]
-            },
-            {
-              "type": "object",
-              "properties": {
-                "stream": {
-                  "$ref": "#/defs/stream"
-                }
-              },
-              "required": [
-                "stream"
-              ]
-            },
-            {
-              "type": "object",
-              "properties": {
-                "merge": {
-                  "type": "array",
-                  "items": {
-                    "$ref": "#/defs/stream"
-                  },
-                  "minItems": 1
-                }
-              },
-              "required": [
-                "merge"
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "title": {
-      "oneOf": [
-        {
-          "type": "string"
-        },
-        {
-          "type": "object",
-          "properties": {
-            "orient": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "none",
-                    "left",
-                    "right",
-                    "top",
-                    "bottom"
-                  ],
-                  "default": "top"
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "anchor": {
-              "oneOf": [
-                {
-                  "enum": [
-                    null,
-                    "start",
-                    "middle",
-                    "end"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/anchorValue"
-                }
-              ]
-            },
-            "frame": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "group",
-                    "bounds"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "offset": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "limit": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "text": {
-              "$ref": "#/refs/textOrSignal"
-            },
-            "subtitle": {
-              "$ref": "#/refs/textOrSignal"
-            },
-            "zindex": {
-              "type": "number"
-            },
-            "align": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "left",
-                    "right",
-                    "center"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/alignValue"
-                }
-              ]
-            },
-            "angle": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "baseline": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "top",
-                    "middle",
-                    "bottom",
-                    "alphabetic",
-                    "line-top",
-                    "line-bottom"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/baselineValue"
-                }
-              ]
-            },
-            "dx": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "dy": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "color": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "font": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "fontSize": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "fontStyle": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "fontWeight": {
-              "oneOf": [
-                {
-                  "enum": [
-                    null,
-                    "normal",
-                    "bold",
-                    "lighter",
-                    "bolder",
-                    "100",
-                    "200",
-                    "300",
-                    "400",
-                    "500",
-                    "600",
-                    "700",
-                    "800",
-                    "900",
-                    100,
-                    200,
-                    300,
-                    400,
-                    500,
-                    600,
-                    700,
-                    800,
-                    900
-                  ]
-                },
-                {
-                  "$ref": "#/refs/fontWeightValue"
-                }
-              ]
-            },
-            "lineHeight": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "subtitleColor": {
-              "oneOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/colorValue"
-                }
-              ]
-            },
-            "subtitleFont": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "subtitleFontSize": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "subtitleFontStyle": {
-              "oneOf": [
-                {
-                  "type": "string"
-                },
-                {
-                  "$ref": "#/refs/stringValue"
-                }
-              ]
-            },
-            "subtitleFontWeight": {
-              "oneOf": [
-                {
-                  "enum": [
-                    null,
-                    "normal",
-                    "bold",
-                    "lighter",
-                    "bolder",
-                    "100",
-                    "200",
-                    "300",
-                    "400",
-                    "500",
-                    "600",
-                    "700",
-                    "800",
-                    "900",
-                    100,
-                    200,
-                    300,
-                    400,
-                    500,
-                    600,
-                    700,
-                    800,
-                    900
-                  ]
-                },
-                {
-                  "$ref": "#/refs/fontWeightValue"
-                }
-              ]
-            },
-            "subtitleLineHeight": {
-              "oneOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/refs/numberValue"
-                }
-              ]
-            },
-            "subtitlePadding": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "encode": {
-              "anyOf": [
-                {
-                  "type": "object",
-                  "additionalProperties": false,
-                  "patternProperties": {
-                    "^(?!interactive|name|style).+$": {
-                      "$ref": "#/defs/encodeEntry"
-                    }
-                  }
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "group": {
-                      "$ref": "#/defs/guideEncode"
-                    },
-                    "title": {
-                      "$ref": "#/defs/guideEncode"
-                    },
-                    "subtitle": {
-                      "$ref": "#/defs/guideEncode"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            },
-            "name": {
-              "type": "string"
-            },
-            "interactive": {
-              "type": "boolean"
-            },
-            "style": {
-              "$ref": "#/refs/style"
-            }
-          },
-          "additionalProperties": false
-        }
-      ]
-    },
-    "transform": {
-      "oneOf": [
-        {
-          "$ref": "#/defs/crossfilterTransform"
-        },
-        {
-          "$ref": "#/defs/resolvefilterTransform"
-        },
-        {
-          "$ref": "#/defs/linkpathTransform"
-        },
-        {
-          "$ref": "#/defs/pieTransform"
-        },
-        {
-          "$ref": "#/defs/stackTransform"
-        },
-        {
-          "$ref": "#/defs/forceTransform"
-        },
-        {
-          "$ref": "#/defs/contourTransform"
-        },
-        {
-          "$ref": "#/defs/geojsonTransform"
-        },
-        {
-          "$ref": "#/defs/geopathTransform"
-        },
-        {
-          "$ref": "#/defs/geopointTransform"
-        },
-        {
-          "$ref": "#/defs/geoshapeTransform"
-        },
-        {
-          "$ref": "#/defs/graticuleTransform"
-        },
-        {
-          "$ref": "#/defs/heatmapTransform"
-        },
-        {
-          "$ref": "#/defs/isocontourTransform"
-        },
-        {
-          "$ref": "#/defs/kde2dTransform"
-        },
-        {
-          "$ref": "#/defs/nestTransform"
-        },
-        {
-          "$ref": "#/defs/packTransform"
-        },
-        {
-          "$ref": "#/defs/partitionTransform"
-        },
-        {
-          "$ref": "#/defs/stratifyTransform"
-        },
-        {
-          "$ref": "#/defs/treeTransform"
-        },
-        {
-          "$ref": "#/defs/treelinksTransform"
-        },
-        {
-          "$ref": "#/defs/treemapTransform"
-        },
-        {
-          "$ref": "#/defs/loessTransform"
-        },
-        {
-          "$ref": "#/defs/regressionTransform"
-        },
-        {
-          "$ref": "#/defs/aggregateTransform"
-        },
-        {
-          "$ref": "#/defs/binTransform"
-        },
-        {
-          "$ref": "#/defs/collectTransform"
-        },
-        {
-          "$ref": "#/defs/countpatternTransform"
-        },
-        {
-          "$ref": "#/defs/crossTransform"
-        },
-        {
-          "$ref": "#/defs/densityTransform"
-        },
-        {
-          "$ref": "#/defs/dotbinTransform"
-        },
-        {
-          "$ref": "#/defs/extentTransform"
-        },
-        {
-          "$ref": "#/defs/filterTransform"
-        },
-        {
-          "$ref": "#/defs/flattenTransform"
-        },
-        {
-          "$ref": "#/defs/foldTransform"
-        },
-        {
-          "$ref": "#/defs/formulaTransform"
-        },
-        {
-          "$ref": "#/defs/imputeTransform"
-        },
-        {
-          "$ref": "#/defs/joinaggregateTransform"
-        },
-        {
-          "$ref": "#/defs/kdeTransform"
-        },
-        {
-          "$ref": "#/defs/lookupTransform"
-        },
-        {
-          "$ref": "#/defs/pivotTransform"
-        },
-        {
-          "$ref": "#/defs/projectTransform"
-        },
-        {
-          "$ref": "#/defs/quantileTransform"
-        },
-        {
-          "$ref": "#/defs/sampleTransform"
-        },
-        {
-          "$ref": "#/defs/sequenceTransform"
-        },
-        {
-          "$ref": "#/defs/timeunitTransform"
-        },
-        {
-          "$ref": "#/defs/windowTransform"
-        },
-        {
-          "$ref": "#/defs/identifierTransform"
-        },
-        {
-          "$ref": "#/defs/voronoiTransform"
-        },
-        {
-          "$ref": "#/defs/wordcloudTransform"
-        }
-      ]
-    },
-    "transformMark": {
-      "oneOf": [
-        {
-          "$ref": "#/defs/crossfilterTransform"
-        },
-        {
-          "$ref": "#/defs/resolvefilterTransform"
-        },
-        {
-          "$ref": "#/defs/linkpathTransform"
-        },
-        {
-          "$ref": "#/defs/pieTransform"
-        },
-        {
-          "$ref": "#/defs/stackTransform"
-        },
-        {
-          "$ref": "#/defs/forceTransform"
-        },
-        {
-          "$ref": "#/defs/geojsonTransform"
-        },
-        {
-          "$ref": "#/defs/geopathTransform"
-        },
-        {
-          "$ref": "#/defs/geopointTransform"
-        },
-        {
-          "$ref": "#/defs/geoshapeTransform"
-        },
-        {
-          "$ref": "#/defs/heatmapTransform"
-        },
-        {
-          "$ref": "#/defs/packTransform"
-        },
-        {
-          "$ref": "#/defs/partitionTransform"
-        },
-        {
-          "$ref": "#/defs/stratifyTransform"
-        },
-        {
-          "$ref": "#/defs/treeTransform"
-        },
-        {
-          "$ref": "#/defs/treemapTransform"
-        },
-        {
-          "$ref": "#/defs/binTransform"
-        },
-        {
-          "$ref": "#/defs/collectTransform"
-        },
-        {
-          "$ref": "#/defs/dotbinTransform"
-        },
-        {
-          "$ref": "#/defs/extentTransform"
-        },
-        {
-          "$ref": "#/defs/formulaTransform"
-        },
-        {
-          "$ref": "#/defs/joinaggregateTransform"
-        },
-        {
-          "$ref": "#/defs/lookupTransform"
-        },
-        {
-          "$ref": "#/defs/sampleTransform"
-        },
-        {
-          "$ref": "#/defs/timeunitTransform"
-        },
-        {
-          "$ref": "#/defs/windowTransform"
-        },
-        {
-          "$ref": "#/defs/identifierTransform"
-        },
-        {
-          "$ref": "#/defs/voronoiTransform"
-        },
-        {
-          "$ref": "#/defs/wordcloudTransform"
-        }
-      ]
-    },
-    "crossfilterTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "crossfilter"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "query": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {}
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "fields",
-        "query"
-      ],
-      "additionalProperties": false
-    },
-    "resolvefilterTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "resolvefilter"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "ignore": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "filter": {}
-      },
-      "required": [
-        "type",
-        "ignore",
-        "filter"
-      ],
-      "additionalProperties": false
-    },
-    "linkpathTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "linkpath"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "sourceX": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ],
-          "default": "source.x"
-        },
-        "sourceY": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ],
-          "default": "source.y"
-        },
-        "targetX": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ],
-          "default": "target.x"
-        },
-        "targetY": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ],
-          "default": "target.y"
-        },
-        "orient": {
-          "anyOf": [
-            {
-              "enum": [
-                "horizontal",
-                "vertical",
-                "radial"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "vertical"
-        },
-        "shape": {
-          "anyOf": [
-            {
-              "enum": [
-                "line",
-                "arc",
-                "curve",
-                "diagonal",
-                "orthogonal"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "line"
-        },
-        "require": {
-          "$ref": "#/refs/signal"
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "path"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "pieTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "pie"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "startAngle": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "endAngle": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 6.283185307179586
-        },
-        "sort": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "startAngle",
-            "endAngle"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "stackTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "stack"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        },
-        "offset": {
-          "anyOf": [
-            {
-              "enum": [
-                "zero",
-                "center",
-                "normalize"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "zero"
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "y0",
-            "y1"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "forceTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "force"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "static": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "restart": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "iterations": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 300
-        },
-        "alpha": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 1
-        },
-        "alphaMin": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 0.001
-        },
-        "alphaTarget": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "velocityDecay": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 0.4
-        },
-        "forces": {
-          "type": "array",
-          "items": {
-            "oneOf": [
-              {
-                "type": "object",
-                "properties": {
-                  "force": {
-                    "enum": [
-                      "center"
-                    ]
-                  },
-                  "x": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ]
-                  },
-                  "y": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ]
-                  }
-                },
-                "required": [
-                  "force"
-                ],
-                "additionalProperties": false
-              },
-              {
-                "type": "object",
-                "properties": {
-                  "force": {
-                    "enum": [
-                      "collide"
-                    ]
-                  },
-                  "radius": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "$ref": "#/refs/expr"
-                      },
-                      {
-                        "$ref": "#/refs/paramField"
-                      }
-                    ]
-                  },
-                  "strength": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": 0.7
-                  },
-                  "iterations": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": 1
-                  }
-                },
-                "required": [
-                  "force"
-                ],
-                "additionalProperties": false
-              },
-              {
-                "type": "object",
-                "properties": {
-                  "force": {
-                    "enum": [
-                      "nbody"
-                    ]
-                  },
-                  "strength": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": -30
-                  },
-                  "theta": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": 0.9
-                  },
-                  "distanceMin": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": 1
-                  },
-                  "distanceMax": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ]
-                  }
-                },
-                "required": [
-                  "force"
-                ],
-                "additionalProperties": false
-              },
-              {
-                "type": "object",
-                "properties": {
-                  "force": {
-                    "enum": [
-                      "link"
-                    ]
-                  },
-                  "links": {
-                    "type": "string"
-                  },
-                  "id": {
-                    "oneOf": [
-                      {
-                        "$ref": "#/refs/scaleField"
-                      },
-                      {
-                        "$ref": "#/refs/paramField"
-                      },
-                      {
-                        "$ref": "#/refs/expr"
-                      }
-                    ]
-                  },
-                  "distance": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "$ref": "#/refs/expr"
-                      },
-                      {
-                        "$ref": "#/refs/paramField"
-                      }
-                    ],
-                    "default": 30
-                  },
-                  "strength": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      },
-                      {
-                        "$ref": "#/refs/expr"
-                      },
-                      {
-                        "$ref": "#/refs/paramField"
-                      }
-                    ]
-                  },
-                  "iterations": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": 1
-                  }
-                },
-                "required": [
-                  "force"
-                ],
-                "additionalProperties": false
-              },
-              {
-                "type": "object",
-                "properties": {
-                  "force": {
-                    "enum": [
-                      "x"
-                    ]
-                  },
-                  "strength": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": 0.1
-                  },
-                  "x": {
-                    "oneOf": [
-                      {
-                        "$ref": "#/refs/scaleField"
-                      },
-                      {
-                        "$ref": "#/refs/paramField"
-                      },
-                      {
-                        "$ref": "#/refs/expr"
-                      }
-                    ]
-                  }
-                },
-                "required": [
-                  "force"
-                ],
-                "additionalProperties": false
-              },
-              {
-                "type": "object",
-                "properties": {
-                  "force": {
-                    "enum": [
-                      "y"
-                    ]
-                  },
-                  "strength": {
-                    "anyOf": [
-                      {
-                        "type": "number"
-                      },
-                      {
-                        "$ref": "#/refs/signal"
-                      }
-                    ],
-                    "default": 0.1
-                  },
-                  "y": {
-                    "oneOf": [
-                      {
-                        "$ref": "#/refs/scaleField"
-                      },
-                      {
-                        "$ref": "#/refs/paramField"
-                      },
-                      {
-                        "$ref": "#/refs/expr"
-                      }
-                    ]
-                  }
-                },
-                "required": [
-                  "force"
-                ],
-                "additionalProperties": false
-              }
-            ]
-          }
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": [
-            "x",
-            "y",
-            "vx",
-            "vy"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "contourTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "contour"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "values": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "x": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "y": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "weight": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "cellSize": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "bandwidth": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "count": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "nice": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "thresholds": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "smooth": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        }
-      },
-      "required": [
-        "type",
-        "size"
-      ],
-      "additionalProperties": false
-    },
-    "geojsonTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "geojson"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "geojson": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "geopathTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "geopath"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "projection": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "pointRadius": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ]
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "path"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "geopointTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "geopoint"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "projection": {
-          "type": "string"
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "x",
-            "y"
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "projection",
-        "fields"
-      ],
-      "additionalProperties": false
-    },
-    "geoshapeTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "geoshape"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "projection": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ],
-          "default": "datum"
-        },
-        "pointRadius": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ]
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "shape"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "graticuleTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "graticule"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {}
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "extentMajor": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {}
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "extentMinor": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {}
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "step": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "stepMajor": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            90,
-            360
-          ]
-        },
-        "stepMinor": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            10,
-            10
-          ]
-        },
-        "precision": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 2.5
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "heatmapTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "heatmap"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "color": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ]
-        },
-        "opacity": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ]
-        },
-        "resolve": {
-          "anyOf": [
-            {
-              "enum": [
-                "shared",
-                "independent"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "independent"
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "image"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "isocontourTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "isocontour"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "thresholds": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "levels": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "nice": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "resolve": {
-          "anyOf": [
-            {
-              "enum": [
-                "shared",
-                "independent"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "independent"
-        },
-        "zero": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        },
-        "smooth": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ]
-        },
-        "translate": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "default": "contour"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "kde2dTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "kde2d"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "x": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "y": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "weight": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "cellSize": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "bandwidth": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "counts": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "grid"
-        }
-      },
-      "required": [
-        "type",
-        "size",
-        "x",
-        "y"
-      ],
-      "additionalProperties": false
-    },
-    "nestTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "nest"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "keys": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "generate": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "packTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "pack"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        },
-        "padding": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "radius": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 5,
-          "minItems": 5,
-          "default": [
-            "x",
-            "y",
-            "r",
-            "depth",
-            "children"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "partitionTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "partition"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        },
-        "padding": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "round": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 6,
-          "minItems": 6,
-          "default": [
-            "x0",
-            "y0",
-            "x1",
-            "y1",
-            "depth",
-            "children"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "stratifyTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "stratify"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "key": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "parentKey": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "key",
-        "parentKey"
-      ],
-      "additionalProperties": false
-    },
-    "treeTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "tree"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        },
-        "method": {
-          "anyOf": [
-            {
-              "enum": [
-                "tidy",
-                "cluster"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "tidy"
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "nodeSize": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "separation": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 4,
-          "minItems": 4,
-          "default": [
-            "x",
-            "y",
-            "depth",
-            "children"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "treelinksTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "treelinks"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "treemapTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "treemap"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        },
-        "method": {
-          "anyOf": [
-            {
-              "enum": [
-                "squarify",
-                "resquarify",
-                "binary",
-                "dice",
-                "slice",
-                "slicedice"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "squarify"
-        },
-        "padding": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "paddingInner": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "paddingOuter": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "paddingTop": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "paddingRight": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "paddingBottom": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "paddingLeft": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "ratio": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 1.618033988749895
-        },
-        "round": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 6,
-          "minItems": 6,
-          "default": [
-            "x0",
-            "y0",
-            "x1",
-            "y1",
-            "depth",
-            "children"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "loessTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "loess"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "x": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "y": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "bandwidth": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 0.3
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "x",
-        "y"
-      ],
-      "additionalProperties": false
-    },
-    "regressionTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "regression"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "x": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "y": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "method": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "linear"
-        },
-        "order": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 3
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "params": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "x",
-        "y"
-      ],
-      "additionalProperties": false
-    },
-    "aggregateTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "aggregate"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "ops": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "enum": [
-                      "values",
-                      "count",
-                      "__count__",
-                      "missing",
-                      "valid",
-                      "sum",
-                      "product",
-                      "mean",
-                      "average",
-                      "variance",
-                      "variancep",
-                      "stdev",
-                      "stdevp",
-                      "stderr",
-                      "distinct",
-                      "ci0",
-                      "ci1",
-                      "median",
-                      "q1",
-                      "q3",
-                      "argmin",
-                      "argmax",
-                      "min",
-                      "max"
-                    ]
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "drop": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        },
-        "cross": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "key": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "binTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "bin"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "interval": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        },
-        "anchor": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "maxbins": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 20
-        },
-        "base": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 10
-        },
-        "divide": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": [
-            5,
-            2
-          ]
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "span": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "step": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "steps": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "minstep": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "nice": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        },
-        "name": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "bin0",
-            "bin1"
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "field",
-        "extent"
-      ],
-      "additionalProperties": false
-    },
-    "collectTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "collect"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "countpatternTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "countpattern"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "case": {
-          "anyOf": [
-            {
-              "enum": [
-                "upper",
-                "lower",
-                "mixed"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "mixed"
-        },
-        "pattern": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "[\\w\"]+"
-        },
-        "stopwords": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "text",
-            "count"
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "field"
-      ],
-      "additionalProperties": false
-    },
-    "crossTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "cross"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "filter": {
-          "$ref": "#/refs/exprString"
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "a",
-            "b"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "densityTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "density"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "steps": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "minsteps": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 25
-        },
-        "maxsteps": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 200
-        },
-        "method": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "pdf"
-        },
-        "distribution": {
-          "oneOf": [
-            {
-              "type": "object",
-              "properties": {
-                "function": {
-                  "enum": [
-                    "normal"
-                  ]
-                },
-                "mean": {
-                  "anyOf": [
-                    {
-                      "type": "number"
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                },
-                "stdev": {
-                  "anyOf": [
-                    {
-                      "type": "number"
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ],
-                  "default": 1
-                }
-              },
-              "required": [
-                "function"
-              ],
-              "additionalProperties": false
-            },
-            {
-              "type": "object",
-              "properties": {
-                "function": {
-                  "enum": [
-                    "lognormal"
-                  ]
-                },
-                "mean": {
-                  "anyOf": [
-                    {
-                      "type": "number"
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                },
-                "stdev": {
-                  "anyOf": [
-                    {
-                      "type": "number"
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ],
-                  "default": 1
-                }
-              },
-              "required": [
-                "function"
-              ],
-              "additionalProperties": false
-            },
-            {
-              "type": "object",
-              "properties": {
-                "function": {
-                  "enum": [
-                    "uniform"
-                  ]
-                },
-                "min": {
-                  "anyOf": [
-                    {
-                      "type": "number"
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                },
-                "max": {
-                  "anyOf": [
-                    {
-                      "type": "number"
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ],
-                  "default": 1
-                }
-              },
-              "required": [
-                "function"
-              ],
-              "additionalProperties": false
-            },
-            {
-              "type": "object",
-              "properties": {
-                "function": {
-                  "enum": [
-                    "kde"
-                  ]
-                },
-                "field": {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/scaleField"
-                    },
-                    {
-                      "$ref": "#/refs/paramField"
-                    },
-                    {
-                      "$ref": "#/refs/expr"
-                    }
-                  ]
-                },
-                "from": {
-                  "type": "string"
-                },
-                "bandwidth": {
-                  "anyOf": [
-                    {
-                      "type": "number"
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                }
-              },
-              "required": [
-                "function",
-                "field"
-              ],
-              "additionalProperties": false
-            },
-            {
-              "type": "object",
-              "properties": {
-                "function": {
-                  "enum": [
-                    "mixture"
-                  ]
-                },
-                "distributions": {
-                  "oneOf": [
-                    {
-                      "type": "array",
-                      "items": {}
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                },
-                "weights": {
-                  "oneOf": [
-                    {
-                      "type": "array",
-                      "items": {
-                        "anyOf": [
-                          {
-                            "type": "number"
-                          },
-                          {
-                            "$ref": "#/refs/signal"
-                          }
-                        ]
-                      }
-                    },
-                    {
-                      "$ref": "#/refs/signal"
-                    }
-                  ]
-                }
-              },
-              "required": [
-                "function"
-              ],
-              "additionalProperties": false
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": [
-            "value",
-            "density"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "dotbinTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "dotbin"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "step": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "smooth": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "bin"
-        }
-      },
-      "required": [
-        "type",
-        "field"
-      ],
-      "additionalProperties": false
-    },
-    "extentTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "extent"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "field"
-      ],
-      "additionalProperties": false
-    },
-    "filterTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "filter"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "expr": {
-          "$ref": "#/refs/exprString"
-        }
-      },
-      "required": [
-        "type",
-        "expr"
-      ],
-      "additionalProperties": false
-    },
-    "flattenTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "flatten"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "index": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "fields"
-      ],
-      "additionalProperties": false
-    },
-    "foldTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "fold"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "key",
-            "value"
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "fields"
-      ],
-      "additionalProperties": false
-    },
-    "formulaTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "formula"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "expr": {
-          "$ref": "#/refs/exprString"
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "initonly": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "expr",
-        "as"
-      ],
-      "additionalProperties": false
-    },
-    "imputeTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "impute"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "key": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "keyvals": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {}
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "method": {
-          "anyOf": [
-            {
-              "enum": [
-                "value",
-                "mean",
-                "median",
-                "max",
-                "min"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "value"
-        },
-        "value": {}
-      },
-      "required": [
-        "type",
-        "field",
-        "key"
-      ],
-      "additionalProperties": false
-    },
-    "joinaggregateTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "joinaggregate"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "ops": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "enum": [
-                      "values",
-                      "count",
-                      "__count__",
-                      "missing",
-                      "valid",
-                      "sum",
-                      "product",
-                      "mean",
-                      "average",
-                      "variance",
-                      "variancep",
-                      "stdev",
-                      "stdevp",
-                      "stderr",
-                      "distinct",
-                      "ci0",
-                      "ci1",
-                      "median",
-                      "q1",
-                      "q3",
-                      "argmin",
-                      "argmax",
-                      "min",
-                      "max"
-                    ]
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "key": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "kdeTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "kde"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "cumulative": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "counts": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "bandwidth": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "resolve": {
-          "anyOf": [
-            {
-              "enum": [
-                "shared",
-                "independent"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "independent"
-        },
-        "steps": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "minsteps": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 25
-        },
-        "maxsteps": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 200
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": [
-            "value",
-            "density"
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "field"
-      ],
-      "additionalProperties": false
-    },
-    "lookupTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "lookup"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "from": {
-          "type": "string"
-        },
-        "key": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "values": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "default": {}
-      },
-      "required": [
-        "type",
-        "from",
-        "key",
-        "fields"
-      ],
-      "additionalProperties": false
-    },
-    "pivotTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "pivot"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "value": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "op": {
-          "anyOf": [
-            {
-              "enum": [
-                "values",
-                "count",
-                "__count__",
-                "missing",
-                "valid",
-                "sum",
-                "product",
-                "mean",
-                "average",
-                "variance",
-                "variancep",
-                "stdev",
-                "stdevp",
-                "stderr",
-                "distinct",
-                "ci0",
-                "ci1",
-                "median",
-                "q1",
-                "q3",
-                "argmin",
-                "argmax",
-                "min",
-                "max"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "sum"
-        },
-        "limit": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "key": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "field",
-        "value"
-      ],
-      "additionalProperties": false
-    },
-    "projectTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "project"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "quantileTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "quantile"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "probs": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "step": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 0.01
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": [
-            "prob",
-            "value"
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "field"
-      ],
-      "additionalProperties": false
-    },
-    "sampleTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "sample"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "size": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 1000
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "sequenceTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "sequence"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "start": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "stop": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "step": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 1
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "data"
-        }
-      },
-      "required": [
-        "type",
-        "start",
-        "stop"
-      ],
-      "additionalProperties": false
-    },
-    "timeunitTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "timeunit"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "field": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "interval": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": true
-        },
-        "units": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "step": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 1
-        },
-        "maxbins": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": 40
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "timezone": {
-          "anyOf": [
-            {
-              "enum": [
-                "local",
-                "utc"
-              ]
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "local"
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            "unit0",
-            "unit1"
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "field"
-      ],
-      "additionalProperties": false
-    },
-    "windowTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "window"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "sort": {
-          "$ref": "#/refs/compare"
-        },
-        "groupby": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "ops": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "enum": [
-                      "row_number",
-                      "rank",
-                      "dense_rank",
-                      "percent_rank",
-                      "cume_dist",
-                      "ntile",
-                      "lag",
-                      "lead",
-                      "first_value",
-                      "last_value",
-                      "nth_value",
-                      "prev_value",
-                      "next_value",
-                      "values",
-                      "count",
-                      "__count__",
-                      "missing",
-                      "valid",
-                      "sum",
-                      "product",
-                      "mean",
-                      "average",
-                      "variance",
-                      "variancep",
-                      "stdev",
-                      "stdevp",
-                      "stderr",
-                      "distinct",
-                      "ci0",
-                      "ci1",
-                      "median",
-                      "q1",
-                      "q3",
-                      "argmin",
-                      "argmax",
-                      "min",
-                      "max"
-                    ]
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "params": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "fields": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/paramField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "frame": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  },
-                  {
-                    "type": "null"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            null,
-            0
-          ]
-        },
-        "ignorePeers": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    },
-    "identifierTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "identifier"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        }
-      },
-      "required": [
-        "type",
-        "as"
-      ],
-      "additionalProperties": false
-    },
-    "voronoiTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "voronoi"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "x": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "y": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "extent": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {}
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "default": [
-            [
-              -100000,
-              -100000
-            ],
-            [
-              100000,
-              100000
-            ]
-          ]
-        },
-        "as": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "default": "path"
-        }
-      },
-      "required": [
-        "type",
-        "x",
-        "y"
-      ],
-      "additionalProperties": false
-    },
-    "wordcloudTransform": {
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "wordcloud"
-          ]
-        },
-        "signal": {
-          "type": "string"
-        },
-        "size": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "font": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ],
-          "default": "sans-serif"
-        },
-        "fontStyle": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ],
-          "default": "normal"
-        },
-        "fontWeight": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ],
-          "default": "normal"
-        },
-        "fontSize": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ],
-          "default": 14
-        },
-        "fontSizeRange": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "default": [
-            10,
-            50
-          ]
-        },
-        "rotate": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ]
-        },
-        "text": {
-          "oneOf": [
-            {
-              "$ref": "#/refs/scaleField"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            },
-            {
-              "$ref": "#/refs/expr"
-            }
-          ]
-        },
-        "spiral": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ]
-        },
-        "padding": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/signal"
-            },
-            {
-              "$ref": "#/refs/expr"
-            },
-            {
-              "$ref": "#/refs/paramField"
-            }
-          ]
-        },
-        "as": {
-          "oneOf": [
-            {
-              "type": "array",
-              "items": {
-                "anyOf": [
-                  {
-                    "type": "string"
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              }
-            },
-            {
-              "$ref": "#/refs/signal"
-            }
-          ],
-          "maxItems": 7,
-          "minItems": 7,
-          "default": [
-            "x",
-            "y",
-            "font",
-            "fontSize",
-            "fontStyle",
-            "fontWeight",
-            "angle"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "additionalProperties": false
-    }
-  },
-  "refs": {
-    "labelOverlap": {
-      "oneOf": [
-        {
-          "type": "boolean"
-        },
-        {
-          "enum": [
-            "parity",
-            "greedy"
-          ]
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "tickBand": {
-      "oneOf": [
-        {
-          "enum": [
-            "center",
-            "extent"
-          ]
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "tickCount": {
-      "oneOf": [
-        {
-          "type": "number"
-        },
-        {
-          "enum": [
-            "millisecond",
-            "second",
-            "minute",
-            "hour",
-            "day",
-            "week",
-            "month",
-            "year"
-          ]
-        },
-        {
-          "type": "object",
-          "properties": {
-            "interval": {
-              "oneOf": [
-                {
-                  "enum": [
-                    "millisecond",
-                    "second",
-                    "minute",
-                    "hour",
-                    "day",
-                    "week",
-                    "month",
-                    "year"
-                  ]
-                },
-                {
-                  "$ref": "#/refs/signal"
-                }
-              ]
-            },
-            "step": {
-              "$ref": "#/refs/numberOrSignal"
-            }
-          },
-          "required": [
-            "interval"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "element": {
-      "type": "string"
-    },
-    "paramField": {
-      "type": "object",
-      "properties": {
-        "field": {
-          "type": "string"
-        },
-        "as": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "field"
-      ],
-      "additionalProperties": false
-    },
-    "field": {
-      "oneOf": [
-        {
-          "type": "string"
-        },
-        {
-          "$ref": "#/refs/signal"
-        },
-        {
-          "type": "object",
-          "properties": {
-            "datum": {
-              "$ref": "#/refs/field"
-            }
-          },
-          "required": [
-            "datum"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "group": {
-              "$ref": "#/refs/field"
-            },
-            "level": {
-              "type": "number"
-            }
-          },
-          "required": [
-            "group"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "parent": {
-              "$ref": "#/refs/field"
-            },
-            "level": {
-              "type": "number"
-            }
-          },
-          "required": [
-            "parent"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "scale": {
-      "$ref": "#/refs/field"
-    },
-    "stringModifiers": {
-      "type": "object",
-      "properties": {
-        "scale": {
-          "$ref": "#/refs/scale"
-        }
-      }
-    },
-    "numberModifiers": {
-      "type": "object",
-      "properties": {
-        "exponent": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "mult": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "offset": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/refs/numberValue"
-            }
-          ]
-        },
-        "round": {
-          "type": "boolean",
-          "default": false
-        },
-        "scale": {
-          "$ref": "#/refs/scale"
-        },
-        "band": {
-          "oneOf": [
-            {
-              "type": "number"
-            },
-            {
-              "type": "boolean"
-            }
-          ]
-        },
-        "extra": {
-          "type": "boolean"
-        }
-      }
-    },
-    "anyValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {}
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {}
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "blendValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  null,
-                                  "multiply",
-                                  "screen",
-                                  "overlay",
-                                  "darken",
-                                  "lighten",
-                                  "color-dodge",
-                                  "color-burn",
-                                  "hard-light",
-                                  "soft-light",
-                                  "difference",
-                                  "exclusion",
-                                  "hue",
-                                  "saturation",
-                                  "color",
-                                  "luminosity"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            null,
-                            "multiply",
-                            "screen",
-                            "overlay",
-                            "darken",
-                            "lighten",
-                            "color-dodge",
-                            "color-burn",
-                            "hard-light",
-                            "soft-light",
-                            "difference",
-                            "exclusion",
-                            "hue",
-                            "saturation",
-                            "color",
-                            "luminosity"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "numberValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/numberModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "type": "number"
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/numberModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "type": "number"
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "stringValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "type": "string"
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "type": "string"
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "textValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "oneOf": [
-                                  {
-                                    "type": "string"
-                                  },
-                                  {
-                                    "type": "array",
-                                    "items": {
-                                      "type": "string"
-                                    }
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "oneOf": [
-                            {
-                              "type": "string"
-                            },
-                            {
-                              "type": "array",
-                              "items": {
-                                "type": "string"
-                              }
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "booleanValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "type": "boolean"
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "type": "boolean"
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "arrayValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "type": "array"
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "type": "array"
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "fontWeightValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  null,
-                                  "normal",
-                                  "bold",
-                                  "lighter",
-                                  "bolder",
-                                  "100",
-                                  "200",
-                                  "300",
-                                  "400",
-                                  "500",
-                                  "600",
-                                  "700",
-                                  "800",
-                                  "900",
-                                  100,
-                                  200,
-                                  300,
-                                  400,
-                                  500,
-                                  600,
-                                  700,
-                                  800,
-                                  900
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            null,
-                            "normal",
-                            "bold",
-                            "lighter",
-                            "bolder",
-                            "100",
-                            "200",
-                            "300",
-                            "400",
-                            "500",
-                            "600",
-                            "700",
-                            "800",
-                            "900",
-                            100,
-                            200,
-                            300,
-                            400,
-                            500,
-                            600,
-                            700,
-                            800,
-                            900
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "anchorValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  "start",
-                                  "middle",
-                                  "end"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            "start",
-                            "middle",
-                            "end"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "alignValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  "left",
-                                  "right",
-                                  "center"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            "left",
-                            "right",
-                            "center"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "baselineValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  "top",
-                                  "middle",
-                                  "bottom",
-                                  "alphabetic"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            "top",
-                            "middle",
-                            "bottom",
-                            "alphabetic"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "directionValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  "horizontal",
-                                  "vertical"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            "horizontal",
-                            "vertical"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "orientValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  "left",
-                                  "right",
-                                  "top",
-                                  "bottom"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            "left",
-                            "right",
-                            "top",
-                            "bottom"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "strokeCapValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  "butt",
-                                  "round",
-                                  "square"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            "butt",
-                            "round",
-                            "square"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "strokeJoinValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "allOf": [
-                  {
-                    "$ref": "#/refs/stringModifiers"
-                  },
-                  {
-                    "anyOf": [
-                      {
-                        "oneOf": [
-                          {
-                            "$ref": "#/refs/signal"
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "value": {
-                                "enum": [
-                                  "miter",
-                                  "round",
-                                  "bevel"
-                                ]
-                              }
-                            },
-                            "required": [
-                              "value"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "field": {
-                                "$ref": "#/refs/field"
-                              }
-                            },
-                            "required": [
-                              "field"
-                            ]
-                          },
-                          {
-                            "type": "object",
-                            "properties": {
-                              "range": {
-                                "oneOf": [
-                                  {
-                                    "type": "number"
-                                  },
-                                  {
-                                    "type": "boolean"
-                                  }
-                                ]
-                              }
-                            },
-                            "required": [
-                              "range"
-                            ]
-                          }
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "value"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "scale",
-                          "band"
-                        ]
-                      },
-                      {
-                        "type": "object",
-                        "required": [
-                          "offset"
-                        ]
-                      }
-                    ]
-                  }
-                ]
-              }
-            ]
-          }
-        },
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "enum": [
-                            "miter",
-                            "round",
-                            "bevel"
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        }
-      ]
-    },
-    "baseColorValue": {
-      "oneOf": [
-        {
-          "allOf": [
-            {
-              "$ref": "#/refs/stringModifiers"
-            },
-            {
-              "anyOf": [
-                {
-                  "oneOf": [
-                    {
-                      "$ref": "#/refs/signal"
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "value": {
-                          "oneOf": [
-                            {
-                              "type": "string"
-                            },
-                            {
-                              "type": "null"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "value"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "field": {
-                          "$ref": "#/refs/field"
-                        }
-                      },
-                      "required": [
-                        "field"
-                      ]
-                    },
-                    {
-                      "type": "object",
-                      "properties": {
-                        "range": {
-                          "oneOf": [
-                            {
-                              "type": "number"
-                            },
-                            {
-                              "type": "boolean"
-                            }
-                          ]
-                        }
-                      },
-                      "required": [
-                        "range"
-                      ]
-                    }
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "value"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "scale",
-                    "band"
-                  ]
-                },
-                {
-                  "type": "object",
-                  "required": [
-                    "offset"
-                  ]
-                }
-              ]
-            }
-          ]
-        },
-        {
-          "type": "object",
-          "properties": {
-            "value": {
-              "$ref": "#/refs/linearGradient"
-            }
-          },
-          "required": [
-            "value"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "value": {
-              "$ref": "#/refs/radialGradient"
-            }
-          },
-          "required": [
-            "value"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "gradient": {
-              "$ref": "#/refs/scale"
-            },
-            "start": {
-              "type": "array",
-              "items": {
-                "type": "number"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            "stop": {
-              "type": "array",
-              "items": {
-                "type": "number"
-              },
-              "minItems": 2,
-              "maxItems": 2
-            },
-            "count": {
-              "type": "number"
-            }
-          },
-          "required": [
-            "gradient"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "color": {
-              "oneOf": [
-                {
-                  "$ref": "#/refs/colorRGB"
-                },
-                {
-                  "$ref": "#/refs/colorHSL"
-                },
-                {
-                  "$ref": "#/refs/colorLAB"
-                },
-                {
-                  "$ref": "#/refs/colorHCL"
-                }
-              ]
-            }
-          },
-          "required": [
-            "color"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "colorRGB": {
-      "type": "object",
-      "properties": {
-        "r": {
-          "$ref": "#/refs/numberValue"
-        },
-        "g": {
-          "$ref": "#/refs/numberValue"
-        },
-        "b": {
-          "$ref": "#/refs/numberValue"
-        }
-      },
-      "required": [
-        "r",
-        "g",
-        "b"
-      ]
-    },
-    "colorHSL": {
-      "type": "object",
-      "properties": {
-        "h": {
-          "$ref": "#/refs/numberValue"
-        },
-        "s": {
-          "$ref": "#/refs/numberValue"
-        },
-        "l": {
-          "$ref": "#/refs/numberValue"
-        }
-      },
-      "required": [
-        "h",
-        "s",
-        "l"
-      ]
-    },
-    "colorLAB": {
-      "type": "object",
-      "properties": {
-        "l": {
-          "$ref": "#/refs/numberValue"
-        },
-        "a": {
-          "$ref": "#/refs/numberValue"
-        },
-        "b": {
-          "$ref": "#/refs/numberValue"
-        }
-      },
-      "required": [
-        "l",
-        "a",
-        "b"
-      ]
-    },
-    "colorHCL": {
-      "type": "object",
-      "properties": {
-        "h": {
-          "$ref": "#/refs/numberValue"
-        },
-        "c": {
-          "$ref": "#/refs/numberValue"
-        },
-        "l": {
-          "$ref": "#/refs/numberValue"
-        }
-      },
-      "required": [
-        "h",
-        "c",
-        "l"
-      ]
-    },
-    "colorValue": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "allOf": [
-              {
-                "$ref": "#/defs/rule"
-              },
-              {
-                "$ref": "#/refs/baseColorValue"
-              }
-            ]
-          }
-        },
-        {
-          "$ref": "#/refs/baseColorValue"
-        }
-      ]
-    },
-    "gradientStops": {
-      "type": "array",
-      "items": {
-        "type": "object",
-        "properties": {
-          "offset": {
-            "type": "number"
-          },
-          "color": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "offset",
-          "color"
-        ],
-        "additionalProperties": false
-      }
-    },
-    "linearGradient": {
-      "type": "object",
-      "properties": {
-        "gradient": {
-          "enum": [
-            "linear"
-          ]
-        },
-        "id": {
-          "type": "string"
-        },
-        "x1": {
-          "type": "number"
-        },
-        "y1": {
-          "type": "number"
-        },
-        "x2": {
-          "type": "number"
-        },
-        "y2": {
-          "type": "number"
-        },
-        "stops": {
-          "$ref": "#/refs/gradientStops"
-        }
-      },
-      "required": [
-        "gradient",
-        "stops"
-      ],
-      "additionalProperties": false
-    },
-    "radialGradient": {
-      "type": "object",
-      "properties": {
-        "gradient": {
-          "enum": [
-            "radial"
-          ]
-        },
-        "id": {
-          "type": "string"
-        },
-        "x1": {
-          "type": "number"
-        },
-        "y1": {
-          "type": "number"
-        },
-        "r1": {
-          "type": "number"
-        },
-        "x2": {
-          "type": "number"
-        },
-        "y2": {
-          "type": "number"
-        },
-        "r2": {
-          "type": "number"
-        },
-        "stops": {
-          "$ref": "#/refs/gradientStops"
-        }
-      },
-      "required": [
-        "gradient",
-        "stops"
-      ],
-      "additionalProperties": false
-    },
-    "expr": {
-      "type": "object",
-      "properties": {
-        "expr": {
-          "type": "string"
-        },
-        "as": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "expr"
-      ]
-    },
-    "exprString": {
-      "type": "string"
-    },
-    "compare": {
-      "oneOf": [
-        {
-          "type": "object",
-          "properties": {
-            "field": {
-              "oneOf": [
-                {
-                  "$ref": "#/refs/scaleField"
-                },
-                {
-                  "$ref": "#/refs/expr"
-                }
-              ]
-            },
-            "order": {
-              "$ref": "#/refs/sortOrder"
-            }
-          },
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "field": {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "$ref": "#/refs/scaleField"
-                  },
-                  {
-                    "$ref": "#/refs/expr"
-                  }
-                ]
-              }
-            },
-            "order": {
-              "type": "array",
-              "items": {
-                "$ref": "#/refs/sortOrder"
-              }
-            }
-          },
-          "additionalProperties": false
-        }
-      ]
-    },
-    "from": {
-      "type": "object",
-      "properties": {
-        "data": {
-          "type": "string"
-        }
-      },
-      "additionalProperties": false
-    },
-    "facet": {
-      "type": "object",
-      "properties": {
-        "data": {
-          "type": "string"
-        },
-        "facet": {
-          "oneOf": [
-            {
-              "type": "object",
-              "properties": {
-                "name": {
-                  "type": "string"
-                },
-                "data": {
-                  "type": "string"
-                },
-                "field": {
-                  "type": "string"
-                }
-              },
-              "required": [
-                "name",
-                "data",
-                "field"
-              ],
-              "additionalProperties": false
-            },
-            {
-              "type": "object",
-              "properties": {
-                "name": {
-                  "type": "string"
-                },
-                "data": {
-                  "type": "string"
-                },
-                "groupby": {
-                  "oneOf": [
-                    {
-                      "type": "string"
-                    },
-                    {
-                      "type": "array",
-                      "items": {
-                        "type": "string"
-                      }
-                    }
-                  ]
-                },
-                "aggregate": {
-                  "type": "object",
-                  "properties": {
-                    "cross": {
-                      "type": "boolean"
-                    },
-                    "fields": {
-                      "type": "array",
-                      "items": {
-                        "type": "string"
-                      }
-                    },
-                    "ops": {
-                      "type": "array",
-                      "items": {
-                        "type": "string"
-                      }
-                    },
-                    "as": {
-                      "type": "array",
-                      "items": {
-                        "type": "string"
-                      }
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              },
-              "required": [
-                "name",
-                "data",
-                "groupby"
-              ],
-              "additionalProperties": false
-            }
-          ]
-        }
-      },
-      "required": [
-        "facet"
-      ],
-      "additionalProperties": false
-    },
-    "markclip": {
-      "oneOf": [
-        {
-          "$ref": "#/refs/booleanOrSignal"
-        },
-        {
-          "type": "object",
-          "properties": {
-            "path": {
-              "$ref": "#/refs/stringOrSignal"
-            }
-          },
-          "required": [
-            "path"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "sphere": {
-              "$ref": "#/refs/stringOrSignal"
-            }
-          },
-          "required": [
-            "sphere"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "style": {
-      "oneOf": [
-        {
-          "type": "string"
-        },
-        {
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      ]
-    },
-    "marktype": {
-      "type": "string"
-    },
-    "scaleField": {
-      "$ref": "#/refs/stringOrSignal"
-    },
-    "sortOrder": {
-      "oneOf": [
-        {
-          "enum": [
-            "ascending",
-            "descending"
-          ]
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "scaleBins": {
-      "oneOf": [
-        {
-          "type": "array",
-          "items": {
-            "$ref": "#/refs/numberOrSignal"
-          }
-        },
-        {
-          "type": "object",
-          "properties": {
-            "step": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "start": {
-              "$ref": "#/refs/numberOrSignal"
-            },
-            "stop": {
-              "$ref": "#/refs/numberOrSignal"
-            }
-          },
-          "required": [
-            "step"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "scaleInterpolate": {
-      "oneOf": [
-        {
-          "type": "string"
-        },
-        {
-          "$ref": "#/refs/signal"
-        },
-        {
-          "type": "object",
-          "properties": {
-            "type": {
-              "$ref": "#/refs/stringOrSignal"
-            },
-            "gamma": {
-              "$ref": "#/refs/numberOrSignal"
-            }
-          },
-          "required": [
-            "type"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "scaleData": {
-      "oneOf": [
-        {
-          "type": "object",
-          "properties": {
-            "data": {
-              "type": "string"
-            },
-            "field": {
-              "$ref": "#/refs/stringOrSignal"
-            },
-            "sort": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "field": {
-                      "$ref": "#/refs/stringOrSignal"
-                    },
-                    "op": {
-                      "$ref": "#/refs/stringOrSignal"
-                    },
-                    "order": {
-                      "$ref": "#/refs/sortOrder"
-                    }
-                  },
-                  "additionalProperties": false
-                }
-              ]
-            }
-          },
-          "required": [
-            "data",
-            "field"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "data": {
-              "type": "string"
-            },
-            "fields": {
-              "type": "array",
-              "items": {
-                "$ref": "#/refs/stringOrSignal"
-              },
-              "minItems": 1
-            },
-            "sort": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "op": {
-                      "enum": [
-                        "count"
-                      ]
-                    },
-                    "order": {
-                      "$ref": "#/refs/sortOrder"
-                    }
-                  },
-                  "additionalProperties": false
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "field": {
-                      "$ref": "#/refs/stringOrSignal"
-                    },
-                    "op": {
-                      "enum": [
-                        "count",
-                        "min",
-                        "max"
-                      ]
-                    },
-                    "order": {
-                      "$ref": "#/refs/sortOrder"
-                    }
-                  },
-                  "required": [
-                    "field",
-                    "op"
-                  ],
-                  "additionalProperties": false
-                }
-              ]
-            }
-          },
-          "required": [
-            "data",
-            "fields"
-          ],
-          "additionalProperties": false
-        },
-        {
-          "type": "object",
-          "properties": {
-            "fields": {
-              "type": "array",
-              "items": {
-                "oneOf": [
-                  {
-                    "type": "object",
-                    "properties": {
-                      "data": {
-                        "type": "string"
-                      },
-                      "field": {
-                        "$ref": "#/refs/stringOrSignal"
-                      }
-                    },
-                    "required": [
-                      "data",
-                      "field"
-                    ],
-                    "additionalProperties": false
-                  },
-                  {
-                    "type": "array",
-                    "items": {
-                      "oneOf": [
-                        {
-                          "type": "string"
-                        },
-                        {
-                          "type": "number"
-                        },
-                        {
-                          "type": "boolean"
-                        }
-                      ]
-                    }
-                  },
-                  {
-                    "$ref": "#/refs/signal"
-                  }
-                ]
-              },
-              "minItems": 1
-            },
-            "sort": {
-              "oneOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "op": {
-                      "enum": [
-                        "count"
-                      ]
-                    },
-                    "order": {
-                      "$ref": "#/refs/sortOrder"
-                    }
-                  },
-                  "additionalProperties": false
-                },
-                {
-                  "type": "object",
-                  "properties": {
-                    "field": {
-                      "$ref": "#/refs/stringOrSignal"
-                    },
-                    "op": {
-                      "enum": [
-                        "count",
-                        "min",
-                        "max"
-                      ]
-                    },
-                    "order": {
-                      "$ref": "#/refs/sortOrder"
-                    }
-                  },
-                  "required": [
-                    "field",
-                    "op"
-                  ],
-                  "additionalProperties": false
-                }
-              ]
-            }
-          },
-          "required": [
-            "fields"
-          ],
-          "additionalProperties": false
-        }
-      ]
-    },
-    "selector": {
-      "type": "string"
-    },
-    "signal": {
-      "type": "object",
-      "properties": {
-        "signal": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "signal"
-      ]
-    },
-    "arrayOrSignal": {
-      "oneOf": [
-        {
-          "type": "array"
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "booleanOrSignal": {
-      "oneOf": [
-        {
-          "type": "boolean"
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "numberOrSignal": {
-      "oneOf": [
-        {
-          "type": "number"
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "stringOrSignal": {
-      "oneOf": [
-        {
-          "type": "string"
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    },
-    "textOrSignal": {
-      "oneOf": [
-        {
-          "oneOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "array",
-              "items": {
-                "type": "string"
-              }
-            }
-          ]
-        },
-        {
-          "$ref": "#/refs/signal"
-        }
-      ]
-    }
-  },
-  "type": "object",
-  "allOf": [
-    {
-      "$ref": "#/defs/scope"
-    },
-    {
-      "properties": {
-        "$schema": {
-          "type": "string",
-          "format": "uri"
-        },
-        "config": {
-          "type": "object"
-        },
-        "description": {
-          "type": "string"
-        },
-        "width": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "height": {
-          "$ref": "#/refs/numberOrSignal"
-        },
-        "padding": {
-          "$ref": "#/defs/padding"
-        },
-        "autosize": {
-          "$ref": "#/defs/autosize"
-        },
-        "background": {
-          "$ref": "#/defs/background"
-        },
-        "style": {
-          "$ref": "#/refs/style"
-        }
-      }
-    }
-  ]
-}
\ No newline at end of file
diff --git a/altair/vegalite/__init__.py b/altair/vegalite/__init__.py
index c67625d..690d64e 100644
--- a/altair/vegalite/__init__.py
+++ b/altair/vegalite/__init__.py
@@ -1,2 +1,2 @@
-# flake8: noqa
-from .v4 import *
+# ruff: noqa
+from .v5 import *
diff --git a/altair/vegalite/api.py b/altair/vegalite/api.py
index b70e2bd..6602986 100644
--- a/altair/vegalite/api.py
+++ b/altair/vegalite/api.py
@@ -1,2 +1,2 @@
-# flake8: noqa
-from .v4.api import *
+# ruff: noqa
+from .v5.api import *
diff --git a/altair/vegalite/schema.py b/altair/vegalite/schema.py
index fd7f3df..e94c3d1 100644
--- a/altair/vegalite/schema.py
+++ b/altair/vegalite/schema.py
@@ -1,3 +1,3 @@
 """Altair schema wrappers"""
-# flake8: noqa
-from .v4.schema import *
+# ruff: noqa
+from .v5.schema import *
diff --git a/altair/vegalite/tests/__init__.py b/altair/vegalite/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/altair/vegalite/v3/__init__.py b/altair/vegalite/v3/__init__.py
deleted file mode 100644
index 82755a5..0000000
--- a/altair/vegalite/v3/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# flake8: noqa
-from .schema import *
-from .api import *
-from ._deprecated import *
-
-from ...datasets import list_datasets, load_dataset
-
-from ... import expr
-from ...expr import datum
-
-from .display import VegaLite, renderers
-
-from .data import (
-    MaxRowsError,
-    pipe,
-    curry,
-    limit_rows,
-    sample,
-    to_json,
-    to_csv,
-    to_values,
-    default_data_transformer,
-    data_transformers,
-)
diff --git a/altair/vegalite/v3/_deprecated.py b/altair/vegalite/v3/_deprecated.py
deleted file mode 100644
index 16a957a..0000000
--- a/altair/vegalite/v3/_deprecated.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from ...utils.deprecation import _deprecate
-from . import channels
-
-# Deprecated classes (see https://github.com/altair-viz/altair/issues/1474).
-# TODO: Remove these in Altair 3.2.
-Fillopacity = _deprecate(channels.FillOpacity, "Fillopacity")
-FillopacityValue = _deprecate(channels.FillOpacityValue, "FillopacityValue")
-Strokeopacity = _deprecate(channels.StrokeOpacity, "Strokeopacity")
-StrokeopacityValue = _deprecate(channels.StrokeOpacityValue, "StrokeopacityValue")
-Strokewidth = _deprecate(channels.StrokeWidth, "Strokewidth")
-StrokewidthValue = _deprecate(channels.StrokeWidthValue, "StrokewidthValue")
-Xerror = _deprecate(channels.XError, "Xerror")
-XerrorValue = _deprecate(channels.XErrorValue, "XerrorValue")
-Xerror2 = _deprecate(channels.XError2, "Xerror2")
-Xerror2Value = _deprecate(channels.XError2Value, "Xerror2Value")
-Yerror = _deprecate(channels.YError, "Yerror")
-YerrorValue = _deprecate(channels.YErrorValue, "YerrorValue")
-Yerror2 = _deprecate(channels.YError2, "Yerror2")
-Yerror2Value = _deprecate(channels.YError2Value, "Yerror2Value")
diff --git a/altair/vegalite/v3/api.py b/altair/vegalite/v3/api.py
deleted file mode 100644
index 6473d41..0000000
--- a/altair/vegalite/v3/api.py
+++ /dev/null
@@ -1,2177 +0,0 @@
-import warnings
-
-import hashlib
-import io
-import json
-import jsonschema
-import pandas as pd
-from toolz.curried import pipe as _pipe
-
-from .schema import core, channels, mixins, Undefined, SCHEMA_URL
-
-from .data import data_transformers
-from ... import utils, expr
-from .display import renderers, VEGALITE_VERSION, VEGAEMBED_VERSION, VEGA_VERSION
-from .theme import themes
-
-
-# ------------------------------------------------------------------------
-# Data Utilities
-def _dataset_name(values):
-    """Generate a unique hash of the data
-
-    Parameters
-    ----------
-    values : list or dict
-        A list/dict representation of data values.
-
-    Returns
-    -------
-    name : string
-        A unique name generated from the hash of the values.
-    """
-    if isinstance(values, core.InlineDataset):
-        values = values.to_dict()
-    values_json = json.dumps(values, sort_keys=True)
-    hsh = hashlib.md5(values_json.encode()).hexdigest()
-    return "data-" + hsh
-
-
-def _consolidate_data(data, context):
-    """If data is specified inline, then move it to context['datasets']
-
-    This function will modify context in-place, and return a new version of data
-    """
-    values = Undefined
-    kwds = {}
-
-    if isinstance(data, core.InlineData):
-        if data.name is Undefined and data.values is not Undefined:
-            values = data.values
-            kwds = {"format": data.format}
-
-    elif isinstance(data, dict):
-        if "name" not in data and "values" in data:
-            values = data["values"]
-            kwds = {k: v for k, v in data.items() if k != "values"}
-
-    if values is not Undefined:
-        name = _dataset_name(values)
-        data = core.NamedData(name=name, **kwds)
-        context.setdefault("datasets", {})[name] = values
-
-    return data
-
-
-def _prepare_data(data, context=None):
-    """Convert input data to data for use within schema
-
-    Parameters
-    ----------
-    data :
-        The input dataset in the form of a DataFrame, dictionary, altair data
-        object, or other type that is recognized by the data transformers.
-    context : dict (optional)
-        The to_dict context in which the data is being prepared. This is used
-        to keep track of information that needs to be passed up and down the
-        recursive serialization routine, such as global named datasets.
-    """
-    if data is Undefined:
-        return data
-
-    # convert dataframes  or objects with __geo_interface__ to dict
-    if isinstance(data, pd.DataFrame) or hasattr(data, "__geo_interface__"):
-        data = _pipe(data, data_transformers.get())
-
-    # convert string input to a URLData
-    if isinstance(data, str):
-        data = core.UrlData(data)
-
-    # consolidate inline data to top-level datasets
-    if context is not None and data_transformers.consolidate_datasets:
-        data = _consolidate_data(data, context)
-
-    # if data is still not a recognized type, then return
-    if not isinstance(data, (dict, core.Data)):
-        warnings.warn("data of type {} not recognized".format(type(data)))
-
-    return data
-
-
-# ------------------------------------------------------------------------
-# Aliases & specializations
-Bin = core.BinParams
-
-
-@utils.use_signature(core.LookupData)
-class LookupData(core.LookupData):
-    def to_dict(self, *args, **kwargs):
-        """Convert the chart to a dictionary suitable for JSON export"""
-        copy = self.copy(deep=False)
-        copy.data = _prepare_data(copy.data, kwargs.get("context"))
-        return super(LookupData, copy).to_dict(*args, **kwargs)
-
-
-@utils.use_signature(core.FacetMapping)
-class FacetMapping(core.FacetMapping):
-    _class_is_valid_at_instantiation = False
-
-    def to_dict(self, *args, **kwargs):
-        copy = self.copy(deep=False)
-        context = kwargs.get("context", {})
-        data = context.get("data", None)
-        if isinstance(self.row, str):
-            copy.row = core.FacetFieldDef(**utils.parse_shorthand(self.row, data))
-        if isinstance(self.column, str):
-            copy.column = core.FacetFieldDef(**utils.parse_shorthand(self.column, data))
-        return super(FacetMapping, copy).to_dict(*args, **kwargs)
-
-
-# ------------------------------------------------------------------------
-# Encoding will contain channel objects that aren't valid at instantiation
-core.FacetedEncoding._class_is_valid_at_instantiation = False
-
-# ------------------------------------------------------------------------
-# These are parameters that are valid at the top level, but are not valid
-# for specs that are within a composite chart
-# (layer, hconcat, vconcat, facet, repeat)
-TOPLEVEL_ONLY_KEYS = {"background", "config", "autosize", "padding", "$schema"}
-
-
-def _get_channels_mapping():
-    mapping = {}
-    for attr in dir(channels):
-        cls = getattr(channels, attr)
-        if isinstance(cls, type) and issubclass(cls, core.SchemaBase):
-            mapping[cls] = attr.replace("Value", "").lower()
-    return mapping
-
-
-# -------------------------------------------------------------------------
-# Tools for working with selections
-class Selection(object):
-    """A Selection object"""
-
-    _counter = 0
-
-    @classmethod
-    def _get_name(cls):
-        cls._counter += 1
-        return "selector{:03d}".format(cls._counter)
-
-    def __init__(self, name, selection):
-        if name is None:
-            name = self._get_name()
-        self.name = name
-        self.selection = selection
-
-    def __repr__(self):
-        return "Selection({0!r}, {1})".format(self.name, self.selection)
-
-    def ref(self):
-        return self.to_dict()
-
-    def to_dict(self):
-        return {
-            "selection": self.name.to_dict()
-            if hasattr(self.name, "to_dict")
-            else self.name
-        }
-
-    def __invert__(self):
-        return Selection(core.SelectionNot(**{"not": self.name}), self.selection)
-
-    def __and__(self, other):
-        if isinstance(other, Selection):
-            other = other.name
-        return Selection(
-            core.SelectionAnd(**{"and": [self.name, other]}), self.selection
-        )
-
-    def __or__(self, other):
-        if isinstance(other, Selection):
-            other = other.name
-        return Selection(core.SelectionOr(**{"or": [self.name, other]}), self.selection)
-
-    def __getattr__(self, field_name):
-        if field_name.startswith("__") and field_name.endswith("__"):
-            raise AttributeError(field_name)
-        return expr.core.GetAttrExpression(self.name, field_name)
-
-    def __getitem__(self, field_name):
-        return expr.core.GetItemExpression(self.name, field_name)
-
-
-# ------------------------------------------------------------------------
-# Top-Level Functions
-
-
-def value(value, **kwargs):
-    """Specify a value for use in an encoding"""
-    return dict(value=value, **kwargs)
-
-
-def selection(name=None, type=Undefined, **kwds):
-    """Create a named selection.
-
-    Parameters
-    ----------
-    name : string (optional)
-        The name of the selection. If not specified, a unique name will be
-        created.
-    type : string
-        The type of the selection: one of ["interval", "single", or "multi"]
-    **kwds :
-        additional keywords will be used to construct a SelectionDef instance
-        that controls the selection.
-
-    Returns
-    -------
-    selection: Selection
-        The selection object that can be used in chart creation.
-    """
-    return Selection(name, core.SelectionDef(type=type, **kwds))
-
-
-@utils.use_signature(core.IntervalSelection)
-def selection_interval(**kwargs):
-    """Create a selection with type='interval'"""
-    return selection(type="interval", **kwargs)
-
-
-@utils.use_signature(core.MultiSelection)
-def selection_multi(**kwargs):
-    """Create a selection with type='multi'"""
-    return selection(type="multi", **kwargs)
-
-
-@utils.use_signature(core.SingleSelection)
-def selection_single(**kwargs):
-    """Create a selection with type='single'"""
-    return selection(type="single", **kwargs)
-
-
-@utils.use_signature(core.Binding)
-def binding(input, **kwargs):
-    """A generic binding"""
-    return core.Binding(input=input, **kwargs)
-
-
-@utils.use_signature(core.BindCheckbox)
-def binding_checkbox(**kwargs):
-    """A checkbox binding"""
-    return core.BindCheckbox(input="checkbox", **kwargs)
-
-
-@utils.use_signature(core.BindRadioSelect)
-def binding_radio(**kwargs):
-    """A radio button binding"""
-    return core.BindRadioSelect(input="radio", **kwargs)
-
-
-@utils.use_signature(core.BindRadioSelect)
-def binding_select(**kwargs):
-    """A select binding"""
-    return core.BindRadioSelect(input="select", **kwargs)
-
-
-@utils.use_signature(core.BindRange)
-def binding_range(**kwargs):
-    """A range binding"""
-    return core.BindRange(input="range", **kwargs)
-
-
-def condition(predicate, if_true, if_false, **kwargs):
-    """A conditional attribute or encoding
-
-    Parameters
-    ----------
-    predicate: Selection, LogicalOperandPredicate, expr.Expression, dict, or string
-        the selection predicate or test predicate for the condition.
-        if a string is passed, it will be treated as a test operand.
-    if_true:
-        the spec or object to use if the selection predicate is true
-    if_false:
-        the spec or object to use if the selection predicate is false
-    **kwargs:
-        additional keyword args are added to the resulting dict
-
-    Returns
-    -------
-    spec: dict or VegaLiteSchema
-        the spec that describes the condition
-    """
-    test_predicates = (str, expr.Expression, core.LogicalOperandPredicate)
-
-    if isinstance(predicate, Selection):
-        condition = {"selection": predicate.name}
-    elif isinstance(predicate, core.SelectionOperand):
-        condition = {"selection": predicate}
-    elif isinstance(predicate, test_predicates):
-        condition = {"test": predicate}
-    elif isinstance(predicate, dict):
-        condition = predicate
-    else:
-        raise NotImplementedError(
-            "condition predicate of type {}" "".format(type(predicate))
-        )
-
-    if isinstance(if_true, core.SchemaBase):
-        # convert to dict for now; the from_dict call below will wrap this
-        # dict in the appropriate schema
-        if_true = if_true.to_dict()
-    elif isinstance(if_true, str):
-        if_true = {"shorthand": if_true}
-        if_true.update(kwargs)
-    condition.update(if_true)
-
-    if isinstance(if_false, core.SchemaBase):
-        # For the selection, the channel definitions all allow selections
-        # already. So use this SchemaBase wrapper if possible.
-        selection = if_false.copy()
-        selection.condition = condition
-    elif isinstance(if_false, str):
-        selection = {"condition": condition, "shorthand": if_false}
-        selection.update(kwargs)
-    else:
-        selection = dict(condition=condition, **if_false)
-
-    return selection
-
-
-# --------------------------------------------------------------------
-# Top-level objects
-
-
-class TopLevelMixin(mixins.ConfigMethodMixin):
-    """Mixin for top-level chart objects such as Chart, LayeredChart, etc."""
-
-    _class_is_valid_at_instantiation = False
-
-    def to_dict(self, *args, **kwargs):
-        """Convert the chart to a dictionary suitable for JSON export"""
-        # We make use of three context markers:
-        # - 'data' points to the data that should be referenced for column type
-        #   inference.
-        # - 'top_level' is a boolean flag that is assumed to be true; if it's
-        #   true then a "$schema" arg is added to the dict.
-        # - 'datasets' is a dict of named datasets that should be inserted
-        #   in the top-level object
-
-        # note: not a deep copy because we want datasets and data arguments to
-        # be passed by reference
-        context = kwargs.get("context", {}).copy()
-        context.setdefault("datasets", {})
-        is_top_level = context.get("top_level", True)
-
-        copy = self.copy(deep=False)
-        original_data = getattr(copy, "data", Undefined)
-        copy.data = _prepare_data(original_data, context)
-
-        if original_data is not Undefined:
-            context["data"] = original_data
-
-        # remaining to_dict calls are not at top level
-        context["top_level"] = False
-        kwargs["context"] = context
-
-        try:
-            dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)
-        except jsonschema.ValidationError:
-            dct = None
-
-        # If we hit an error, then re-convert with validate='deep' to get
-        # a more useful traceback. We don't do this by default because it's
-        # much slower in the case that there are no errors.
-        if dct is None:
-            kwargs["validate"] = "deep"
-            dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)
-
-        # TODO: following entries are added after validation. Should they be validated?
-        if is_top_level:
-            # since this is top-level we add $schema if it's missing
-            if "$schema" not in dct:
-                dct["$schema"] = SCHEMA_URL
-
-            # apply theme from theme registry
-            the_theme = themes.get()
-            dct = utils.update_nested(the_theme(), dct, copy=True)
-
-            # update datasets
-            if context["datasets"]:
-                dct.setdefault("datasets", {}).update(context["datasets"])
-
-        return dct
-
-    def to_html(
-        self,
-        base_url="https://cdn.jsdelivr.net/npm/",
-        output_div="vis",
-        embed_options=None,
-        json_kwds=None,
-        fullhtml=True,
-        requirejs=False,
-    ):
-        return utils.spec_to_html(
-            self.to_dict(),
-            mode="vega-lite",
-            vegalite_version=VEGALITE_VERSION,
-            vegaembed_version=VEGAEMBED_VERSION,
-            vega_version=VEGA_VERSION,
-            base_url=base_url,
-            output_div=output_div,
-            embed_options=embed_options,
-            json_kwds=json_kwds,
-            fullhtml=fullhtml,
-            requirejs=requirejs,
-        )
-
-    @utils.deprecation.deprecated(
-        "Chart.savechart is deprecated in favor of Chart.save"
-    )
-    def savechart(self, fp, format=None, **kwargs):
-        """Save a chart to file in a variety of formats
-
-        Supported formats are json, html, png, svg
-
-        Parameters
-        ----------
-        fp : string filename or file-like object
-            file in which to write the chart.
-        format : string (optional)
-            the format to write: one of ['json', 'html', 'png', 'svg'].
-            If not specified, the format will be determined from the filename.
-        **kwargs :
-            Additional keyword arguments are passed to the output method
-            associated with the specified format.
-
-        """
-        return self.save(fp, format=None, **kwargs)
-
-    def save(
-        self,
-        fp,
-        format=None,
-        override_data_transformer=True,
-        scale_factor=1.0,
-        vegalite_version=VEGALITE_VERSION,
-        vega_version=VEGA_VERSION,
-        vegaembed_version=VEGAEMBED_VERSION,
-        **kwargs,
-    ):
-        """Save a chart to file in a variety of formats
-
-        Supported formats are json, html, png, svg, pdf; the last three require
-        the altair_saver package to be installed.
-
-        Parameters
-        ----------
-        fp : string filename or file-like object
-            file in which to write the chart.
-        format : string (optional)
-            the format to write: one of ['json', 'html', 'png', 'svg'].
-            If not specified, the format will be determined from the filename.
-        override_data_transformer : boolean (optional)
-            If True (default), then the save action will be done with
-            the MaxRowsError disabled. If False, then do not change the data
-            transformer.
-        scale_factor : float
-            For svg or png formats, scale the image by this factor when saving.
-            This can be used to control the size or resolution of the output.
-            Default is 1.0
-        **kwargs :
-            Additional keyword arguments are passed to the output method
-            associated with the specified format.
-
-        """
-        from ...utils.save import save
-
-        kwds = dict(
-            chart=self,
-            fp=fp,
-            format=format,
-            scale_factor=scale_factor,
-            vegalite_version=vegalite_version,
-            vega_version=vega_version,
-            vegaembed_version=vegaembed_version,
-            **kwargs,
-        )
-
-        # By default we override the data transformer. This makes it so
-        # that save() will succeed even for large datasets that would
-        # normally trigger a MaxRowsError
-        if override_data_transformer:
-            with data_transformers.disable_max_rows():
-                result = save(**kwds)
-        else:
-            result = save(**kwds)
-        return result
-
-    # Fallback for when rendering fails; the full repr is too long to be
-    # useful in nearly all cases.
-    def __repr__(self):
-        return "alt.{}(...)".format(self.__class__.__name__)
-
-    # Layering and stacking
-    def __add__(self, other):
-        if not isinstance(other, TopLevelMixin):
-            raise ValueError("Only Chart objects can be layered.")
-        return layer(self, other)
-
-    def __and__(self, other):
-        if not isinstance(other, TopLevelMixin):
-            raise ValueError("Only Chart objects can be concatenated.")
-        return vconcat(self, other)
-
-    def __or__(self, other):
-        if not isinstance(other, TopLevelMixin):
-            raise ValueError("Only Chart objects can be concatenated.")
-        return hconcat(self, other)
-
-    def repeat(
-        self,
-        repeat=Undefined,
-        row=Undefined,
-        column=Undefined,
-        columns=Undefined,
-        **kwargs,
-    ):
-        """Return a RepeatChart built from the chart
-
-        Fields within the chart can be set to correspond to the row or
-        column using `alt.repeat('row')` and `alt.repeat('column')`.
-
-        Parameters
-        ----------
-        repeat : list
-            a list of data column names to be repeated. This cannot be
-            used along with the ``row`` or ``column`` argument.
-        row : list
-            a list of data column names to be mapped to the row facet
-        column : list
-            a list of data column names to be mapped to the column facet
-        columns : int
-            the maximum number of columns before wrapping. Only referenced
-            if ``repeat`` is specified.
-        **kwargs :
-            additional keywords passed to RepeatChart.
-
-        Returns
-        -------
-        chart : RepeatChart
-            a repeated chart.
-        """
-        repeat_specified = repeat is not Undefined
-        rowcol_specified = row is not Undefined or column is not Undefined
-
-        if repeat_specified and rowcol_specified:
-            raise ValueError(
-                "repeat argument cannot be combined with row/column argument."
-            )
-
-        if repeat_specified:
-            repeat = repeat
-        else:
-            repeat = core.RepeatMapping(row=row, column=column)
-
-        return RepeatChart(spec=self, repeat=repeat, columns=columns, **kwargs)
-
-    def properties(self, **kwargs):
-        """Set top-level properties of the Chart.
-
-        Argument names and types are the same as class initialization.
-        """
-        copy = self.copy(deep=False)
-        for key, val in kwargs.items():
-            if key == "selection" and isinstance(val, Selection):
-                # For backward compatibility with old selection interface.
-                setattr(copy, key, {val.name: val.selection})
-            else:
-                # Don't validate data, because it hasn't been processed.
-                if key != "data":
-                    self.validate_property(key, val)
-                setattr(copy, key, val)
-        return copy
-
-    def project(
-        self,
-        type="mercator",
-        center=Undefined,
-        clipAngle=Undefined,
-        clipExtent=Undefined,
-        coefficient=Undefined,
-        distance=Undefined,
-        fraction=Undefined,
-        lobes=Undefined,
-        parallel=Undefined,
-        precision=Undefined,
-        radius=Undefined,
-        ratio=Undefined,
-        reflectX=Undefined,
-        reflectY=Undefined,
-        rotate=Undefined,
-        scale=Undefined,
-        spacing=Undefined,
-        tilt=Undefined,
-        translate=Undefined,
-        **kwds,
-    ):
-        """Add a geographic projection to the chart.
-
-        This is generally used either with ``mark_geoshape`` or with the
-        ``latitude``/``longitude`` encodings.
-
-        Available projection types are
-        ['albers', 'albersUsa', 'azimuthalEqualArea', 'azimuthalEquidistant',
-        'conicConformal', 'conicEqualArea', 'conicEquidistant', 'equalEarth', 'equirectangular',
-        'gnomonic', 'identity', 'mercator', 'orthographic', 'stereographic', 'transverseMercator']
-
-        Attributes
-        ----------
-        type : ProjectionType
-            The cartographic projection to use. This value is case-insensitive, for example
-            `"albers"` and `"Albers"` indicate the same projection type. You can find all valid
-            projection types [in the
-            documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).
-
-            **Default value:** `mercator`
-        center : List(float)
-            Sets the projection’s center to the specified center, a two-element array of
-            longitude and latitude in degrees.
-
-            **Default value:** `[0, 0]`
-        clipAngle : float
-            Sets the projection’s clipping circle radius to the specified angle in degrees. If
-            `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting
-            rather than small-circle clipping.
-        clipExtent : List(List(float))
-            Sets the projection’s viewport clip extent to the specified bounds in pixels. The
-            extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the
-            left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the
-            bottom. If `null`, no viewport clipping is performed.
-        coefficient : float
-
-        distance : float
-
-        fraction : float
-
-        lobes : float
-
-        parallel : float
-
-        precision : Mapping(required=[length])
-            Sets the threshold for the projection’s [adaptive
-            resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels.
-            This value corresponds to the [Douglas–Peucker
-            distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm).
-             If precision is not specified, returns the projection’s current resampling
-            precision which defaults to `√0.5 ≅ 0.70710…`.
-        radius : float
-
-        ratio : float
-
-        reflectX : boolean
-
-        reflectY : boolean
-
-        rotate : List(float)
-            Sets the projection’s three-axis rotation to the specified angles, which must be a
-            two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the
-            rotation angles in degrees about each spherical axis. (These correspond to yaw,
-            pitch and roll.)
-
-            **Default value:** `[0, 0, 0]`
-        scale : float
-            Sets the projection's scale (zoom) value, overriding automatic fitting.
-
-        spacing : float
-
-        tilt : float
-
-        translate : List(float)
-            Sets the projection's translation (pan) value, overriding automatic fitting.
-
-        """
-        projection = core.Projection(
-            center=center,
-            clipAngle=clipAngle,
-            clipExtent=clipExtent,
-            coefficient=coefficient,
-            distance=distance,
-            fraction=fraction,
-            lobes=lobes,
-            parallel=parallel,
-            precision=precision,
-            radius=radius,
-            ratio=ratio,
-            reflectX=reflectX,
-            reflectY=reflectY,
-            rotate=rotate,
-            scale=scale,
-            spacing=spacing,
-            tilt=tilt,
-            translate=translate,
-            type=type,
-            **kwds,
-        )
-        return self.properties(projection=projection)
-
-    def _add_transform(self, *transforms):
-        """Copy the chart and add specified transforms to chart.transform"""
-        copy = self.copy(deep=["transform"])
-        if copy.transform is Undefined:
-            copy.transform = []
-        copy.transform.extend(transforms)
-        return copy
-
-    def transform_aggregate(self, aggregate=Undefined, groupby=Undefined, **kwds):
-        """
-        Add an AggregateTransform to the schema.
-
-        Parameters
-        ----------
-        aggregate : List(:class:`AggregatedFieldDef`)
-            Array of objects that define fields to aggregate.
-        groupby : List(string)
-            The data fields to group by. If not specified, a single group containing all data
-            objects will be used.
-        **kwds :
-            additional keywords are converted to aggregates using standard
-            shorthand parsing.
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        Examples
-        --------
-        The aggregate transform allows you to specify transforms directly using
-        the same shorthand syntax as used in encodings:
-
-        >>> import altair as alt
-        >>> chart1 = alt.Chart().transform_aggregate(
-        ...     mean_acc='mean(Acceleration)',
-        ...     groupby=['Origin']
-        ... )
-        >>> print(chart1.transform[0].to_json())  # doctest: +NORMALIZE_WHITESPACE
-        {
-          "aggregate": [
-            {
-              "as": "mean_acc",
-              "field": "Acceleration",
-              "op": "mean"
-            }
-          ],
-          "groupby": [
-            "Origin"
-          ]
-        }
-
-        It also supports including AggregatedFieldDef instances or dicts directly,
-        so you can create the above transform like this:
-
-        >>> chart2 = alt.Chart().transform_aggregate(
-        ...     [alt.AggregatedFieldDef(field='Acceleration', op='mean',
-        ...                             **{'as': 'mean_acc'})],
-        ...     groupby=['Origin']
-        ... )
-        >>> chart2.transform == chart1.transform
-        True
-
-        See Also
-        --------
-        alt.AggregateTransform : underlying transform object
-
-        """
-        if aggregate is Undefined:
-            aggregate = []
-        for key, val in kwds.items():
-            parsed = utils.parse_shorthand(val)
-            dct = {
-                "as": key,
-                "field": parsed.get("field", Undefined),
-                "op": parsed.get("aggregate", Undefined),
-            }
-            aggregate.append(core.AggregatedFieldDef(**dct))
-        return self._add_transform(
-            core.AggregateTransform(aggregate=aggregate, groupby=groupby)
-        )
-
-    def transform_bin(self, as_=Undefined, field=Undefined, bin=True, **kwargs):
-        """
-        Add a BinTransform to the schema.
-
-        Parameters
-        ----------
-        as_ : anyOf(string, List(string))
-            The output fields at which to write the start and end bin values.
-        bin : anyOf(boolean, :class:`BinParams`)
-            An object indicating bin properties, or simply ``true`` for using default bin
-            parameters.
-        field : string
-            The data field to bin.
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        Examples
-        --------
-        >>> import altair as alt
-        >>> chart = alt.Chart().transform_bin("x_binned", "x")
-        >>> chart.transform[0]
-        BinTransform({
-          as: 'x_binned',
-          bin: True,
-          field: 'x'
-        })
-
-        >>> chart = alt.Chart().transform_bin("x_binned", "x",
-        ...                                   bin=alt.Bin(maxbins=10))
-        >>> chart.transform[0]
-        BinTransform({
-          as: 'x_binned',
-          bin: BinParams({
-            maxbins: 10
-          }),
-          field: 'x'
-        })
-
-        See Also
-        --------
-        alt.BinTransform : underlying transform object
-
-        """
-        if as_ is not Undefined:
-            if "as" in kwargs:
-                raise ValueError(
-                    "transform_bin: both 'as_' and 'as' passed as arguments."
-                )
-            kwargs["as"] = as_
-        kwargs["bin"] = bin
-        kwargs["field"] = field
-        return self._add_transform(core.BinTransform(**kwargs))
-
-    def transform_calculate(self, as_=Undefined, calculate=Undefined, **kwargs):
-        """
-        Add a CalculateTransform to the schema.
-
-        Parameters
-        ----------
-        as_ : string
-            The field for storing the computed formula value.
-        calculate : string or alt.expr expression
-            A `expression <https://vega.github.io/vega-lite/docs/types.html#expression>`__
-            string. Use the variable ``datum`` to refer to the current data object.
-        **kwargs
-            transforms can also be passed by keyword argument; see Examples
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        Examples
-        --------
-        >>> import altair as alt
-        >>> from altair import datum, expr
-
-        >>> chart = alt.Chart().transform_calculate(y = 2 * expr.sin(datum.x))
-        >>> chart.transform[0]
-        CalculateTransform({
-          as: 'y',
-          calculate: (2 * sin(datum.x))
-        })
-
-        It's also possible to pass the ``CalculateTransform`` arguments directly:
-
-        >>> kwds = {'as': 'y', 'calculate': '2 * sin(datum.x)'}
-        >>> chart = alt.Chart().transform_calculate(**kwds)
-        >>> chart.transform[0]
-        CalculateTransform({
-          as: 'y',
-          calculate: '2 * sin(datum.x)'
-        })
-
-        As the first form is easier to write and understand, that is the
-        recommended method.
-
-        See Also
-        --------
-        alt.CalculateTransform : underlying transform object
-        """
-        if as_ is Undefined:
-            as_ = kwargs.pop("as", Undefined)
-        else:
-            if "as" in kwargs:
-                raise ValueError(
-                    "transform_calculate: both 'as_' and 'as' passed as arguments."
-                )
-        if as_ is not Undefined or calculate is not Undefined:
-            dct = {"as": as_, "calculate": calculate}
-            self = self._add_transform(core.CalculateTransform(**dct))
-        for as_, calculate in kwargs.items():
-            dct = {"as": as_, "calculate": calculate}
-            self = self._add_transform(core.CalculateTransform(**dct))
-        return self
-
-    def transform_impute(
-        self,
-        impute,
-        key,
-        frame=Undefined,
-        groupby=Undefined,
-        keyvals=Undefined,
-        method=Undefined,
-        value=Undefined,
-    ):
-        """
-        Add an ImputeTransform to the schema.
-
-        Parameters
-        ----------
-        impute : string
-            The data field for which the missing values should be imputed.
-        key : string
-            A key field that uniquely identifies data objects within a group.
-            Missing key values (those occurring in the data but not in the current group) will
-            be imputed.
-        frame : List(anyOf(None, float))
-            A frame specification as a two-element array used to control the window over which
-            the specified method is applied. The array entries should either be a number
-            indicating the offset from the current data object, or null to indicate unbounded
-            rows preceding or following the current data object.  For example, the value ``[-5,
-            5]`` indicates that the window should include five objects preceding and five
-            objects following the current object.
-            **Default value:** :  ``[null, null]`` indicating that the window includes all
-            objects.
-        groupby : List(string)
-            An optional array of fields by which to group the values.
-            Imputation will then be performed on a per-group basis.
-        keyvals : anyOf(List(Mapping(required=[])), :class:`ImputeSequence`)
-            Defines the key values that should be considered for imputation.
-            An array of key values or an object defining a `number sequence
-            <https://vega.github.io/vega-lite/docs/impute.html#sequence-def>`__.
-            If provided, this will be used in addition to the key values observed within the
-            input data.  If not provided, the values will be derived from all unique values of
-            the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if
-            the y-field is imputed, or vice versa.
-            If there is no impute grouping, this property *must* be specified.
-        method : :class:`ImputeMethod`
-            The imputation method to use for the field value of imputed data objects.
-            One of ``value``, ``mean``, ``median``, ``max`` or ``min``.
-            **Default value:**  ``"value"``
-        value : Mapping(required=[])
-            The field value to use when the imputation ``method`` is ``"value"``.
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        See Also
-        --------
-        alt.ImputeTransform : underlying transform object
-        """
-        return self._add_transform(
-            core.ImputeTransform(
-                impute=impute,
-                key=key,
-                frame=frame,
-                groupby=groupby,
-                keyvals=keyvals,
-                method=method,
-                value=value,
-            )
-        )
-
-    def transform_joinaggregate(
-        self, joinaggregate=Undefined, groupby=Undefined, **kwargs
-    ):
-        """
-        Add a JoinAggregateTransform to the schema.
-
-        Parameters
-        ----------
-        joinaggregate : List(:class:`JoinAggregateFieldDef`)
-            The definition of the fields in the join aggregate, and what calculations to use.
-        groupby : List(string)
-            The data fields for partitioning the data objects into separate groups. If
-            unspecified, all data points will be in a single group.
-        **kwargs
-            joinaggregates can also be passed by keyword argument; see Examples.
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        Examples
-        --------
-        >>> import altair as alt
-        >>> chart = alt.Chart().transform_joinaggregate(x='sum(y)')
-        >>> chart.transform[0]
-        JoinAggregateTransform({
-          joinaggregate: [JoinAggregateFieldDef({
-            as: 'x',
-            field: 'y',
-            op: 'sum'
-          })]
-        })
-
-        See Also
-        --------
-        alt.JoinAggregateTransform : underlying transform object
-        """
-        if joinaggregate is Undefined:
-            joinaggregate = []
-        for key, val in kwargs.items():
-            parsed = utils.parse_shorthand(val)
-            dct = {
-                "as": key,
-                "field": parsed.get("field", Undefined),
-                "op": parsed.get("aggregate", Undefined),
-            }
-            joinaggregate.append(core.JoinAggregateFieldDef(**dct))
-        return self._add_transform(
-            core.JoinAggregateTransform(joinaggregate=joinaggregate, groupby=groupby)
-        )
-
-    def transform_filter(self, filter, **kwargs):
-        """
-        Add a FilterTransform to the schema.
-
-        Parameters
-        ----------
-        filter : a filter expression or :class:`LogicalOperandPredicate`
-            The `filter` property must be one of the predicate definitions:
-            (1) a string or alt.expr expression
-            (2) a range predicate
-            (3) a selection predicate
-            (4) a logical operand combining (1)-(3)
-            (5) a Selection object
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        See Also
-        --------
-        alt.FilterTransform : underlying transform object
-
-        """
-        if isinstance(filter, Selection):
-            filter = {"selection": filter.name}
-        elif isinstance(filter, core.SelectionOperand):
-            filter = {"selection": filter}
-        return self._add_transform(core.FilterTransform(filter=filter, **kwargs))
-
-    def transform_flatten(self, flatten, as_=Undefined):
-        """Add a FlattenTransform to the schema.
-
-        Parameters
-        ----------
-        flatten : List(string)
-            An array of one or more data fields containing arrays to flatten.
-            If multiple fields are specified, their array values should have a parallel
-            structure, ideally with the same length.
-            If the lengths of parallel arrays do not match,
-            the longest array will be used with ``null`` values added for missing entries.
-        as : List(string)
-            The output field names for extracted array values.
-            **Default value:** The field name of the corresponding array field
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        See Also
-        --------
-        alt.FlattenTransform : underlying transform object
-        """
-        return self._add_transform(
-            core.FlattenTransform(flatten=flatten, **{"as": as_})
-        )
-
-    def transform_fold(self, fold, as_=Undefined):
-        """Add a FoldTransform to the schema.
-
-        Parameters
-        ----------
-        fold : List(string)
-            An array of data fields indicating the properties to fold.
-        as : [string, string]
-            The output field names for the key and value properties produced by the fold
-            transform. Default: ``["key", "value"]``
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        See Also
-        --------
-        alt.FoldTransform : underlying transform object
-        """
-        return self._add_transform(core.FoldTransform(fold=fold, **{"as": as_}))
-
-    def transform_lookup(
-        self,
-        as_=Undefined,
-        from_=Undefined,
-        lookup=Undefined,
-        default=Undefined,
-        **kwargs,
-    ):
-        """Add a LookupTransform to the schema
-
-        Attributes
-        ----------
-        as_ : anyOf(string, List(string))
-            The field or fields for storing the computed formula value.
-            If ``from.fields`` is specified, the transform will use the same names for ``as``.
-            If ``from.fields`` is not specified, ``as`` has to be a string and we put the whole
-            object into the data under the specified name.
-        from_ : :class:`LookupData`
-            Secondary data reference.
-        lookup : string
-            Key in primary data source.
-        default : string
-            The default value to use if lookup fails. **Default value:** ``null``
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        See Also
-        --------
-        alt.LookupTransform : underlying transform object
-        """
-        if as_ is not Undefined:
-            if "as" in kwargs:
-                raise ValueError(
-                    "transform_lookup: both 'as_' and 'as' passed as arguments."
-                )
-            kwargs["as"] = as_
-        if from_ is not Undefined:
-            if "from" in kwargs:
-                raise ValueError(
-                    "transform_lookup: both 'from_' and 'from' passed as arguments."
-                )
-            kwargs["from"] = from_
-        kwargs["lookup"] = lookup
-        kwargs["default"] = default
-        return self._add_transform(core.LookupTransform(**kwargs))
-
-    def transform_sample(self, sample=1000):
-        """
-        Add a SampleTransform to the schema.
-
-        Parameters
-        ----------
-        sample : float
-            The maximum number of data objects to include in the sample. Default: 1000.
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        See Also
-        --------
-        alt.SampleTransform : underlying transform object
-        """
-        return self._add_transform(core.SampleTransform(sample))
-
-    def transform_stack(self, as_, stack, groupby, offset=Undefined, sort=Undefined):
-        """
-        Add a StackTransform to the schema.
-
-        Parameters
-        ----------
-        as_ : anyOf(string, List(string))
-            Output field names. This can be either a string or an array of strings with
-            two elements denoting the name for the fields for stack start and stack end
-            respectively.
-            If a single string(eg."val") is provided, the end field will be "val_end".
-        stack : string
-            The field which is stacked.
-        groupby : List(string)
-            The data fields to group by.
-        offset : enum('zero', 'center', 'normalize')
-            Mode for stacking marks. Default: 'zero'.
-        sort : List(:class:`SortField`)
-            Field that determines the order of leaves in the stacked charts.
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        See Also
-        --------
-        alt.StackTransform : underlying transform object
-        """
-        return self._add_transform(
-            core.StackTransform(
-                stack=stack, groupby=groupby, offset=offset, sort=sort, **{"as": as_}
-            )
-        )
-
-    def transform_timeunit(
-        self, as_=Undefined, field=Undefined, timeUnit=Undefined, **kwargs
-    ):
-        """
-        Add a TimeUnitTransform to the schema.
-
-        Parameters
-        ----------
-        as_ : string
-            The output field to write the timeUnit value.
-        field : string
-            The data field to apply time unit.
-        timeUnit : :class:`TimeUnit`
-            The timeUnit.
-        **kwargs
-            transforms can also be passed by keyword argument; see Examples
-
-        Returns
-        -------
-        self : Chart object
-            returns chart to allow for chaining
-
-        Examples
-        --------
-        >>> import altair as alt
-        >>> from altair import datum, expr
-
-        >>> chart = alt.Chart().transform_timeunit(month='month(date)')
-        >>> chart.transform[0]
-        TimeUnitTransform({
-          as: 'month',
-          field: 'date',
-          timeUnit: 'month'
-        })
-
-        It's also possible to pass the ``TimeUnitTransform`` arguments directly;
-        this is most useful in cases where the desired field name is not a
-        valid python identifier:
-
-        >>> kwds = {'as': 'month', 'timeUnit': 'month', 'field': 'The Month'}
-        >>> chart = alt.Chart().transform_timeunit(**kwds)
-        >>> chart.transform[0]
-        TimeUnitTransform({
-          as: 'month',
-          field: 'The Month',
-          timeUnit: 'month'
-        })
-
-        As the first form is easier to write and understand, that is the
-        recommended method.
-
-        See Also
-        --------
-        alt.TimeUnitTransform : underlying transform object
-
-        """
-        if as_ is Undefined:
-            as_ = kwargs.pop("as", Undefined)
-        else:
-            if "as" in kwargs:
-                raise ValueError(
-                    "transform_timeunit: both 'as_' and 'as' passed as arguments."
-                )
-        if as_ is not Undefined:
-            dct = {"as": as_, "timeUnit": timeUnit, "field": field}
-            self = self._add_transform(core.TimeUnitTransform(**dct))
-        for as_, shorthand in kwargs.items():
-            dct = utils.parse_shorthand(
-                shorthand,
-                parse_timeunits=True,
-                parse_aggregates=False,
-                parse_types=False,
-            )
-            dct.pop("type", None)
-            dct["as"] = as_
-            if "timeUnit" not in dct:
-                raise ValueError("'{}' must include a valid timeUnit".format(shorthand))
-            self = self._add_transform(core.TimeUnitTransform(**dct))
-        return self
-
-    def transform_window(
-        self,
-        window=Undefined,
-        frame=Undefined,
-        groupby=Undefined,
-        ignorePeers=Undefined,
-        sort=Undefined,
-        **kwargs,
-    ):
-        """Add a WindowTransform to the schema
-
-        Parameters
-        ----------
-        window : List(:class:`WindowFieldDef`)
-            The definition of the fields in the window, and what calculations to use.
-        frame : List(anyOf(None, float))
-            A frame specification as a two-element array indicating how the sliding window
-            should proceed. The array entries should either be a number indicating the offset
-            from the current data object, or null to indicate unbounded rows preceding or
-            following the current data object. The default value is ``[null, 0]``, indicating
-            that the sliding window includes the current object and all preceding objects. The
-            value ``[-5, 5]`` indicates that the window should include five objects preceding
-            and five objects following the current object. Finally, ``[null, null]`` indicates
-            that the window frame should always include all data objects. The only operators
-            affected are the aggregation operations and the ``first_value``, ``last_value``, and
-            ``nth_value`` window operations. The other window operations are not affected by
-            this.
-
-            **Default value:** :  ``[null, 0]`` (includes the current object and all preceding
-            objects)
-        groupby : List(string)
-            The data fields for partitioning the data objects into separate windows. If
-            unspecified, all data points will be in a single group.
-        ignorePeers : boolean
-            Indicates if the sliding window frame should ignore peer values. (Peer values are
-            those considered identical by the sort criteria). The default is false, causing the
-            window frame to expand to include all peer values. If set to true, the window frame
-            will be defined by offset values only. This setting only affects those operations
-            that depend on the window frame, namely aggregation operations and the first_value,
-            last_value, and nth_value window operations.
-
-            **Default value:** ``false``
-        sort : List(:class:`SortField`)
-            A sort field definition for sorting data objects within a window. If two data
-            objects are considered equal by the comparator, they are considered “peer” values of
-            equal rank. If sort is not specified, the order is undefined: data objects are
-            processed in the order they are observed and none are considered peers (the
-            ignorePeers parameter is ignored and treated as if set to ``true`` ).
-        **kwargs
-            transforms can also be passed by keyword argument; see Examples
-
-        Examples
-        --------
-        A cumulative line chart
-
-        >>> import altair as alt
-        >>> import numpy as np
-        >>> import pandas as pd
-        >>> data = pd.DataFrame({'x': np.arange(100),
-        ...                      'y': np.random.randn(100)})
-        >>> chart = alt.Chart(data).mark_line().encode(
-        ...     x='x:Q',
-        ...     y='ycuml:Q'
-        ... ).transform_window(
-        ...     ycuml='sum(y)'
-        ... )
-        >>> chart.transform[0]
-        WindowTransform({
-          window: [WindowFieldDef({
-            as: 'ycuml',
-            field: 'y',
-            op: 'sum'
-          })]
-        })
-
-        """
-        if kwargs:
-            if window is Undefined:
-                window = []
-            for as_, shorthand in kwargs.items():
-                kwds = {"as": as_}
-                kwds.update(
-                    utils.parse_shorthand(
-                        shorthand,
-                        parse_aggregates=False,
-                        parse_window_ops=True,
-                        parse_timeunits=False,
-                        parse_types=False,
-                    )
-                )
-                window.append(core.WindowFieldDef(**kwds))
-
-        return self._add_transform(
-            core.WindowTransform(
-                window=window,
-                frame=frame,
-                groupby=groupby,
-                ignorePeers=ignorePeers,
-                sort=sort,
-            )
-        )
-
-    # Display-related methods
-
-    def _repr_mimebundle_(self, include=None, exclude=None):
-        """Return a MIME bundle for display in Jupyter frontends."""
-        # Catch errors explicitly to get around issues in Jupyter frontend
-        # see https://github.com/ipython/ipython/issues/11038
-        try:
-            dct = self.to_dict()
-        except Exception:
-            utils.display_traceback(in_ipython=True)
-            return {}
-        else:
-            return renderers.get()(dct)
-
-    def display(self, renderer=Undefined, theme=Undefined, actions=Undefined, **kwargs):
-        """Display chart in Jupyter notebook or JupyterLab
-
-        Parameters are passed as options to vega-embed within supported frontends.
-        See https://github.com/vega/vega-embed#options for details.
-
-        Parameters
-        ----------
-        renderer : string ('canvas' or 'svg')
-            The renderer to use
-        theme : string
-            The Vega theme name to use; see https://github.com/vega/vega-themes
-        actions : bool or dict
-            Specify whether action links ("Open In Vega Editor", etc.) are
-            included in the view.
-        **kwargs :
-            Additional parameters are also passed to vega-embed as options.
-
-        """
-        from IPython.display import display
-
-        if renderer is not Undefined:
-            kwargs["renderer"] = renderer
-        if theme is not Undefined:
-            kwargs["theme"] = theme
-        if actions is not Undefined:
-            kwargs["actions"] = actions
-
-        if kwargs:
-            options = renderers.options.copy()
-            options["embed_options"] = options.get("embed_options", {}).copy()
-            options["embed_options"].update(kwargs)
-            with renderers.enable(**options):
-                display(self)
-        else:
-            display(self)
-
-    def serve(
-        self,
-        ip="127.0.0.1",
-        port=8888,
-        n_retries=50,
-        files=None,
-        jupyter_warning=True,
-        open_browser=True,
-        http_server=None,
-        **kwargs,
-    ):
-        """Open a browser window and display a rendering of the chart
-
-        Parameters
-        ----------
-        html : string
-            HTML to serve
-        ip : string (default = '127.0.0.1')
-            ip address at which the HTML will be served.
-        port : int (default = 8888)
-            the port at which to serve the HTML
-        n_retries : int (default = 50)
-            the number of nearby ports to search if the specified port
-            is already in use.
-        files : dictionary (optional)
-            dictionary of extra content to serve
-        jupyter_warning : bool (optional)
-            if True (default), then print a warning if this is used
-            within the Jupyter notebook
-        open_browser : bool (optional)
-            if True (default), then open a web browser to the given HTML
-        http_server : class (optional)
-            optionally specify an HTTPServer class to use for showing the
-            figure. The default is Python's basic HTTPServer.
-        **kwargs :
-            additional keyword arguments passed to the save() method
-
-        """
-        from ...utils.server import serve
-
-        html = io.StringIO()
-        self.save(html, format="html", **kwargs)
-        html.seek(0)
-
-        serve(
-            html.read(),
-            ip=ip,
-            port=port,
-            n_retries=n_retries,
-            files=files,
-            jupyter_warning=jupyter_warning,
-            open_browser=open_browser,
-            http_server=http_server,
-        )
-
-    @utils.use_signature(core.Resolve)
-    def _set_resolve(self, **kwargs):
-        """Copy the chart and update the resolve property with kwargs"""
-        if not hasattr(self, "resolve"):
-            raise ValueError(
-                "{} object has no attribute " "'resolve'".format(self.__class__)
-            )
-        copy = self.copy(deep=["resolve"])
-        if copy.resolve is Undefined:
-            copy.resolve = core.Resolve()
-        for key, val in kwargs.items():
-            copy.resolve[key] = val
-        return copy
-
-    @utils.use_signature(core.AxisResolveMap)
-    def resolve_axis(self, *args, **kwargs):
-        return self._set_resolve(axis=core.AxisResolveMap(*args, **kwargs))
-
-    @utils.use_signature(core.LegendResolveMap)
-    def resolve_legend(self, *args, **kwargs):
-        return self._set_resolve(legend=core.LegendResolveMap(*args, **kwargs))
-
-    @utils.use_signature(core.ScaleResolveMap)
-    def resolve_scale(self, *args, **kwargs):
-        return self._set_resolve(scale=core.ScaleResolveMap(*args, **kwargs))
-
-
-class _EncodingMixin(object):
-    @utils.use_signature(core.FacetedEncoding)
-    def encode(self, *args, **kwargs):
-        # Convert args to kwargs based on their types.
-        kwargs = utils.infer_encoding_types(args, kwargs, channels)
-
-        # get a copy of the dict representation of the previous encoding
-        copy = self.copy(deep=["encoding"])
-        encoding = copy._get("encoding", {})
-        if isinstance(encoding, core.VegaLiteSchema):
-            encoding = {k: v for k, v in encoding._kwds.items() if v is not Undefined}
-
-        # update with the new encodings, and apply them to the copy
-        encoding.update(kwargs)
-        copy.encoding = core.FacetedEncoding(**encoding)
-        return copy
-
-    def facet(
-        self,
-        facet=Undefined,
-        row=Undefined,
-        column=Undefined,
-        data=Undefined,
-        columns=Undefined,
-        **kwargs,
-    ):
-        """Create a facet chart from the current chart.
-
-        Faceted charts require data to be specified at the top level; if data
-        is not specified, the data from the current chart will be used at the
-        top level.
-
-        Parameters
-        ----------
-        facet : string or alt.Facet (optional)
-            The data column to use as an encoding for a wrapped facet.
-            If specified, then neither row nor column may be specified.
-        column : string or alt.Column (optional)
-            The data column to use as an encoding for a column facet.
-            May be combined with row argument, but not with facet argument.
-        row : string or alt.Column (optional)
-            The data column to use as an encoding for a row facet.
-            May be combined with column argument, but not with facet argument.
-        data : string or dataframe (optional)
-            The dataset to use for faceting. If not supplied, then data must
-            be specified in the top-level chart that calls this method.
-        columns : integer
-            the maximum number of columns for a wrapped facet.
-
-        Returns
-        -------
-        self :
-            for chaining
-        """
-        facet_specified = facet is not Undefined
-        rowcol_specified = row is not Undefined or column is not Undefined
-
-        if facet_specified and rowcol_specified:
-            raise ValueError(
-                "facet argument cannot be combined with row/column argument."
-            )
-
-        if data is Undefined:
-            if self.data is Undefined:
-                raise ValueError(
-                    "Facet charts require data to be specified at the top level."
-                )
-            self = self.copy(deep=False)
-            data, self.data = self.data, Undefined
-
-        if facet_specified:
-            if isinstance(facet, str):
-                facet = channels.Facet(facet)
-        else:
-            facet = FacetMapping(row=row, column=column)
-
-        return FacetChart(spec=self, facet=facet, data=data, columns=columns, **kwargs)
-
-
-class Chart(
-    TopLevelMixin, _EncodingMixin, mixins.MarkMethodMixin, core.TopLevelUnitSpec
-):
-    """Create a basic Altair/Vega-Lite chart.
-
-    Although it is possible to set all Chart properties as constructor attributes,
-    it is more idiomatic to use methods such as ``mark_point()``, ``encode()``,
-    ``transform_filter()``, ``properties()``, etc. See Altair's documentation
-    for details and examples: http://altair-viz.github.io/.
-
-    Attributes
-    ----------
-    data : Data
-        An object describing the data source
-    mark : AnyMark
-        A string describing the mark type (one of `"bar"`, `"circle"`, `"square"`, `"tick"`,
-         `"line"`, * `"area"`, `"point"`, `"rule"`, `"geoshape"`, and `"text"`) or a
-         MarkDef object.
-    encoding : FacetedEncoding
-        A key-value mapping between encoding channels and definition of fields.
-    autosize : anyOf(AutosizeType, AutoSizeParams)
-        Sets how the visualization size should be determined. If a string, should be one of
-        `"pad"`, `"fit"` or `"none"`. Object values can additionally specify parameters for
-        content sizing and automatic resizing. `"fit"` is only supported for single and
-        layered views that don't use `rangeStep`.  __Default value__: `pad`
-    background : string
-        CSS color property to use as the background of visualization.
-
-        **Default value:** none (transparent)
-    config : Config
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    description : string
-        Description of this mark for commenting purpose.
-    height : float
-        The height of a visualization.
-    name : string
-        Name of the visualization for later reference.
-    padding : Padding
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides. If an
-        object, the value should have the format `{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}` to specify padding for each side of the visualization.  __Default
-        value__: `5`
-    projection : Projection
-        An object defining properties of geographic projection.  Works with `"geoshape"`
-        marks and `"point"` or `"line"` marks that have a channel (one or more of `"X"`,
-        `"X2"`, `"Y"`, `"Y2"`) with type `"latitude"`, or `"longitude"`.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
-    title : anyOf(string, TitleParams)
-        Title for the plot.
-    transform : List(Transform)
-        An array of data transformations such as filter and new field calculation.
-    width : float
-        The width of a visualization.
-    """
-
-    def __init__(
-        self,
-        data=Undefined,
-        encoding=Undefined,
-        mark=Undefined,
-        width=Undefined,
-        height=Undefined,
-        **kwargs,
-    ):
-        super(Chart, self).__init__(
-            data=data,
-            encoding=encoding,
-            mark=mark,
-            width=width,
-            height=height,
-            **kwargs,
-        )
-
-    @classmethod
-    def from_dict(cls, dct, validate=True):
-        """Construct class from a dictionary representation
-
-        Parameters
-        ----------
-        dct : dictionary
-            The dict from which to construct the class
-        validate : boolean
-            If True (default), then validate the input against the schema.
-
-        Returns
-        -------
-        obj : Chart object
-            The wrapped schema
-
-        Raises
-        ------
-        jsonschema.ValidationError :
-            if validate=True and dct does not conform to the schema
-        """
-        for class_ in TopLevelMixin.__subclasses__():
-            if class_ is Chart:
-                class_ = super(Chart, cls)
-            try:
-                return class_.from_dict(dct, validate=validate)
-            except jsonschema.ValidationError:
-                pass
-
-        # As a last resort, try using the Root vegalite object
-        return core.Root.from_dict(dct, validate)
-
-    def add_selection(self, *selections):
-        """Add one or more selections to the chart."""
-        if not selections:
-            return self
-        copy = self.copy(deep=["selection"])
-        if copy.selection is Undefined:
-            copy.selection = {}
-
-        for s in selections:
-            copy.selection[s.name] = s.selection
-        return copy
-
-    def interactive(self, name=None, bind_x=True, bind_y=True):
-        """Make chart axes scales interactive
-
-        Parameters
-        ----------
-        name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
-        bind_x : boolean, default True
-            If true, then bind the interactive scales to the x-axis
-        bind_y : boolean, default True
-            If true, then bind the interactive scales to the y-axis
-
-        Returns
-        -------
-        chart :
-            copy of self, with interactive axes added
-
-        """
-        encodings = []
-        if bind_x:
-            encodings.append("x")
-        if bind_y:
-            encodings.append("y")
-        return self.add_selection(
-            selection_interval(bind="scales", encodings=encodings)
-        )
-
-
-def _check_if_valid_subspec(spec, classname):
-    """Check if the spec is a valid sub-spec.
-
-    If it is not, then raise a ValueError
-    """
-    err = (
-        'Objects with "{0}" attribute cannot be used within {1}. '
-        "Consider defining the {0} attribute in the {1} object instead."
-    )
-
-    if not isinstance(spec, (core.SchemaBase, dict)):
-        raise ValueError("Only chart objects can be used in {0}.".format(classname))
-    for attr in TOPLEVEL_ONLY_KEYS:
-        if isinstance(spec, core.SchemaBase):
-            val = getattr(spec, attr, Undefined)
-        else:
-            val = spec.get(attr, Undefined)
-        if val is not Undefined:
-            raise ValueError(err.format(attr, classname))
-
-
-def _check_if_can_be_layered(spec):
-    """Check if the spec can be layered."""
-
-    def _get(spec, attr):
-        if isinstance(spec, core.SchemaBase):
-            return spec._get(attr)
-        else:
-            return spec.get(attr, Undefined)
-
-    encoding = _get(spec, "encoding")
-    if encoding is not Undefined:
-        for channel in ["row", "column", "facet"]:
-            if _get(encoding, channel) is not Undefined:
-                raise ValueError("Faceted charts cannot be layered.")
-    if isinstance(spec, (Chart, LayerChart)):
-        return
-
-    if not isinstance(spec, (core.SchemaBase, dict)):
-        raise ValueError("Only chart objects can be layered.")
-    if _get(spec, "facet") is not Undefined:
-        raise ValueError("Faceted charts cannot be layered.")
-    if isinstance(spec, FacetChart) or _get(spec, "facet") is not Undefined:
-        raise ValueError("Faceted charts cannot be layered.")
-    if isinstance(spec, RepeatChart) or _get(spec, "repeat") is not Undefined:
-        raise ValueError("Repeat charts cannot be layered.")
-    if isinstance(spec, ConcatChart) or _get(spec, "concat") is not Undefined:
-        raise ValueError("Concatenated charts cannot be layered.")
-    if isinstance(spec, HConcatChart) or _get(spec, "hconcat") is not Undefined:
-        raise ValueError("Concatenated charts cannot be layered.")
-    if isinstance(spec, VConcatChart) or _get(spec, "vconcat") is not Undefined:
-        raise ValueError("Concatenated charts cannot be layered.")
-
-
-@utils.use_signature(core.TopLevelRepeatSpec)
-class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec):
-    """A chart repeated across rows and columns with small changes"""
-
-    def __init__(self, data=Undefined, spec=Undefined, repeat=Undefined, **kwargs):
-        _check_if_valid_subspec(spec, "RepeatChart")
-        super(RepeatChart, self).__init__(data=data, spec=spec, repeat=repeat, **kwargs)
-
-    def interactive(self, name=None, bind_x=True, bind_y=True):
-        """Make chart axes scales interactive
-
-        Parameters
-        ----------
-        name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
-        bind_x : boolean, default True
-            If true, then bind the interactive scales to the x-axis
-        bind_y : boolean, default True
-            If true, then bind the interactive scales to the y-axis
-
-        Returns
-        -------
-        chart :
-            copy of self, with interactive axes added
-
-        """
-        copy = self.copy(deep=False)
-        copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y)
-        return copy
-
-    def add_selection(self, *selections):
-        """Add one or more selections to the chart."""
-        if not selections or self.spec is Undefined:
-            return self
-        copy = self.copy()
-        copy.spec = copy.spec.add_selection(*selections)
-        return copy
-
-
-def repeat(repeater="repeat"):
-    """Tie a channel to the row or column within a repeated chart
-
-    The output of this should be passed to the ``field`` attribute of
-    a channel.
-
-    Parameters
-    ----------
-    repeater : {'row'|'column'|'repeat'}
-        The repeater to tie the field to. Default is 'repeat'.
-
-    Returns
-    -------
-    repeat : RepeatRef object
-    """
-    if repeater not in ["row", "column", "repeat"]:
-        raise ValueError("repeater must be one of ['row', 'column', 'repeat']")
-    return core.RepeatRef(repeat=repeater)
-
-
-@utils.use_signature(core.TopLevelConcatSpec)
-class ConcatChart(TopLevelMixin, core.TopLevelConcatSpec):
-    """A chart with horizontally-concatenated facets"""
-
-    def __init__(self, data=Undefined, concat=(), columns=Undefined, **kwargs):
-        # TODO: move common data to top level?
-        for spec in concat:
-            _check_if_valid_subspec(spec, "ConcatChart")
-        super(ConcatChart, self).__init__(
-            data=data, concat=list(concat), columns=columns, **kwargs
-        )
-        self.data, self.concat = _combine_subchart_data(self.data, self.concat)
-
-    def __ior__(self, other):
-        _check_if_valid_subspec(other, "ConcatChart")
-        self.concat.append(other)
-        self.data, self.concat = _combine_subchart_data(self.data, self.concat)
-        return self
-
-    def __or__(self, other):
-        copy = self.copy(deep=["concat"])
-        copy |= other
-        return copy
-
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.concat:
-            return self
-        copy = self.copy()
-        copy.concat = [chart.add_selection(*selections) for chart in copy.concat]
-        return copy
-
-
-def concat(*charts, **kwargs):
-    """Concatenate charts horizontally"""
-    return ConcatChart(concat=charts, **kwargs)
-
-
-@utils.use_signature(core.TopLevelHConcatSpec)
-class HConcatChart(TopLevelMixin, core.TopLevelHConcatSpec):
-    """A chart with horizontally-concatenated facets"""
-
-    def __init__(self, data=Undefined, hconcat=(), **kwargs):
-        # TODO: move common data to top level?
-        for spec in hconcat:
-            _check_if_valid_subspec(spec, "HConcatChart")
-        super(HConcatChart, self).__init__(data=data, hconcat=list(hconcat), **kwargs)
-        self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat)
-
-    def __ior__(self, other):
-        _check_if_valid_subspec(other, "HConcatChart")
-        self.hconcat.append(other)
-        self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat)
-        return self
-
-    def __or__(self, other):
-        copy = self.copy(deep=["hconcat"])
-        copy |= other
-        return copy
-
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.hconcat:
-            return self
-        copy = self.copy()
-        copy.hconcat = [chart.add_selection(*selections) for chart in copy.hconcat]
-        return copy
-
-
-def hconcat(*charts, **kwargs):
-    """Concatenate charts horizontally"""
-    return HConcatChart(hconcat=charts, **kwargs)
-
-
-@utils.use_signature(core.TopLevelVConcatSpec)
-class VConcatChart(TopLevelMixin, core.TopLevelVConcatSpec):
-    """A chart with vertically-concatenated facets"""
-
-    def __init__(self, data=Undefined, vconcat=(), **kwargs):
-        # TODO: move common data to top level?
-        for spec in vconcat:
-            _check_if_valid_subspec(spec, "VConcatChart")
-        super(VConcatChart, self).__init__(data=data, vconcat=list(vconcat), **kwargs)
-        self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat)
-
-    def __iand__(self, other):
-        _check_if_valid_subspec(other, "VConcatChart")
-        self.vconcat.append(other)
-        self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat)
-        return self
-
-    def __and__(self, other):
-        copy = self.copy(deep=["vconcat"])
-        copy &= other
-        return copy
-
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.vconcat:
-            return self
-        copy = self.copy()
-        copy.vconcat = [chart.add_selection(*selections) for chart in copy.vconcat]
-        return copy
-
-
-def vconcat(*charts, **kwargs):
-    """Concatenate charts vertically"""
-    return VConcatChart(vconcat=charts, **kwargs)
-
-
-@utils.use_signature(core.TopLevelLayerSpec)
-class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec):
-    """A Chart with layers within a single panel"""
-
-    def __init__(self, data=Undefined, layer=(), **kwargs):
-        # TODO: move common data to top level?
-        # TODO: check for conflicting interaction
-        for spec in layer:
-            _check_if_valid_subspec(spec, "LayerChart")
-            _check_if_can_be_layered(spec)
-        super(LayerChart, self).__init__(data=data, layer=list(layer), **kwargs)
-        self.data, self.layer = _combine_subchart_data(self.data, self.layer)
-
-    def __iadd__(self, other):
-        _check_if_valid_subspec(other, "LayerChart")
-        _check_if_can_be_layered(other)
-        self.layer.append(other)
-        self.data, self.layer = _combine_subchart_data(self.data, self.layer)
-        return self
-
-    def __add__(self, other):
-        copy = self.copy(deep=["layer"])
-        copy += other
-        return copy
-
-    def add_layers(self, *layers):
-        copy = self.copy(deep=["layer"])
-        for layer in layers:
-            copy += layer
-        return copy
-
-    def interactive(self, name=None, bind_x=True, bind_y=True):
-        """Make chart axes scales interactive
-
-        Parameters
-        ----------
-        name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
-        bind_x : boolean, default True
-            If true, then bind the interactive scales to the x-axis
-        bind_y : boolean, default True
-            If true, then bind the interactive scales to the y-axis
-
-        Returns
-        -------
-        chart :
-            copy of self, with interactive axes added
-
-        """
-        if not self.layer:
-            raise ValueError(
-                "LayerChart: cannot call interactive() until a " "layer is defined"
-            )
-        copy = self.copy(deep=["layer"])
-        copy.layer[0] = copy.layer[0].interactive(
-            name=name, bind_x=bind_x, bind_y=bind_y
-        )
-        return copy
-
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.layer:
-            return self
-        copy = self.copy()
-        copy.layer[0] = copy.layer[0].add_selection(*selections)
-        return copy
-
-
-def layer(*charts, **kwargs):
-    """layer multiple charts"""
-    return LayerChart(layer=charts, **kwargs)
-
-
-@utils.use_signature(core.TopLevelFacetSpec)
-class FacetChart(TopLevelMixin, core.TopLevelFacetSpec):
-    """A Chart with layers within a single panel"""
-
-    def __init__(self, data=Undefined, spec=Undefined, facet=Undefined, **kwargs):
-        _check_if_valid_subspec(spec, "FacetChart")
-        super(FacetChart, self).__init__(data=data, spec=spec, facet=facet, **kwargs)
-
-    def interactive(self, name=None, bind_x=True, bind_y=True):
-        """Make chart axes scales interactive
-
-        Parameters
-        ----------
-        name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
-        bind_x : boolean, default True
-            If true, then bind the interactive scales to the x-axis
-        bind_y : boolean, default True
-            If true, then bind the interactive scales to the y-axis
-
-        Returns
-        -------
-        chart :
-            copy of self, with interactive axes added
-
-        """
-        copy = self.copy(deep=False)
-        copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y)
-        return copy
-
-    def add_selection(self, *selections):
-        """Add one or more selections to the chart."""
-        if not selections or self.spec is Undefined:
-            return self
-        copy = self.copy()
-        copy.spec = copy.spec.add_selection(*selections)
-        return copy
-
-
-def topo_feature(url, feature, **kwargs):
-    """A convenience function for extracting features from a topojson url
-
-    Parameters
-    ----------
-    url : string
-        An URL from which to load the data set.
-
-    feature : string
-        The name of the TopoJSON object set to convert to a GeoJSON feature collection. For
-        example, in a map of the world, there may be an object set named `"countries"`.
-        Using the feature property, we can extract this set and generate a GeoJSON feature
-        object for each country.
-
-    **kwargs :
-        additional keywords passed to TopoDataFormat
-    """
-    return core.UrlData(
-        url=url, format=core.TopoDataFormat(type="topojson", feature=feature, **kwargs)
-    )
-
-
-def _combine_subchart_data(data, subcharts):
-    def remove_data(subchart):
-        if subchart.data is not Undefined:
-            subchart = subchart.copy()
-            subchart.data = Undefined
-        return subchart
-
-    if not subcharts:
-        # No subcharts = nothing to do.
-        pass
-    elif data is Undefined:
-        # Top level has no data; all subchart data must
-        # be identical to proceed.
-        subdata = subcharts[0].data
-        if subdata is not Undefined and all(c.data is subdata for c in subcharts):
-            data = subdata
-            subcharts = [remove_data(c) for c in subcharts]
-    else:
-        # Top level has data; subchart data must be either
-        # undefined or identical to proceed.
-        if all(c.data is Undefined or c.data is data for c in subcharts):
-            subcharts = [remove_data(c) for c in subcharts]
-
-    return data, subcharts
-
-
-@utils.use_signature(core.SequenceParams)
-def sequence(start, stop=None, step=Undefined, as_=Undefined, **kwds):
-    """Sequence generator."""
-    if stop is None:
-        start, stop = 0, start
-    params = core.SequenceParams(start=start, stop=stop, step=step, **{"as": as_})
-    return core.SequenceGenerator(sequence=params, **kwds)
-
-
-@utils.use_signature(core.GraticuleParams)
-def graticule(**kwds):
-    """Graticule generator."""
-    if not kwds:
-        # graticule: True indicates default parameters
-        graticule = True
-    else:
-        graticule = core.GraticuleParams(**kwds)
-    return core.GraticuleGenerator(graticule=graticule)
-
-
-def sphere():
-    """Sphere generator."""
-    return core.SphereGenerator(sphere=True)
diff --git a/altair/vegalite/v3/data.py b/altair/vegalite/v3/data.py
deleted file mode 100644
index dcc8a0e..0000000
--- a/altair/vegalite/v3/data.py
+++ /dev/null
@@ -1,43 +0,0 @@
-from ..data import (
-    MaxRowsError,
-    curry,
-    default_data_transformer,
-    limit_rows,
-    pipe,
-    sample,
-    to_csv,
-    to_json,
-    to_values,
-    DataTransformerRegistry,
-)
-
-
-# ==============================================================================
-# VegaLite 3 data transformers
-# ==============================================================================
-
-
-ENTRY_POINT_GROUP = "altair.vegalite.v3.data_transformer"  # type: str
-
-
-data_transformers = DataTransformerRegistry(
-    entry_point_group=ENTRY_POINT_GROUP
-)  # type: DataTransformerRegistry
-data_transformers.register("default", default_data_transformer)
-data_transformers.register("json", to_json)
-data_transformers.register("csv", to_csv)
-data_transformers.enable("default")
-
-
-__all__ = (
-    "MaxRowsError",
-    "curry",
-    "default_data_transformer",
-    "limit_rows",
-    "pipe",
-    "sample",
-    "to_csv",
-    "to_json",
-    "to_values",
-    "data_transformers",
-)
diff --git a/altair/vegalite/v3/display.py b/altair/vegalite/v3/display.py
deleted file mode 100644
index 9196731..0000000
--- a/altair/vegalite/v3/display.py
+++ /dev/null
@@ -1,146 +0,0 @@
-import os
-
-from ...utils.mimebundle import spec_to_mimebundle
-from ..display import Displayable
-from ..display import default_renderer_base
-from ..display import json_renderer_base
-from ..display import RendererRegistry
-from ..display import HTMLRenderer
-
-from .schema import SCHEMA_VERSION
-
-VEGALITE_VERSION = SCHEMA_VERSION.lstrip("v")
-VEGA_VERSION = "5"
-VEGAEMBED_VERSION = "5"
-
-
-# ==============================================================================
-# VegaLite v3 renderer logic
-# ==============================================================================
-
-
-# The MIME type for Vega-Lite 3.x releases.
-VEGALITE_MIME_TYPE = "application/vnd.vegalite.v3+json"  # type: str
-
-# The entry point group that can be used by other packages to declare other
-# renderers that will be auto-detected. Explicit registration is also
-# allowed by the PluginRegistery API.
-ENTRY_POINT_GROUP = "altair.vegalite.v3.renderer"  # type: str
-
-# The display message when rendering fails
-DEFAULT_DISPLAY = """\
-<VegaLite 3 object>
-
-If you see this message, it means the renderer has not been properly enabled
-for the frontend that you are using. For more information, see
-https://altair-viz.github.io/user_guide/troubleshooting.html
-"""
-
-renderers = RendererRegistry(entry_point_group=ENTRY_POINT_GROUP)
-
-here = os.path.dirname(os.path.realpath(__file__))
-
-
-def default_renderer(spec, **metadata):
-    return default_renderer_base(spec, VEGALITE_MIME_TYPE, DEFAULT_DISPLAY, **metadata)
-
-
-def json_renderer(spec, **metadata):
-    return json_renderer_base(spec, DEFAULT_DISPLAY, **metadata)
-
-
-def png_renderer(spec, **metadata):
-    return spec_to_mimebundle(
-        spec,
-        format="png",
-        mode="vega-lite",
-        vega_version=VEGA_VERSION,
-        vegaembed_version=VEGAEMBED_VERSION,
-        vegalite_version=VEGALITE_VERSION,
-        **metadata,
-    )
-
-
-def svg_renderer(spec, **metadata):
-    return spec_to_mimebundle(
-        spec,
-        format="svg",
-        mode="vega-lite",
-        vega_version=VEGA_VERSION,
-        vegaembed_version=VEGAEMBED_VERSION,
-        vegalite_version=VEGALITE_VERSION,
-        **metadata,
-    )
-
-
-colab_renderer = HTMLRenderer(
-    mode="vega-lite",
-    fullhtml=True,
-    requirejs=False,
-    output_div="altair-viz",
-    vega_version=VEGA_VERSION,
-    vegaembed_version=VEGAEMBED_VERSION,
-    vegalite_version=VEGALITE_VERSION,
-)
-
-zeppelin_renderer = HTMLRenderer(
-    mode="vega-lite",
-    fullhtml=True,
-    requirejs=False,
-    vega_version=VEGA_VERSION,
-    vegaembed_version=VEGAEMBED_VERSION,
-    vegalite_version=VEGALITE_VERSION,
-)
-
-kaggle_renderer = HTMLRenderer(
-    mode="vega-lite",
-    fullhtml=False,
-    requirejs=True,
-    vega_version=VEGA_VERSION,
-    vegaembed_version=VEGAEMBED_VERSION,
-    vegalite_version=VEGALITE_VERSION,
-)
-
-html_renderer = HTMLRenderer(
-    mode="vega-lite",
-    template="universal",
-    vega_version=VEGA_VERSION,
-    vegaembed_version=VEGAEMBED_VERSION,
-    vegalite_version=VEGALITE_VERSION,
-)
-
-renderers.register("default", default_renderer)
-renderers.register("html", html_renderer)
-renderers.register("jupyterlab", default_renderer)
-renderers.register("nteract", default_renderer)
-renderers.register("colab", colab_renderer)
-renderers.register("kaggle", kaggle_renderer)
-renderers.register("json", json_renderer)
-renderers.register("png", png_renderer)
-renderers.register("svg", svg_renderer)
-renderers.register("zeppelin", zeppelin_renderer)
-renderers.enable("default")
-
-
-class VegaLite(Displayable):
-    """An IPython/Jupyter display class for rendering VegaLite 3."""
-
-    renderers = renderers
-    schema_path = (__name__, "schema/vega-lite-schema.json")
-
-
-def vegalite(spec, validate=True):
-    """Render and optionally validate a VegaLite 3 spec.
-
-    This will use the currently enabled renderer to render the spec.
-
-    Parameters
-    ==========
-    spec: dict
-        A fully compliant VegaLite 3 spec, with the data portion fully processed.
-    validate: bool
-        Should the spec be validated against the VegaLite 3 schema?
-    """
-    from IPython.display import display
-
-    display(VegaLite(spec, validate=validate))
diff --git a/altair/vegalite/v3/schema/__init__.py b/altair/vegalite/v3/schema/__init__.py
deleted file mode 100644
index 519d895..0000000
--- a/altair/vegalite/v3/schema/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# flake8: noqa
-from .core import *
-from .channels import *
-SCHEMA_VERSION = 'v3.4.0'
-SCHEMA_URL = 'https://vega.github.io/schema/vega-lite/v3.4.0.json'
diff --git a/altair/vegalite/v3/schema/channels.py b/altair/vegalite/v3/schema/channels.py
deleted file mode 100644
index 26432fa..0000000
--- a/altair/vegalite/v3/schema/channels.py
+++ /dev/null
@@ -1,5324 +0,0 @@
-# The contents of this file are automatically written by
-# tools/generate_schema_wrapper.py. Do not modify directly.
-
-from . import core
-import pandas as pd
-from altair.utils.schemapi import Undefined
-from altair.utils import parse_shorthand
-
-
-class FieldChannelMixin(object):
-    def to_dict(self, validate=True, ignore=(), context=None):
-        context = context or {}
-        shorthand = self._get('shorthand')
-        field = self._get('field')
-
-        if shorthand is not Undefined and field is not Undefined:
-            raise ValueError("{} specifies both shorthand={} and field={}. "
-                             "".format(self.__class__.__name__, shorthand, field))
-
-        if isinstance(shorthand, (tuple, list)):
-            # If given a list of shorthands, then transform it to a list of classes
-            kwds = self._kwds.copy()
-            kwds.pop('shorthand')
-            return [self.__class__(sh, **kwds).to_dict(validate=validate, ignore=ignore, context=context)
-                    for sh in shorthand]
-
-        if shorthand is Undefined:
-            parsed = {}
-        elif isinstance(shorthand, str):
-            parsed = parse_shorthand(shorthand, data=context.get('data', None))
-            type_required = 'type' in self._kwds
-            type_in_shorthand = 'type' in parsed
-            type_defined_explicitly = self._get('type') is not Undefined
-            if not type_required:
-                # Secondary field names don't require a type argument in VegaLite 3+.
-                # We still parse it out of the shorthand, but drop it here.
-                parsed.pop('type', None)
-            elif not (type_in_shorthand or type_defined_explicitly):
-                if isinstance(context.get('data', None), pd.DataFrame):
-                    raise ValueError("{} encoding field is specified without a type; "
-                                     "the type cannot be inferred because it does not "
-                                     "match any column in the data.".format(shorthand))
-                else:
-                    raise ValueError("{} encoding field is specified without a type; "
-                                     "the type cannot be automatically inferred because "
-                                     "the data is not specified as a pandas.DataFrame."
-                                     "".format(shorthand))
-        else:
-            # Shorthand is not a string; we pass the definition to field,
-            # and do not do any parsing.
-            parsed = {'field': shorthand}
-
-        # Set shorthand to Undefined, because it's not part of the base schema.
-        self.shorthand = Undefined
-        self._kwds.update({k: v for k, v in parsed.items()
-                           if self._get(k) is Undefined})
-        return super(FieldChannelMixin, self).to_dict(
-            validate=validate,
-            ignore=ignore,
-            context=context
-        )
-
-
-class ValueChannelMixin(object):
-    def to_dict(self, validate=True, ignore=(), context=None):
-        context = context or {}
-        condition = getattr(self, 'condition', Undefined)
-        copy = self  # don't copy unless we need to
-        if condition is not Undefined:
-            if isinstance(condition, core.SchemaBase):
-                pass
-            elif 'field' in condition and 'type' not in condition:
-                kwds = parse_shorthand(condition['field'], context.get('data', None))
-                copy = self.copy(deep=['condition'])
-                copy.condition.update(kwds)
-        return super(ValueChannelMixin, copy).to_dict(validate=validate,
-                                                      ignore=ignore,
-                                                      context=context)
-
-
-class DatumChannelMixin(object):
-    def to_dict(self, validate=True, ignore=(), context=None):
-        context = context or {}
-        datum = getattr(self, 'datum', Undefined)
-        copy = self  # don't copy unless we need to
-        if datum is not Undefined:
-            if isinstance(datum, core.SchemaBase):
-                pass
-        return super(DatumChannelMixin, copy).to_dict(validate=validate,
-                                                      ignore=ignore,
-                                                      context=context)
-
-
-class Color(FieldChannelMixin, core.StringFieldDefWithCondition):
-    """Color schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "color"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Color, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                    condition=condition, field=field, legend=legend, scale=scale,
-                                    sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class ColorValue(ValueChannelMixin, core.StringValueDefWithCondition):
-    """ColorValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "color"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(ColorValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Column(FieldChannelMixin, core.FacetFieldDef):
-    """Column schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "column"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
-                 **kwds):
-        super(Column, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                     header=header, sort=sort, timeUnit=timeUnit, title=title,
-                                     type=type, **kwds)
-
-
-class Detail(FieldChannelMixin, core.FieldDefWithoutScale):
-    """Detail schema wrapper
-
-    Mapping(required=[shorthand])
-    Definition object for a data field, its type and transformation of an encoding channel.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "detail"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Detail, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                     timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class Facet(FieldChannelMixin, core.FacetFieldDef):
-    """Facet schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "facet"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
-                 **kwds):
-        super(Facet, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                    header=header, sort=sort, timeUnit=timeUnit, title=title, type=type,
-                                    **kwds)
-
-
-class Fill(FieldChannelMixin, core.StringFieldDefWithCondition):
-    """Fill schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fill"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Fill, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                   condition=condition, field=field, legend=legend, scale=scale,
-                                   sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class FillValue(ValueChannelMixin, core.StringValueDefWithCondition):
-    """FillValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fill"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(FillValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class FillOpacity(FieldChannelMixin, core.NumericFieldDefWithCondition):
-    """FillOpacity schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fillOpacity"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(FillOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                          condition=condition, field=field, legend=legend, scale=scale,
-                                          sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class FillOpacityValue(ValueChannelMixin, core.NumericValueDefWithCondition):
-    """FillOpacityValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fillOpacity"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(FillOpacityValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Href(FieldChannelMixin, core.TextFieldDefWithCondition):
-    """Href schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "href"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Href, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                   condition=condition, field=field, format=format,
-                                   formatType=formatType, timeUnit=timeUnit, title=title, type=type,
-                                   **kwds)
-
-
-class HrefValue(ValueChannelMixin, core.TextValueDefWithCondition):
-    """HrefValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`,
-    List(:class:`ConditionalValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : :class:`Value`
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "href"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(HrefValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Key(FieldChannelMixin, core.FieldDefWithoutScale):
-    """Key schema wrapper
-
-    Mapping(required=[shorthand])
-    Definition object for a data field, its type and transformation of an encoding channel.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "key"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Key, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                  timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class Latitude(FieldChannelMixin, core.LatLongFieldDef):
-    """Latitude schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : enum('quantitative')
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Latitude, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                       timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class LatitudeValue(ValueChannelMixin, core.NumberValueDef):
-    """LatitudeValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude"
-
-    def __init__(self, value, **kwds):
-        super(LatitudeValue, self).__init__(value=value, **kwds)
-
-
-class Latitude2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Latitude2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(Latitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                        timeUnit=timeUnit, title=title, **kwds)
-
-
-class Latitude2Value(ValueChannelMixin, core.NumberValueDef):
-    """Latitude2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude2"
-
-    def __init__(self, value, **kwds):
-        super(Latitude2Value, self).__init__(value=value, **kwds)
-
-
-class Longitude(FieldChannelMixin, core.LatLongFieldDef):
-    """Longitude schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : enum('quantitative')
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Longitude, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                        timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class LongitudeValue(ValueChannelMixin, core.NumberValueDef):
-    """LongitudeValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude"
-
-    def __init__(self, value, **kwds):
-        super(LongitudeValue, self).__init__(value=value, **kwds)
-
-
-class Longitude2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Longitude2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(Longitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                         timeUnit=timeUnit, title=title, **kwds)
-
-
-class Longitude2Value(ValueChannelMixin, core.NumberValueDef):
-    """Longitude2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude2"
-
-    def __init__(self, value, **kwds):
-        super(Longitude2Value, self).__init__(value=value, **kwds)
-
-
-class Opacity(FieldChannelMixin, core.NumericFieldDefWithCondition):
-    """Opacity schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "opacity"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Opacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                      condition=condition, field=field, legend=legend, scale=scale,
-                                      sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class OpacityValue(ValueChannelMixin, core.NumericValueDefWithCondition):
-    """OpacityValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "opacity"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(OpacityValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Order(FieldChannelMixin, core.OrderFieldDef):
-    """Order schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    sort : :class:`SortOrder`
-        The sort order. One of ``"ascending"`` (default) or ``"descending"``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "order"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Order, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                    sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class OrderValue(ValueChannelMixin, core.NumberValueDef):
-    """OrderValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "order"
-
-    def __init__(self, value, **kwds):
-        super(OrderValue, self).__init__(value=value, **kwds)
-
-
-class Row(FieldChannelMixin, core.FacetFieldDef):
-    """Row schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "row"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
-                 **kwds):
-        super(Row, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                  header=header, sort=sort, timeUnit=timeUnit, title=title, type=type,
-                                  **kwds)
-
-
-class Shape(FieldChannelMixin, core.ShapeFieldDefWithCondition):
-    """Shape schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`TypeForShape`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "shape"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Shape, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                    condition=condition, field=field, legend=legend, scale=scale,
-                                    sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class ShapeValue(ValueChannelMixin, core.ShapeValueDefWithCondition):
-    """ShapeValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`,
-    :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "shape"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(ShapeValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Size(FieldChannelMixin, core.NumericFieldDefWithCondition):
-    """Size schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "size"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Size, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                   condition=condition, field=field, legend=legend, scale=scale,
-                                   sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class SizeValue(ValueChannelMixin, core.NumericValueDefWithCondition):
-    """SizeValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "size"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(SizeValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Stroke(FieldChannelMixin, core.StringFieldDefWithCondition):
-    """Stroke schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "stroke"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Stroke, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                     condition=condition, field=field, legend=legend, scale=scale,
-                                     sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class StrokeValue(ValueChannelMixin, core.StringValueDefWithCondition):
-    """StrokeValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "stroke"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(StrokeValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class StrokeOpacity(FieldChannelMixin, core.NumericFieldDefWithCondition):
-    """StrokeOpacity schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeOpacity"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(StrokeOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                            condition=condition, field=field, legend=legend,
-                                            scale=scale, sort=sort, timeUnit=timeUnit, title=title,
-                                            type=type, **kwds)
-
-
-class StrokeOpacityValue(ValueChannelMixin, core.NumericValueDefWithCondition):
-    """StrokeOpacityValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeOpacity"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(StrokeOpacityValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class StrokeWidth(FieldChannelMixin, core.NumericFieldDefWithCondition):
-    """StrokeWidth schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeWidth"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(StrokeWidth, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                          condition=condition, field=field, legend=legend, scale=scale,
-                                          sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class StrokeWidthValue(ValueChannelMixin, core.NumericValueDefWithCondition):
-    """StrokeWidthValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeWidth"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(StrokeWidthValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Text(FieldChannelMixin, core.TextFieldDefWithCondition):
-    """Text schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "text"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Text, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                   condition=condition, field=field, format=format,
-                                   formatType=formatType, timeUnit=timeUnit, title=title, type=type,
-                                   **kwds)
-
-
-class TextValue(ValueChannelMixin, core.TextValueDefWithCondition):
-    """TextValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`,
-    List(:class:`ConditionalValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : :class:`Value`
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "text"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(TextValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Tooltip(FieldChannelMixin, core.TextFieldDefWithCondition):
-    """Tooltip schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "tooltip"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Tooltip, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin,
-                                      condition=condition, field=field, format=format,
-                                      formatType=formatType, timeUnit=timeUnit, title=title, type=type,
-                                      **kwds)
-
-
-class TooltipValue(ValueChannelMixin, core.TextValueDefWithCondition):
-    """TooltipValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`,
-    List(:class:`ConditionalValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : :class:`Value`
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "tooltip"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(TooltipValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class X(FieldChannelMixin, core.PositionFieldDef):
-    """X schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    axis : anyOf(:class:`Axis`, None)
-        An object defining properties of axis's gridlines, ticks and labels.
-        If ``null``, the axis for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `axis properties
-        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
-
-        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    impute : :class:`ImputeParams`
-        An object defining the properties of the Impute Operation to be applied.
-        The field value of the other positional channel is taken as ``key`` of the
-        ``Impute`` Operation.
-        The field of the ``color`` channel if specified is used as ``groupby`` of the
-        ``Impute`` Operation.
-
-        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked.
-        ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains.
-        For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values:
-
-
-        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
-          (for creating typical stacked
-          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
-        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
-          stacked bar and area charts
-          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-          :raw-html:`<br/>`
-        - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
-        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
-          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-          chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar`` or ``area`` ;
-        (2) the stacked measure channel (x or y) has a linear scale;
-        (3) At least one of non-position channels mapped to an unaggregated field that is
-        different from x and y.  Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, bin=Undefined,
-                 field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(X, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, bin=bin,
-                                field=field, impute=impute, scale=scale, sort=sort, stack=stack,
-                                timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class XValue(ValueChannelMixin, core.XValueDef):
-    """XValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, enum('width'))
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x"
-
-    def __init__(self, value, **kwds):
-        super(XValue, self).__init__(value=value, **kwds)
-
-
-class X2(FieldChannelMixin, core.SecondaryFieldDef):
-    """X2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(X2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                 timeUnit=timeUnit, title=title, **kwds)
-
-
-class X2Value(ValueChannelMixin, core.XValueDef):
-    """X2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, enum('width'))
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x2"
-
-    def __init__(self, value, **kwds):
-        super(X2Value, self).__init__(value=value, **kwds)
-
-
-class XError(FieldChannelMixin, core.SecondaryFieldDef):
-    """XError schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(XError, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                     timeUnit=timeUnit, title=title, **kwds)
-
-
-class XErrorValue(ValueChannelMixin, core.NumberValueDef):
-    """XErrorValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError"
-
-    def __init__(self, value, **kwds):
-        super(XErrorValue, self).__init__(value=value, **kwds)
-
-
-class XError2(FieldChannelMixin, core.SecondaryFieldDef):
-    """XError2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(XError2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                      timeUnit=timeUnit, title=title, **kwds)
-
-
-class XError2Value(ValueChannelMixin, core.NumberValueDef):
-    """XError2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError2"
-
-    def __init__(self, value, **kwds):
-        super(XError2Value, self).__init__(value=value, **kwds)
-
-
-class Y(FieldChannelMixin, core.PositionFieldDef):
-    """Y schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    axis : anyOf(:class:`Axis`, None)
-        An object defining properties of axis's gridlines, ticks and labels.
-        If ``null``, the axis for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `axis properties
-        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
-
-        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    impute : :class:`ImputeParams`
-        An object defining the properties of the Impute Operation to be applied.
-        The field value of the other positional channel is taken as ``key`` of the
-        ``Impute`` Operation.
-        The field of the ``color`` channel if specified is used as ``groupby`` of the
-        ``Impute`` Operation.
-
-        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked.
-        ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains.
-        For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values:
-
-
-        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
-          (for creating typical stacked
-          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
-        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
-          stacked bar and area charts
-          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-          :raw-html:`<br/>`
-        - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
-        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
-          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-          chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar`` or ``area`` ;
-        (2) the stacked measure channel (x or y) has a linear scale;
-        (3) At least one of non-position channels mapped to an unaggregated field that is
-        different from x and y.  Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, bin=Undefined,
-                 field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Y, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, bin=bin,
-                                field=field, impute=impute, scale=scale, sort=sort, stack=stack,
-                                timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class YValue(ValueChannelMixin, core.YValueDef):
-    """YValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, enum('height'))
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y"
-
-    def __init__(self, value, **kwds):
-        super(YValue, self).__init__(value=value, **kwds)
-
-
-class Y2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Y2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(Y2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                 timeUnit=timeUnit, title=title, **kwds)
-
-
-class Y2Value(ValueChannelMixin, core.YValueDef):
-    """Y2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, enum('height'))
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y2"
-
-    def __init__(self, value, **kwds):
-        super(Y2Value, self).__init__(value=value, **kwds)
-
-
-class YError(FieldChannelMixin, core.SecondaryFieldDef):
-    """YError schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(YError, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                     timeUnit=timeUnit, title=title, **kwds)
-
-
-class YErrorValue(ValueChannelMixin, core.NumberValueDef):
-    """YErrorValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError"
-
-    def __init__(self, value, **kwds):
-        super(YErrorValue, self).__init__(value=value, **kwds)
-
-
-class YError2(FieldChannelMixin, core.SecondaryFieldDef):
-    """YError2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(YError2, self).__init__(shorthand=shorthand, aggregate=aggregate, bin=bin, field=field,
-                                      timeUnit=timeUnit, title=title, **kwds)
-
-
-class YError2Value(ValueChannelMixin, core.NumberValueDef):
-    """YError2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError2"
-
-    def __init__(self, value, **kwds):
-        super(YError2Value, self).__init__(value=value, **kwds)
diff --git a/altair/vegalite/v3/schema/core.py b/altair/vegalite/v3/schema/core.py
deleted file mode 100644
index 7c101a7..0000000
--- a/altair/vegalite/v3/schema/core.py
+++ /dev/null
@@ -1,16039 +0,0 @@
-# The contents of this file are automatically written by
-# tools/generate_schema_wrapper.py. Do not modify directly.
-
-from altair.utils.schemapi import SchemaBase, Undefined, _subclasses
-
-import pkgutil
-import json
-
-def load_schema():
-    """Load the json schema associated with this module's functions"""
-    return json.loads(pkgutil.get_data(__name__, 'vega-lite-schema.json').decode('utf-8'))
-
-
-class VegaLiteSchema(SchemaBase):
-    _rootschema = load_schema()
-    @classmethod
-    def _default_wrapper_classes(cls):
-        return _subclasses(VegaLiteSchema)
-
-
-class Root(VegaLiteSchema):
-    """Root schema wrapper
-
-    anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`,
-    :class:`TopLevelRepeatSpec`, :class:`TopLevelConcatSpec`, :class:`TopLevelVConcatSpec`,
-    :class:`TopLevelHConcatSpec`)
-    A Vega-Lite top-level specification.
-    This is the root class for all Vega-Lite specifications.
-    (The json schema is generated from this type.)
-    """
-    _schema = VegaLiteSchema._rootschema
-
-    def __init__(self, *args, **kwds):
-        super(Root, self).__init__(*args, **kwds)
-
-
-class Aggregate(VegaLiteSchema):
-    """Aggregate schema wrapper
-
-    anyOf(:class:`AggregateOp`, :class:`ArgmaxDef`, :class:`ArgminDef`)
-    """
-    _schema = {'$ref': '#/definitions/Aggregate'}
-
-    def __init__(self, *args, **kwds):
-        super(Aggregate, self).__init__(*args, **kwds)
-
-
-class AggregateOp(Aggregate):
-    """AggregateOp schema wrapper
-
-    enum('argmax', 'argmin', 'average', 'count', 'distinct', 'max', 'mean', 'median', 'min',
-    'missing', 'q1', 'q3', 'ci0', 'ci1', 'stderr', 'stdev', 'stdevp', 'sum', 'valid', 'values',
-    'variance', 'variancep')
-    """
-    _schema = {'$ref': '#/definitions/AggregateOp'}
-
-    def __init__(self, *args):
-        super(AggregateOp, self).__init__(*args)
-
-
-class AggregatedFieldDef(VegaLiteSchema):
-    """AggregatedFieldDef schema wrapper
-
-    Mapping(required=[op, as])
-
-    Attributes
-    ----------
-
-    op : :class:`AggregateOp`
-        The aggregation operation to apply to the fields (e.g., sum, average or count).
-        See the `full list of supported aggregation operations
-        <https://vega.github.io/vega-lite/docs/aggregate.html#ops>`__
-        for more information.
-    field : :class:`FieldName`
-        The data field for which to compute aggregate function. This is required for all
-        aggregation operations except ``"count"``.
-    as : :class:`FieldName`
-        The output field names to use for each aggregated field.
-    """
-    _schema = {'$ref': '#/definitions/AggregatedFieldDef'}
-
-    def __init__(self, op=Undefined, field=Undefined, **kwds):
-        super(AggregatedFieldDef, self).__init__(op=op, field=field, **kwds)
-
-
-class Align(VegaLiteSchema):
-    """Align schema wrapper
-
-    enum('left', 'center', 'right')
-    """
-    _schema = {'$ref': '#/definitions/Align'}
-
-    def __init__(self, *args):
-        super(Align, self).__init__(*args)
-
-
-class AnyMark(VegaLiteSchema):
-    """AnyMark schema wrapper
-
-    anyOf(:class:`CompositeMark`, :class:`CompositeMarkDef`, :class:`Mark`, :class:`MarkDef`)
-    """
-    _schema = {'$ref': '#/definitions/AnyMark'}
-
-    def __init__(self, *args, **kwds):
-        super(AnyMark, self).__init__(*args, **kwds)
-
-
-class AreaConfig(VegaLiteSchema):
-    """AreaConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    line : anyOf(boolean, :class:`OverlayMarkDef`)
-        A flag for overlaying line on top of area marks, or an object defining the
-        properties of the overlayed lines.
-
-
-        If this value is an empty object ( ``{}`` ) or ``true``, lines with default
-        properties will be used.
-
-        If this value is ``false``, no lines would be automatically added to area marks.
-
-        **Default value:** ``false``.
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent'))
-        A flag for overlaying points on top of line or area marks, or an object defining the
-        properties of the overlayed points.
-
-
-        If this property is ``"transparent"``, transparent points will be used (for
-        enhancing tooltips and selections).
-
-        If this property is an empty object ( ``{}`` ) or ``true``, filled points with
-        default properties will be used.
-
-        If this property is ``false``, no points would be automatically added to line or
-        area marks.
-
-        **Default value:** ``false``.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/AreaConfig'}
-
-    def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined,
-                 cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined,
-                 ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined,
-                 font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined,
-                 height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined,
-                 line=Undefined, opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined,
-                 radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined,
-                 y2=Undefined, **kwds):
-        super(AreaConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color,
-                                         cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx,
-                                         dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity,
-                                         filled=filled, font=font, fontSize=fontSize,
-                                         fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                                         href=href, interpolate=interpolate, limit=limit, line=line,
-                                         opacity=opacity, order=order, orient=orient, point=point,
-                                         radius=radius, shape=shape, size=size, stroke=stroke,
-                                         strokeCap=strokeCap, strokeDash=strokeDash,
-                                         strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                                         strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                                         strokeWidth=strokeWidth, tension=tension, text=text,
-                                         theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y,
-                                         y2=y2, **kwds)
-
-
-class ArgmaxDef(Aggregate):
-    """ArgmaxDef schema wrapper
-
-    Mapping(required=[argmax])
-
-    Attributes
-    ----------
-
-    argmax : string
-
-    """
-    _schema = {'$ref': '#/definitions/ArgmaxDef'}
-
-    def __init__(self, argmax=Undefined, **kwds):
-        super(ArgmaxDef, self).__init__(argmax=argmax, **kwds)
-
-
-class ArgminDef(Aggregate):
-    """ArgminDef schema wrapper
-
-    Mapping(required=[argmin])
-
-    Attributes
-    ----------
-
-    argmin : string
-
-    """
-    _schema = {'$ref': '#/definitions/ArgminDef'}
-
-    def __init__(self, argmin=Undefined, **kwds):
-        super(ArgminDef, self).__init__(argmin=argmin, **kwds)
-
-
-class AutoSizeParams(VegaLiteSchema):
-    """AutoSizeParams schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    contains : enum('content', 'padding')
-        Determines how size calculation should be performed, one of ``"content"`` or
-        ``"padding"``. The default setting ( ``"content"`` ) interprets the width and height
-        settings as the data rectangle (plotting) dimensions, to which padding is then
-        added. In contrast, the ``"padding"`` setting includes the padding within the view
-        size calculations, such that the width and height settings indicate the **total**
-        intended size of the view.
-
-        **Default value** : ``"content"``
-    resize : boolean
-        A boolean flag indicating if autosize layout should be re-calculated on every view
-        update.
-
-        **Default value** : ``false``
-    type : :class:`AutosizeType`
-        The sizing format type. One of ``"pad"``, ``"fit"`` or ``"none"``. See the `autosize
-        type <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ documentation for
-        descriptions of each.
-
-        **Default value** : ``"pad"``
-    """
-    _schema = {'$ref': '#/definitions/AutoSizeParams'}
-
-    def __init__(self, contains=Undefined, resize=Undefined, type=Undefined, **kwds):
-        super(AutoSizeParams, self).__init__(contains=contains, resize=resize, type=type, **kwds)
-
-
-class AutosizeType(VegaLiteSchema):
-    """AutosizeType schema wrapper
-
-    enum('pad', 'fit', 'none')
-    """
-    _schema = {'$ref': '#/definitions/AutosizeType'}
-
-    def __init__(self, *args):
-        super(AutosizeType, self).__init__(*args)
-
-
-class Axis(VegaLiteSchema):
-    """Axis schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    bandPosition : float
-        An interpolation fraction indicating where, for ``band`` scales, axis ticks should
-        be positioned. A value of ``0`` places ticks at the left edge of their bands. A
-        value of ``0.5`` places ticks in the middle of their bands.
-
-        **Default value:** ``0.5``
-    domain : boolean
-        A boolean flag indicating if the domain (the axis baseline) should be included as
-        part of the axis.
-
-        **Default value:** ``true``
-    domainColor : :class:`Color`
-        Color of axis domain line.
-
-        **Default value:** ``"gray"``.
-    domainDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed domain lines.
-    domainDashOffset : float
-        The pixel offset at which to start drawing with the domain dash array.
-    domainOpacity : float
-        Opacity of the axis domain line.
-    domainWidth : float
-        Stroke width of axis domain line
-
-        **Default value:** ``1``
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    grid : boolean
-        A boolean flag indicating if grid lines should be included as part of the axis
-
-        **Default value:** ``true`` for `continuous scales
-        <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ that are not
-        binned; otherwise, ``false``.
-    gridColor : :class:`Color`
-        Color of gridlines.
-
-        **Default value:** ``"lightGray"``.
-    gridDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed grid lines.
-    gridDashOffset : float
-        The pixel offset at which to start drawing with the grid dash array.
-    gridOpacity : float
-        The stroke opacity of grid (value between [0,1])
-
-        **Default value:** ``1``
-    gridWidth : float
-        The grid width, in pixels.
-
-        **Default value:** ``1``
-    labelAlign : :class:`Align`
-        Horizontal text alignment of axis tick labels, overriding the default setting for
-        the current axis orientation.
-    labelAngle : float
-        The rotation angle of the axis labels.
-
-        **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise.
-    labelBaseline : :class:`TextBaseline`
-        Vertical text baseline of axis tick labels, overriding the default setting for the
-        current axis orientation. Can be ``"top"``, ``"middle"``, ``"bottom"``, or
-        ``"alphabetic"``.
-    labelBound : anyOf(float, boolean)
-        Indicates if labels should be hidden if they exceed the axis range. If ``false``
-        (the default) no bounds overlap analysis is performed. If ``true``, labels will be
-        hidden if they exceed the axis range by more than 1 pixel. If this property is a
-        number, it specifies the pixel tolerance: the maximum amount by which a label
-        bounding box may exceed the axis range.
-
-        **Default value:** ``false``.
-    labelColor : :class:`Color`
-        The color of the tick label, can be in hex color code or regular color name.
-    labelFlush : anyOf(boolean, float)
-        Indicates if the first and last axis labels should be aligned flush with the scale
-        range. Flush alignment for a horizontal axis will left-align the first label and
-        right-align the last label. For vertical axes, bottom and top text baselines are
-        applied instead. If this property is a number, it also indicates the number of
-        pixels by which to offset the first and last labels; for example, a value of 2 will
-        flush-align the first and last labels and also push them 2 pixels outward from the
-        center of the axis. The additional adjustment can sometimes help the labels better
-        visually group with corresponding axis ticks.
-
-        **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``.
-    labelFlushOffset : float
-        Indicates the number of pixels by which to offset flush-adjusted labels. For
-        example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the
-        center of the axis. Offsets can help the labels better visually group with
-        corresponding axis ticks.
-
-        **Default value:** ``0``.
-    labelFont : string
-        The font of the tick label.
-    labelFontSize : float
-        The font size of the label, in pixels.
-    labelFontStyle : :class:`FontStyle`
-        Font style of the title.
-    labelFontWeight : :class:`FontWeight`
-        Font weight of axis tick labels.
-    labelLimit : float
-        Maximum allowed pixel width of axis tick labels.
-
-        **Default value:** ``180``
-    labelOpacity : float
-        The opacity of the labels.
-    labelOverlap : :class:`LabelOverlap`
-        The strategy to use for resolving overlap of axis labels. If ``false`` (the
-        default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a
-        strategy of removing every other label is used (this works well for standard linear
-        axes). If set to ``"greedy"``, a linear scan of the labels is performed, removing
-        any labels that overlaps with the last visible label (this often works better for
-        log-scaled axes).
-
-        **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"``
-        for log scales; otherwise ``false``.
-    labelPadding : float
-        The padding, in pixels, between axis and text labels.
-
-        **Default value:** ``2``
-    labelSeparation : float
-        The minimum separation that must be between label bounding boxes for them to be
-        considered non-overlapping (default ``0`` ). This property is ignored if
-        *labelOverlap* resolution is not enabled.
-    labels : boolean
-        A boolean flag indicating if labels should be included as part of the axis.
-
-        **Default value:** ``true``.
-    maxExtent : float
-        The maximum extent in pixels that axis ticks and labels should use. This determines
-        a maximum offset value for axis titles.
-
-        **Default value:** ``undefined``.
-    minExtent : float
-        The minimum extent in pixels that axis ticks and labels should use. This determines
-        a minimum offset value for axis titles.
-
-        **Default value:** ``30`` for y-axis; ``undefined`` for x-axis.
-    offset : float
-        The offset, in pixels, by which to displace the axis from the edge of the enclosing
-        group or data rectangle.
-
-        **Default value:** derived from the `axis config
-        <https://vega.github.io/vega-lite/docs/config.html#facet-scale-config>`__ 's
-        ``offset`` ( ``0`` by default)
-    orient : :class:`AxisOrient`
-        The orientation of the axis. One of ``"top"``, ``"bottom"``, ``"left"`` or
-        ``"right"``. The orientation can be used to further specialize the axis type (e.g.,
-        a y-axis oriented towards the right edge of the chart).
-
-        **Default value:** ``"bottom"`` for x-axes and ``"left"`` for y-axes.
-    position : float
-        The anchor position of the axis in pixels. For x-axes with top or bottom
-        orientation, this sets the axis group x coordinate. For y-axes with left or right
-        orientation, this sets the axis group y coordinate.
-
-        **Default value** : ``0``
-    tickColor : :class:`Color`
-        The color of the axis's tick.
-
-        **Default value:** ``"gray"``
-    tickCount : float
-        A desired number of ticks, for axes visualizing quantitative scales. The resulting
-        number may be different so that values are "nice" (multiples of 2, 5, 10) and lie
-        within the underlying scale's range.
-    tickDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed tick mark lines.
-    tickDashOffset : float
-        The pixel offset at which to start drawing with the tick mark dash array.
-    tickExtra : boolean
-        Boolean flag indicating if an extra axis tick should be added for the initial
-        position of the axis. This flag is useful for styling axes for ``band`` scales such
-        that ticks are placed on band boundaries rather in the middle of a band. Use in
-        conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``.
-    tickMinStep : float
-        The minimum desired step between axis ticks, in terms of scale domain values. For
-        example, a value of ``1`` indicates that ticks should not be less than 1 unit apart.
-        If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if
-        necessary, to enforce the minimum step value.
-
-        **Default value** : ``undefined``
-    tickOffset : float
-        Position offset in pixels to apply to ticks, labels, and gridlines.
-    tickOpacity : float
-        Opacity of the ticks.
-    tickRound : boolean
-        Boolean flag indicating if pixel position values should be rounded to the nearest
-        integer.
-
-        **Default value:** ``true``
-    tickSize : float
-        The size in pixels of axis ticks.
-
-        **Default value:** ``5``
-    tickWidth : float
-        The width, in pixels, of ticks.
-
-        **Default value:** ``1``
-    ticks : boolean
-        Boolean value that determines whether the axis should include ticks.
-
-        **Default value:** ``true``
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    titleAlign : :class:`Align`
-        Horizontal text alignment of axis titles.
-    titleAnchor : :class:`TitleAnchor`
-        Text anchor position for placing axis titles.
-    titleAngle : float
-        Angle in degrees of axis titles.
-    titleBaseline : :class:`TextBaseline`
-        Vertical text baseline for axis titles.
-    titleColor : :class:`Color`
-        Color of the title, can be in hex color code or regular color name.
-    titleFont : string
-        Font of the title. (e.g., ``"Helvetica Neue"`` ).
-    titleFontSize : float
-        Font size of the title.
-    titleFontStyle : :class:`FontStyle`
-        Font style of the title.
-    titleFontWeight : :class:`FontWeight`
-        Font weight of the title.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    titleLimit : float
-        Maximum allowed pixel width of axis titles.
-    titleOpacity : float
-        Opacity of the axis title.
-    titlePadding : float
-        The padding, in pixels, between title and axis.
-    titleX : float
-        X-coordinate of the axis title relative to the axis group.
-    titleY : float
-        Y-coordinate of the axis title relative to the axis group.
-    values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`))
-        Explicitly set the visible axis tick values.
-    zindex : float
-        A non-negative integer indicating the z-index of the axis.
-        If zindex is 0, axes should be drawn behind all chart elements.
-        To put them in front, use ``"zindex = 1"``.
-
-        **Default value:** ``1`` (in front of the marks) for actual axis and ``0`` (behind
-        the marks) for grids.
-    """
-    _schema = {'$ref': '#/definitions/Axis'}
-
-    def __init__(self, bandPosition=Undefined, domain=Undefined, domainColor=Undefined,
-                 domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined,
-                 domainWidth=Undefined, format=Undefined, formatType=Undefined, grid=Undefined,
-                 gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined,
-                 gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined,
-                 labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined,
-                 labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined,
-                 labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined,
-                 labelLimit=Undefined, labelOpacity=Undefined, labelOverlap=Undefined,
-                 labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined,
-                 maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined,
-                 position=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined,
-                 tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined,
-                 tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined,
-                 tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined,
-                 titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined,
-                 titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined,
-                 titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined,
-                 titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined,
-                 values=Undefined, zindex=Undefined, **kwds):
-        super(Axis, self).__init__(bandPosition=bandPosition, domain=domain, domainColor=domainColor,
-                                   domainDash=domainDash, domainDashOffset=domainDashOffset,
-                                   domainOpacity=domainOpacity, domainWidth=domainWidth, format=format,
-                                   formatType=formatType, grid=grid, gridColor=gridColor,
-                                   gridDash=gridDash, gridDashOffset=gridDashOffset,
-                                   gridOpacity=gridOpacity, gridWidth=gridWidth, labelAlign=labelAlign,
-                                   labelAngle=labelAngle, labelBaseline=labelBaseline,
-                                   labelBound=labelBound, labelColor=labelColor, labelFlush=labelFlush,
-                                   labelFlushOffset=labelFlushOffset, labelFont=labelFont,
-                                   labelFontSize=labelFontSize, labelFontStyle=labelFontStyle,
-                                   labelFontWeight=labelFontWeight, labelLimit=labelLimit,
-                                   labelOpacity=labelOpacity, labelOverlap=labelOverlap,
-                                   labelPadding=labelPadding, labelSeparation=labelSeparation,
-                                   labels=labels, maxExtent=maxExtent, minExtent=minExtent,
-                                   offset=offset, orient=orient, position=position, tickColor=tickColor,
-                                   tickCount=tickCount, tickDash=tickDash,
-                                   tickDashOffset=tickDashOffset, tickExtra=tickExtra,
-                                   tickMinStep=tickMinStep, tickOffset=tickOffset,
-                                   tickOpacity=tickOpacity, tickRound=tickRound, tickSize=tickSize,
-                                   tickWidth=tickWidth, ticks=ticks, title=title, titleAlign=titleAlign,
-                                   titleAnchor=titleAnchor, titleAngle=titleAngle,
-                                   titleBaseline=titleBaseline, titleColor=titleColor,
-                                   titleFont=titleFont, titleFontSize=titleFontSize,
-                                   titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight,
-                                   titleLimit=titleLimit, titleOpacity=titleOpacity,
-                                   titlePadding=titlePadding, titleX=titleX, titleY=titleY,
-                                   values=values, zindex=zindex, **kwds)
-
-
-class AxisConfig(VegaLiteSchema):
-    """AxisConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    bandPosition : float
-        An interpolation fraction indicating where, for ``band`` scales, axis ticks should
-        be positioned. A value of ``0`` places ticks at the left edge of their bands. A
-        value of ``0.5`` places ticks in the middle of their bands.
-
-        **Default value:** ``0.5``
-    domain : boolean
-        A boolean flag indicating if the domain (the axis baseline) should be included as
-        part of the axis.
-
-        **Default value:** ``true``
-    domainColor : :class:`Color`
-        Color of axis domain line.
-
-        **Default value:** ``"gray"``.
-    domainDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed domain lines.
-    domainDashOffset : float
-        The pixel offset at which to start drawing with the domain dash array.
-    domainOpacity : float
-        Opacity of the axis domain line.
-    domainWidth : float
-        Stroke width of axis domain line
-
-        **Default value:** ``1``
-    grid : boolean
-        A boolean flag indicating if grid lines should be included as part of the axis
-
-        **Default value:** ``true`` for `continuous scales
-        <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ that are not
-        binned; otherwise, ``false``.
-    gridColor : :class:`Color`
-        Color of gridlines.
-
-        **Default value:** ``"lightGray"``.
-    gridDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed grid lines.
-    gridDashOffset : float
-        The pixel offset at which to start drawing with the grid dash array.
-    gridOpacity : float
-        The stroke opacity of grid (value between [0,1])
-
-        **Default value:** ``1``
-    gridWidth : float
-        The grid width, in pixels.
-
-        **Default value:** ``1``
-    labelAlign : :class:`Align`
-        Horizontal text alignment of axis tick labels, overriding the default setting for
-        the current axis orientation.
-    labelAngle : float
-        The rotation angle of the axis labels.
-
-        **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise.
-    labelBaseline : :class:`TextBaseline`
-        Vertical text baseline of axis tick labels, overriding the default setting for the
-        current axis orientation. Can be ``"top"``, ``"middle"``, ``"bottom"``, or
-        ``"alphabetic"``.
-    labelBound : anyOf(float, boolean)
-        Indicates if labels should be hidden if they exceed the axis range. If ``false``
-        (the default) no bounds overlap analysis is performed. If ``true``, labels will be
-        hidden if they exceed the axis range by more than 1 pixel. If this property is a
-        number, it specifies the pixel tolerance: the maximum amount by which a label
-        bounding box may exceed the axis range.
-
-        **Default value:** ``false``.
-    labelColor : :class:`Color`
-        The color of the tick label, can be in hex color code or regular color name.
-    labelFlush : anyOf(boolean, float)
-        Indicates if the first and last axis labels should be aligned flush with the scale
-        range. Flush alignment for a horizontal axis will left-align the first label and
-        right-align the last label. For vertical axes, bottom and top text baselines are
-        applied instead. If this property is a number, it also indicates the number of
-        pixels by which to offset the first and last labels; for example, a value of 2 will
-        flush-align the first and last labels and also push them 2 pixels outward from the
-        center of the axis. The additional adjustment can sometimes help the labels better
-        visually group with corresponding axis ticks.
-
-        **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``.
-    labelFlushOffset : float
-        Indicates the number of pixels by which to offset flush-adjusted labels. For
-        example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the
-        center of the axis. Offsets can help the labels better visually group with
-        corresponding axis ticks.
-
-        **Default value:** ``0``.
-    labelFont : string
-        The font of the tick label.
-    labelFontSize : float
-        The font size of the label, in pixels.
-    labelFontStyle : :class:`FontStyle`
-        Font style of the title.
-    labelFontWeight : :class:`FontWeight`
-        Font weight of axis tick labels.
-    labelLimit : float
-        Maximum allowed pixel width of axis tick labels.
-
-        **Default value:** ``180``
-    labelOpacity : float
-        The opacity of the labels.
-    labelOverlap : :class:`LabelOverlap`
-        The strategy to use for resolving overlap of axis labels. If ``false`` (the
-        default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a
-        strategy of removing every other label is used (this works well for standard linear
-        axes). If set to ``"greedy"``, a linear scan of the labels is performed, removing
-        any labels that overlaps with the last visible label (this often works better for
-        log-scaled axes).
-
-        **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"``
-        for log scales; otherwise ``false``.
-    labelPadding : float
-        The padding, in pixels, between axis and text labels.
-
-        **Default value:** ``2``
-    labelSeparation : float
-        The minimum separation that must be between label bounding boxes for them to be
-        considered non-overlapping (default ``0`` ). This property is ignored if
-        *labelOverlap* resolution is not enabled.
-    labels : boolean
-        A boolean flag indicating if labels should be included as part of the axis.
-
-        **Default value:** ``true``.
-    maxExtent : float
-        The maximum extent in pixels that axis ticks and labels should use. This determines
-        a maximum offset value for axis titles.
-
-        **Default value:** ``undefined``.
-    minExtent : float
-        The minimum extent in pixels that axis ticks and labels should use. This determines
-        a minimum offset value for axis titles.
-
-        **Default value:** ``30`` for y-axis; ``undefined`` for x-axis.
-    orient : :class:`AxisOrient`
-        The orientation of the axis. One of ``"top"``, ``"bottom"``, ``"left"`` or
-        ``"right"``. The orientation can be used to further specialize the axis type (e.g.,
-        a y-axis oriented towards the right edge of the chart).
-
-        **Default value:** ``"bottom"`` for x-axes and ``"left"`` for y-axes.
-    shortTimeLabels : boolean
-        Whether month names and weekday names should be abbreviated.
-
-        **Default value:**  ``false``
-    tickColor : :class:`Color`
-        The color of the axis's tick.
-
-        **Default value:** ``"gray"``
-    tickDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed tick mark lines.
-    tickDashOffset : float
-        The pixel offset at which to start drawing with the tick mark dash array.
-    tickExtra : boolean
-        Boolean flag indicating if an extra axis tick should be added for the initial
-        position of the axis. This flag is useful for styling axes for ``band`` scales such
-        that ticks are placed on band boundaries rather in the middle of a band. Use in
-        conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``.
-    tickOffset : float
-        Position offset in pixels to apply to ticks, labels, and gridlines.
-    tickOpacity : float
-        Opacity of the ticks.
-    tickRound : boolean
-        Boolean flag indicating if pixel position values should be rounded to the nearest
-        integer.
-
-        **Default value:** ``true``
-    tickSize : float
-        The size in pixels of axis ticks.
-
-        **Default value:** ``5``
-    tickWidth : float
-        The width, in pixels, of ticks.
-
-        **Default value:** ``1``
-    ticks : boolean
-        Boolean value that determines whether the axis should include ticks.
-
-        **Default value:** ``true``
-    title : None
-        Set to null to disable title for the axis, legend, or header.
-    titleAlign : :class:`Align`
-        Horizontal text alignment of axis titles.
-    titleAnchor : :class:`TitleAnchor`
-        Text anchor position for placing axis titles.
-    titleAngle : float
-        Angle in degrees of axis titles.
-    titleBaseline : :class:`TextBaseline`
-        Vertical text baseline for axis titles.
-    titleColor : :class:`Color`
-        Color of the title, can be in hex color code or regular color name.
-    titleFont : string
-        Font of the title. (e.g., ``"Helvetica Neue"`` ).
-    titleFontSize : float
-        Font size of the title.
-    titleFontStyle : :class:`FontStyle`
-        Font style of the title.
-    titleFontWeight : :class:`FontWeight`
-        Font weight of the title.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    titleLimit : float
-        Maximum allowed pixel width of axis titles.
-    titleOpacity : float
-        Opacity of the axis title.
-    titlePadding : float
-        The padding, in pixels, between title and axis.
-    titleX : float
-        X-coordinate of the axis title relative to the axis group.
-    titleY : float
-        Y-coordinate of the axis title relative to the axis group.
-    """
-    _schema = {'$ref': '#/definitions/AxisConfig'}
-
-    def __init__(self, bandPosition=Undefined, domain=Undefined, domainColor=Undefined,
-                 domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined,
-                 domainWidth=Undefined, grid=Undefined, gridColor=Undefined, gridDash=Undefined,
-                 gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined,
-                 labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined,
-                 labelBound=Undefined, labelColor=Undefined, labelFlush=Undefined,
-                 labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined,
-                 labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined,
-                 labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined,
-                 labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined,
-                 orient=Undefined, shortTimeLabels=Undefined, tickColor=Undefined, tickDash=Undefined,
-                 tickDashOffset=Undefined, tickExtra=Undefined, tickOffset=Undefined,
-                 tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined,
-                 ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined,
-                 titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined,
-                 titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined,
-                 titleFontWeight=Undefined, titleLimit=Undefined, titleOpacity=Undefined,
-                 titlePadding=Undefined, titleX=Undefined, titleY=Undefined, **kwds):
-        super(AxisConfig, self).__init__(bandPosition=bandPosition, domain=domain,
-                                         domainColor=domainColor, domainDash=domainDash,
-                                         domainDashOffset=domainDashOffset, domainOpacity=domainOpacity,
-                                         domainWidth=domainWidth, grid=grid, gridColor=gridColor,
-                                         gridDash=gridDash, gridDashOffset=gridDashOffset,
-                                         gridOpacity=gridOpacity, gridWidth=gridWidth,
-                                         labelAlign=labelAlign, labelAngle=labelAngle,
-                                         labelBaseline=labelBaseline, labelBound=labelBound,
-                                         labelColor=labelColor, labelFlush=labelFlush,
-                                         labelFlushOffset=labelFlushOffset, labelFont=labelFont,
-                                         labelFontSize=labelFontSize, labelFontStyle=labelFontStyle,
-                                         labelFontWeight=labelFontWeight, labelLimit=labelLimit,
-                                         labelOpacity=labelOpacity, labelOverlap=labelOverlap,
-                                         labelPadding=labelPadding, labelSeparation=labelSeparation,
-                                         labels=labels, maxExtent=maxExtent, minExtent=minExtent,
-                                         orient=orient, shortTimeLabels=shortTimeLabels,
-                                         tickColor=tickColor, tickDash=tickDash,
-                                         tickDashOffset=tickDashOffset, tickExtra=tickExtra,
-                                         tickOffset=tickOffset, tickOpacity=tickOpacity,
-                                         tickRound=tickRound, tickSize=tickSize, tickWidth=tickWidth,
-                                         ticks=ticks, title=title, titleAlign=titleAlign,
-                                         titleAnchor=titleAnchor, titleAngle=titleAngle,
-                                         titleBaseline=titleBaseline, titleColor=titleColor,
-                                         titleFont=titleFont, titleFontSize=titleFontSize,
-                                         titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight,
-                                         titleLimit=titleLimit, titleOpacity=titleOpacity,
-                                         titlePadding=titlePadding, titleX=titleX, titleY=titleY, **kwds)
-
-
-class AxisOrient(VegaLiteSchema):
-    """AxisOrient schema wrapper
-
-    enum('top', 'bottom', 'left', 'right')
-    """
-    _schema = {'$ref': '#/definitions/AxisOrient'}
-
-    def __init__(self, *args):
-        super(AxisOrient, self).__init__(*args)
-
-
-class AxisResolveMap(VegaLiteSchema):
-    """AxisResolveMap schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    x : :class:`ResolveMode`
-
-    y : :class:`ResolveMode`
-
-    """
-    _schema = {'$ref': '#/definitions/AxisResolveMap'}
-
-    def __init__(self, x=Undefined, y=Undefined, **kwds):
-        super(AxisResolveMap, self).__init__(x=x, y=y, **kwds)
-
-
-class BaseLegendLayout(VegaLiteSchema):
-    """BaseLegendLayout schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    anchor : :class:`TitleAnchor`
-        The anchor point for legend orient group layout.
-    bounds : :class:`LayoutBounds`
-        The bounds calculation to use for legend orient group layout.
-    center : anyOf(boolean, :class:`SignalRef`)
-        A flag to center legends within a shared orient group.
-    direction : anyOf(:class:`Orientation`, :class:`SignalRef`)
-        The layout direction for legend orient group layout.
-    margin : anyOf(float, :class:`SignalRef`)
-        The pixel margin between legends within a orient group.
-    offset : anyOf(float, :class:`SignalRef`)
-        The pixel offset from the chart body for a legend orient group.
-    """
-    _schema = {'$ref': '#/definitions/BaseLegendLayout'}
-
-    def __init__(self, anchor=Undefined, bounds=Undefined, center=Undefined, direction=Undefined,
-                 margin=Undefined, offset=Undefined, **kwds):
-        super(BaseLegendLayout, self).__init__(anchor=anchor, bounds=bounds, center=center,
-                                               direction=direction, margin=margin, offset=offset, **kwds)
-
-
-class BaseMarkConfig(VegaLiteSchema):
-    """BaseMarkConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        The pixel area each the point/circle/square.
-        For example: in the case of circles, the radius is determined in part by the square
-        root of the size value.
-
-        **Default value:** ``30``
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    tooltip : Any
-        The tooltip text to show upon mouse hover.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/BaseMarkConfig'}
-
-    def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, cornerRadius=Undefined,
-                 cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined,
-                 fill=Undefined, fillOpacity=Undefined, font=Undefined, fontSize=Undefined,
-                 fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                 interpolate=Undefined, limit=Undefined, opacity=Undefined, orient=Undefined,
-                 radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined,
-                 y2=Undefined, **kwds):
-        super(BaseMarkConfig, self).__init__(align=align, angle=angle, baseline=baseline,
-                                             cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx,
-                                             dy=dy, ellipsis=ellipsis, fill=fill,
-                                             fillOpacity=fillOpacity, font=font, fontSize=fontSize,
-                                             fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                                             href=href, interpolate=interpolate, limit=limit,
-                                             opacity=opacity, orient=orient, radius=radius, shape=shape,
-                                             size=size, stroke=stroke, strokeCap=strokeCap,
-                                             strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                             strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit,
-                                             strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                             tension=tension, text=text, theta=theta, tooltip=tooltip,
-                                             width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
-
-
-class BaseTitleConfig(VegaLiteSchema):
-    """BaseTitleConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-
-    anchor : :class:`TitleAnchor`
-        The anchor position for placing the title. One of ``"start"``, ``"middle"``, or
-        ``"end"``. For example, with an orientation of top these anchor positions map to a
-        left-, center-, or right-aligned title.
-    angle : float
-        Angle in degrees of title text.
-    baseline : :class:`TextBaseline`
-        Vertical text baseline for title text. One of ``"top"``, ``"middle"``, ``"bottom"``,
-        or ``"alphabetic"``.
-    color : :class:`Color`
-        Text color for title text.
-    dx : float
-        Delta offset for title text x-coordinate.
-    dy : float
-        Delta offset for title text y-coordinate.
-    font : string
-        Font name for title text.
-    fontSize : float
-        Font size in pixels for title text.
-
-        **Default value:** ``10``.
-    fontStyle : :class:`FontStyle`
-        Font style for title text.
-    fontWeight : :class:`FontWeight`
-        Font weight for title text.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    frame : :class:`TitleFrame`
-        The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative
-        to the full bounding box) or ``"group"`` (to anchor relative to the group width or
-        height).
-    limit : float
-        The maximum allowed length in pixels of legend labels.
-    offset : float
-        The orthogonal offset in pixels by which to displace the title from its position
-        along the edge of the chart.
-    orient : :class:`TitleOrient`
-        Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` )
-    """
-    _schema = {'$ref': '#/definitions/BaseTitleConfig'}
-
-    def __init__(self, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined,
-                 color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined,
-                 fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined,
-                 offset=Undefined, orient=Undefined, **kwds):
-        super(BaseTitleConfig, self).__init__(align=align, anchor=anchor, angle=angle,
-                                              baseline=baseline, color=color, dx=dx, dy=dy, font=font,
-                                              fontSize=fontSize, fontStyle=fontStyle,
-                                              fontWeight=fontWeight, frame=frame, limit=limit,
-                                              offset=offset, orient=orient, **kwds)
-
-
-class BinParams(VegaLiteSchema):
-    """BinParams schema wrapper
-
-    Mapping(required=[])
-    Binning properties or boolean flag for determining whether to bin data or not.
-
-    Attributes
-    ----------
-
-    anchor : float
-        A value in the binned domain at which to anchor the bins, shifting the bin
-        boundaries if necessary to ensure that a boundary aligns with the anchor value.
-
-        **Default Value:** the minimum bin extent value
-    base : float
-        The number base to use for automatic bin determination (default is base 10).
-
-        **Default value:** ``10``
-    binned : boolean
-        When set to true, Vega-Lite treats the input data as already binned.
-    divide : List(float)
-        Scale factors indicating allowable subdivisions. The default value is [5, 2], which
-        indicates that for base 10 numbers (the default base), the method may consider
-        dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the
-        method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might
-        also satisfy the given constraints.
-
-        **Default value:** ``[5, 2]``
-    extent : List(float)
-        A two-element ( ``[min, max]`` ) array indicating the range of desired bin values.
-    maxbins : float
-        Maximum number of bins.
-
-        **Default value:** ``6`` for ``row``, ``column`` and ``shape`` channels; ``10`` for
-        other channels
-    minstep : float
-        A minimum allowable step size (particularly useful for integer values).
-    nice : boolean
-        If true (the default), attempts to make the bin boundaries use human-friendly
-        boundaries, such as multiples of ten.
-    step : float
-        An exact step size to use between bins.
-
-        **Note:** If provided, options such as maxbins will be ignored.
-    steps : List(float)
-        An array of allowable step sizes to choose from.
-    """
-    _schema = {'$ref': '#/definitions/BinParams'}
-
-    def __init__(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined,
-                 extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined,
-                 steps=Undefined, **kwds):
-        super(BinParams, self).__init__(anchor=anchor, base=base, binned=binned, divide=divide,
-                                        extent=extent, maxbins=maxbins, minstep=minstep, nice=nice,
-                                        step=step, steps=steps, **kwds)
-
-
-class Binding(VegaLiteSchema):
-    """Binding schema wrapper
-
-    anyOf(:class:`BindCheckbox`, :class:`BindRadioSelect`, :class:`BindRange`,
-    :class:`InputBinding`)
-    """
-    _schema = {'$ref': '#/definitions/Binding'}
-
-    def __init__(self, *args, **kwds):
-        super(Binding, self).__init__(*args, **kwds)
-
-
-class BindCheckbox(Binding):
-    """BindCheckbox schema wrapper
-
-    Mapping(required=[input])
-
-    Attributes
-    ----------
-
-    input : enum('checkbox')
-
-    debounce : float
-
-    element : :class:`Element`
-
-    name : string
-
-    type : string
-
-    """
-    _schema = {'$ref': '#/definitions/BindCheckbox'}
-
-    def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, name=Undefined,
-                 type=Undefined, **kwds):
-        super(BindCheckbox, self).__init__(input=input, debounce=debounce, element=element, name=name,
-                                           type=type, **kwds)
-
-
-class BindRadioSelect(Binding):
-    """BindRadioSelect schema wrapper
-
-    Mapping(required=[input, options])
-
-    Attributes
-    ----------
-
-    input : enum('radio', 'select')
-
-    options : List(Any)
-
-    debounce : float
-
-    element : :class:`Element`
-
-    name : string
-
-    type : string
-
-    """
-    _schema = {'$ref': '#/definitions/BindRadioSelect'}
-
-    def __init__(self, input=Undefined, options=Undefined, debounce=Undefined, element=Undefined,
-                 name=Undefined, type=Undefined, **kwds):
-        super(BindRadioSelect, self).__init__(input=input, options=options, debounce=debounce,
-                                              element=element, name=name, type=type, **kwds)
-
-
-class BindRange(Binding):
-    """BindRange schema wrapper
-
-    Mapping(required=[input])
-
-    Attributes
-    ----------
-
-    input : enum('range')
-
-    debounce : float
-
-    element : :class:`Element`
-
-    max : float
-
-    min : float
-
-    name : string
-
-    step : float
-
-    type : string
-
-    """
-    _schema = {'$ref': '#/definitions/BindRange'}
-
-    def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, max=Undefined,
-                 min=Undefined, name=Undefined, step=Undefined, type=Undefined, **kwds):
-        super(BindRange, self).__init__(input=input, debounce=debounce, element=element, max=max,
-                                        min=min, name=name, step=step, type=type, **kwds)
-
-
-class BoxPlotConfig(VegaLiteSchema):
-    """BoxPlotConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    box : anyOf(boolean, :class:`MarkConfig`)
-
-    extent : anyOf(enum('min-max'), float)
-        The extent of the whiskers. Available options include:
-
-
-        * ``"min-max"`` : min and max are the lower and upper whiskers respectively.
-        * A number representing multiple of the interquartile range.  This number will be
-          multiplied by the IQR to determine whisker boundary, which spans from the smallest
-          data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where
-          *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile
-          range ( *Q3-Q1* ).
-
-        **Default value:** ``1.5``.
-    median : anyOf(boolean, :class:`MarkConfig`)
-
-    outliers : anyOf(boolean, :class:`MarkConfig`)
-
-    rule : anyOf(boolean, :class:`MarkConfig`)
-
-    size : float
-        Size of the box and median tick of a box plot
-    ticks : anyOf(boolean, :class:`MarkConfig`)
-
-    """
-    _schema = {'$ref': '#/definitions/BoxPlotConfig'}
-
-    def __init__(self, box=Undefined, extent=Undefined, median=Undefined, outliers=Undefined,
-                 rule=Undefined, size=Undefined, ticks=Undefined, **kwds):
-        super(BoxPlotConfig, self).__init__(box=box, extent=extent, median=median, outliers=outliers,
-                                            rule=rule, size=size, ticks=ticks, **kwds)
-
-
-class BrushConfig(VegaLiteSchema):
-    """BrushConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    fill : :class:`Color`
-        The fill color of the interval mark.
-
-        **Default value:** ``#333333``
-    fillOpacity : float
-        The fill opacity of the interval mark (a value between 0 and 1).
-
-        **Default value:** ``0.125``
-    stroke : :class:`Color`
-        The stroke color of the interval mark.
-
-        **Default value:** ``#ffffff``
-    strokeDash : List(float)
-        An array of alternating stroke and space lengths,
-        for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) with which to begin drawing the stroke dash array.
-    strokeOpacity : float
-        The stroke opacity of the interval mark (a value between 0 and 1).
-    strokeWidth : float
-        The stroke width of the interval mark.
-    """
-    _schema = {'$ref': '#/definitions/BrushConfig'}
-
-    def __init__(self, fill=Undefined, fillOpacity=Undefined, stroke=Undefined, strokeDash=Undefined,
-                 strokeDashOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, **kwds):
-        super(BrushConfig, self).__init__(fill=fill, fillOpacity=fillOpacity, stroke=stroke,
-                                          strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                          strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, **kwds)
-
-
-class Color(VegaLiteSchema):
-    """Color schema wrapper
-
-    anyOf(:class:`ColorName`, :class:`HexColor`, string)
-    """
-    _schema = {'$ref': '#/definitions/Color'}
-
-    def __init__(self, *args, **kwds):
-        super(Color, self).__init__(*args, **kwds)
-
-
-class ColorName(Color):
-    """ColorName schema wrapper
-
-    enum('black', 'silver', 'gray', 'white', 'maroon', 'red', 'purple', 'fuchsia', 'green',
-    'lime', 'olive', 'yellow', 'navy', 'blue', 'teal', 'aqua', 'orange', 'aliceblue',
-    'antiquewhite', 'aquamarine', 'azure', 'beige', 'bisque', 'blanchedalmond', 'blueviolet',
-    'brown', 'burlywood', 'cadetblue', 'chartreuse', 'chocolate', 'coral', 'cornflowerblue',
-    'cornsilk', 'crimson', 'cyan', 'darkblue', 'darkcyan', 'darkgoldenrod', 'darkgray',
-    'darkgreen', 'darkgrey', 'darkkhaki', 'darkmagenta', 'darkolivegreen', 'darkorange',
-    'darkorchid', 'darkred', 'darksalmon', 'darkseagreen', 'darkslateblue', 'darkslategray',
-    'darkslategrey', 'darkturquoise', 'darkviolet', 'deeppink', 'deepskyblue', 'dimgray',
-    'dimgrey', 'dodgerblue', 'firebrick', 'floralwhite', 'forestgreen', 'gainsboro',
-    'ghostwhite', 'gold', 'goldenrod', 'greenyellow', 'grey', 'honeydew', 'hotpink',
-    'indianred', 'indigo', 'ivory', 'khaki', 'lavender', 'lavenderblush', 'lawngreen',
-    'lemonchiffon', 'lightblue', 'lightcoral', 'lightcyan', 'lightgoldenrodyellow', 'lightgray',
-    'lightgreen', 'lightgrey', 'lightpink', 'lightsalmon', 'lightseagreen', 'lightskyblue',
-    'lightslategray', 'lightslategrey', 'lightsteelblue', 'lightyellow', 'limegreen', 'linen',
-    'magenta', 'mediumaquamarine', 'mediumblue', 'mediumorchid', 'mediumpurple',
-    'mediumseagreen', 'mediumslateblue', 'mediumspringgreen', 'mediumturquoise',
-    'mediumvioletred', 'midnightblue', 'mintcream', 'mistyrose', 'moccasin', 'navajowhite',
-    'oldlace', 'olivedrab', 'orangered', 'orchid', 'palegoldenrod', 'palegreen',
-    'paleturquoise', 'palevioletred', 'papayawhip', 'peachpuff', 'peru', 'pink', 'plum',
-    'powderblue', 'rosybrown', 'royalblue', 'saddlebrown', 'salmon', 'sandybrown', 'seagreen',
-    'seashell', 'sienna', 'skyblue', 'slateblue', 'slategray', 'slategrey', 'snow',
-    'springgreen', 'steelblue', 'tan', 'thistle', 'tomato', 'turquoise', 'violet', 'wheat',
-    'whitesmoke', 'yellowgreen', 'rebeccapurple')
-    """
-    _schema = {'$ref': '#/definitions/ColorName'}
-
-    def __init__(self, *args):
-        super(ColorName, self).__init__(*args)
-
-
-class CompositeMark(AnyMark):
-    """CompositeMark schema wrapper
-
-    anyOf(:class:`BoxPlot`, :class:`ErrorBar`, :class:`ErrorBand`)
-    """
-    _schema = {'$ref': '#/definitions/CompositeMark'}
-
-    def __init__(self, *args, **kwds):
-        super(CompositeMark, self).__init__(*args, **kwds)
-
-
-class BoxPlot(CompositeMark):
-    """BoxPlot schema wrapper
-
-    enum('boxplot')
-    """
-    _schema = {'$ref': '#/definitions/BoxPlot'}
-
-    def __init__(self, *args):
-        super(BoxPlot, self).__init__(*args)
-
-
-class CompositeMarkDef(AnyMark):
-    """CompositeMarkDef schema wrapper
-
-    anyOf(:class:`BoxPlotDef`, :class:`ErrorBarDef`, :class:`ErrorBandDef`)
-    """
-    _schema = {'$ref': '#/definitions/CompositeMarkDef'}
-
-    def __init__(self, *args, **kwds):
-        super(CompositeMarkDef, self).__init__(*args, **kwds)
-
-
-class BoxPlotDef(CompositeMarkDef):
-    """BoxPlotDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`BoxPlot`
-        The mark type. This could a primitive mark type
-        (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` )
-        or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ).
-    box : anyOf(boolean, :class:`MarkConfig`)
-
-    clip : boolean
-        Whether a composite mark be clipped to the enclosing group’s width and height.
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    extent : anyOf(enum('min-max'), float)
-        The extent of the whiskers. Available options include:
-
-
-        * ``"min-max"`` : min and max are the lower and upper whiskers respectively.
-        * A number representing multiple of the interquartile range.  This number will be
-          multiplied by the IQR to determine whisker boundary, which spans from the smallest
-          data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where
-          *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile
-          range ( *Q3-Q1* ).
-
-        **Default value:** ``1.5``.
-    median : anyOf(boolean, :class:`MarkConfig`)
-
-    opacity : float
-        The opacity (value between [0,1]) of the mark.
-    orient : :class:`Orientation`
-        Orientation of the box plot.  This is normally automatically determined based on
-        types of fields on x and y channels. However, an explicit ``orient`` be specified
-        when the orientation is ambiguous.
-
-        **Default value:** ``"vertical"``.
-    outliers : anyOf(boolean, :class:`MarkConfig`)
-
-    rule : anyOf(boolean, :class:`MarkConfig`)
-
-    size : float
-        Size of the box and median tick of a box plot
-    ticks : anyOf(boolean, :class:`MarkConfig`)
-
-    """
-    _schema = {'$ref': '#/definitions/BoxPlotDef'}
-
-    def __init__(self, type=Undefined, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined,
-                 median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined,
-                 rule=Undefined, size=Undefined, ticks=Undefined, **kwds):
-        super(BoxPlotDef, self).__init__(type=type, box=box, clip=clip, color=color, extent=extent,
-                                         median=median, opacity=opacity, orient=orient,
-                                         outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds)
-
-
-class CompositionConfig(VegaLiteSchema):
-    """CompositionConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    spacing : float
-        The default spacing in pixels between composed sub-views.
-
-        **Default value** : ``20``
-    """
-    _schema = {'$ref': '#/definitions/CompositionConfig'}
-
-    def __init__(self, columns=Undefined, spacing=Undefined, **kwds):
-        super(CompositionConfig, self).__init__(columns=columns, spacing=spacing, **kwds)
-
-
-class ConditionalMarkPropFieldDef(VegaLiteSchema):
-    """ConditionalMarkPropFieldDef schema wrapper
-
-    anyOf(:class:`ConditionalPredicateMarkPropFieldDef`,
-    :class:`ConditionalSelectionMarkPropFieldDef`)
-    """
-    _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldDef'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalMarkPropFieldDef, self).__init__(*args, **kwds)
-
-
-class ConditionalMarkPropFieldDefTypeForShape(VegaLiteSchema):
-    """ConditionalMarkPropFieldDefTypeForShape schema wrapper
-
-    anyOf(:class:`ConditionalPredicateMarkPropFieldDefTypeForShape`,
-    :class:`ConditionalSelectionMarkPropFieldDefTypeForShape`)
-    """
-    _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldDef<TypeForShape>'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalMarkPropFieldDefTypeForShape, self).__init__(*args, **kwds)
-
-
-class ConditionalNumberValueDef(VegaLiteSchema):
-    """ConditionalNumberValueDef schema wrapper
-
-    anyOf(:class:`ConditionalPredicateNumberValueDef`,
-    :class:`ConditionalSelectionNumberValueDef`)
-    """
-    _schema = {'$ref': '#/definitions/ConditionalNumberValueDef'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalNumberValueDef, self).__init__(*args, **kwds)
-
-
-class ConditionalPredicateMarkPropFieldDef(ConditionalMarkPropFieldDef):
-    """ConditionalPredicateMarkPropFieldDef schema wrapper
-
-    Mapping(required=[test, type])
-
-    Attributes
-    ----------
-
-    test : :class:`LogicalOperandPredicate`
-        Predicate for triggering the condition
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<MarkPropFieldDef>'}
-
-    def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(ConditionalPredicateMarkPropFieldDef, self).__init__(test=test, type=type,
-                                                                   aggregate=aggregate, bin=bin,
-                                                                   field=field, legend=legend,
-                                                                   scale=scale, sort=sort,
-                                                                   timeUnit=timeUnit, title=title,
-                                                                   **kwds)
-
-
-class ConditionalPredicateMarkPropFieldDefTypeForShape(ConditionalMarkPropFieldDefTypeForShape):
-    """ConditionalPredicateMarkPropFieldDefTypeForShape schema wrapper
-
-    Mapping(required=[test, type])
-
-    Attributes
-    ----------
-
-    test : :class:`LogicalOperandPredicate`
-        Predicate for triggering the condition
-    type : :class:`TypeForShape`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<MarkPropFieldDef<TypeForShape>>'}
-
-    def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(ConditionalPredicateMarkPropFieldDefTypeForShape, self).__init__(test=test, type=type,
-                                                                               aggregate=aggregate,
-                                                                               bin=bin, field=field,
-                                                                               legend=legend,
-                                                                               scale=scale, sort=sort,
-                                                                               timeUnit=timeUnit,
-                                                                               title=title, **kwds)
-
-
-class ConditionalPredicateNumberValueDef(ConditionalNumberValueDef):
-    """ConditionalPredicateNumberValueDef schema wrapper
-
-    Mapping(required=[test, value])
-
-    Attributes
-    ----------
-
-    test : :class:`LogicalOperandPredicate`
-        Predicate for triggering the condition
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<NumberValueDef>'}
-
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateNumberValueDef, self).__init__(test=test, value=value, **kwds)
-
-
-class ConditionalSelectionMarkPropFieldDef(ConditionalMarkPropFieldDef):
-    """ConditionalSelectionMarkPropFieldDef schema wrapper
-
-    Mapping(required=[selection, type])
-
-    Attributes
-    ----------
-
-    selection : :class:`SelectionOperand`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<MarkPropFieldDef>'}
-
-    def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(ConditionalSelectionMarkPropFieldDef, self).__init__(selection=selection, type=type,
-                                                                   aggregate=aggregate, bin=bin,
-                                                                   field=field, legend=legend,
-                                                                   scale=scale, sort=sort,
-                                                                   timeUnit=timeUnit, title=title,
-                                                                   **kwds)
-
-
-class ConditionalSelectionMarkPropFieldDefTypeForShape(ConditionalMarkPropFieldDefTypeForShape):
-    """ConditionalSelectionMarkPropFieldDefTypeForShape schema wrapper
-
-    Mapping(required=[selection, type])
-
-    Attributes
-    ----------
-
-    selection : :class:`SelectionOperand`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
-    type : :class:`TypeForShape`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<MarkPropFieldDef<TypeForShape>>'}
-
-    def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(ConditionalSelectionMarkPropFieldDefTypeForShape, self).__init__(selection=selection,
-                                                                               type=type,
-                                                                               aggregate=aggregate,
-                                                                               bin=bin, field=field,
-                                                                               legend=legend,
-                                                                               scale=scale, sort=sort,
-                                                                               timeUnit=timeUnit,
-                                                                               title=title, **kwds)
-
-
-class ConditionalSelectionNumberValueDef(ConditionalNumberValueDef):
-    """ConditionalSelectionNumberValueDef schema wrapper
-
-    Mapping(required=[selection, value])
-
-    Attributes
-    ----------
-
-    selection : :class:`SelectionOperand`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<NumberValueDef>'}
-
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionNumberValueDef, self).__init__(selection=selection, value=value,
-                                                                 **kwds)
-
-
-class ConditionalStringValueDef(VegaLiteSchema):
-    """ConditionalStringValueDef schema wrapper
-
-    anyOf(:class:`ConditionalPredicateStringValueDef`,
-    :class:`ConditionalSelectionStringValueDef`)
-    """
-    _schema = {'$ref': '#/definitions/ConditionalStringValueDef'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalStringValueDef, self).__init__(*args, **kwds)
-
-
-class ConditionalPredicateStringValueDef(ConditionalStringValueDef):
-    """ConditionalPredicateStringValueDef schema wrapper
-
-    Mapping(required=[test, value])
-
-    Attributes
-    ----------
-
-    test : :class:`LogicalOperandPredicate`
-        Predicate for triggering the condition
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<StringValueDef>'}
-
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateStringValueDef, self).__init__(test=test, value=value, **kwds)
-
-
-class ConditionalSelectionStringValueDef(ConditionalStringValueDef):
-    """ConditionalSelectionStringValueDef schema wrapper
-
-    Mapping(required=[selection, value])
-
-    Attributes
-    ----------
-
-    selection : :class:`SelectionOperand`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<StringValueDef>'}
-
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionStringValueDef, self).__init__(selection=selection, value=value,
-                                                                 **kwds)
-
-
-class ConditionalTextFieldDef(VegaLiteSchema):
-    """ConditionalTextFieldDef schema wrapper
-
-    anyOf(:class:`ConditionalPredicateTextFieldDef`, :class:`ConditionalSelectionTextFieldDef`)
-    """
-    _schema = {'$ref': '#/definitions/ConditionalTextFieldDef'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalTextFieldDef, self).__init__(*args, **kwds)
-
-
-class ConditionalPredicateTextFieldDef(ConditionalTextFieldDef):
-    """ConditionalPredicateTextFieldDef schema wrapper
-
-    Mapping(required=[test, type])
-
-    Attributes
-    ----------
-
-    test : :class:`LogicalOperandPredicate`
-        Predicate for triggering the condition
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<TextFieldDef>'}
-
-    def __init__(self, test=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(ConditionalPredicateTextFieldDef, self).__init__(test=test, type=type,
-                                                               aggregate=aggregate, bin=bin,
-                                                               field=field, format=format,
-                                                               formatType=formatType, timeUnit=timeUnit,
-                                                               title=title, **kwds)
-
-
-class ConditionalSelectionTextFieldDef(ConditionalTextFieldDef):
-    """ConditionalSelectionTextFieldDef schema wrapper
-
-    Mapping(required=[selection, type])
-
-    Attributes
-    ----------
-
-    selection : :class:`SelectionOperand`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<TextFieldDef>'}
-
-    def __init__(self, selection=Undefined, type=Undefined, aggregate=Undefined, bin=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(ConditionalSelectionTextFieldDef, self).__init__(selection=selection, type=type,
-                                                               aggregate=aggregate, bin=bin,
-                                                               field=field, format=format,
-                                                               formatType=formatType, timeUnit=timeUnit,
-                                                               title=title, **kwds)
-
-
-class ConditionalValueDef(VegaLiteSchema):
-    """ConditionalValueDef schema wrapper
-
-    anyOf(:class:`ConditionalPredicateValueDef`, :class:`ConditionalSelectionValueDef`)
-    """
-    _schema = {'$ref': '#/definitions/ConditionalValueDef'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalValueDef, self).__init__(*args, **kwds)
-
-
-class ConditionalPredicateValueDef(ConditionalValueDef):
-    """ConditionalPredicateValueDef schema wrapper
-
-    Mapping(required=[test, value])
-
-    Attributes
-    ----------
-
-    test : :class:`LogicalOperandPredicate`
-        Predicate for triggering the condition
-    value : :class:`Value`
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef>'}
-
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDef, self).__init__(test=test, value=value, **kwds)
-
-
-class ConditionalSelectionValueDef(ConditionalValueDef):
-    """ConditionalSelectionValueDef schema wrapper
-
-    Mapping(required=[selection, value])
-
-    Attributes
-    ----------
-
-    selection : :class:`SelectionOperand`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
-    value : :class:`Value`
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef>'}
-
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDef, self).__init__(selection=selection, value=value, **kwds)
-
-
-class Config(VegaLiteSchema):
-    """Config schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    area : :class:`AreaConfig`
-        Area-Specific Config
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    axis : :class:`AxisConfig`
-        Axis configuration, which determines default properties for all ``x`` and ``y``
-        `axes <https://vega.github.io/vega-lite/docs/axis.html>`__. For a full list of axis
-        configuration options, please see the `corresponding section of the axis
-        documentation <https://vega.github.io/vega-lite/docs/axis.html#config>`__.
-    axisBand : :class:`AxisConfig`
-        Specific axis config for axes with "band" scales.
-    axisBottom : :class:`AxisConfig`
-        Specific axis config for x-axis along the bottom edge of the chart.
-    axisLeft : :class:`AxisConfig`
-        Specific axis config for y-axis along the left edge of the chart.
-    axisRight : :class:`AxisConfig`
-        Specific axis config for y-axis along the right edge of the chart.
-    axisTop : :class:`AxisConfig`
-        Specific axis config for x-axis along the top edge of the chart.
-    axisX : :class:`AxisConfig`
-        X-axis specific config.
-    axisY : :class:`AxisConfig`
-        Y-axis specific config.
-    background : string
-        CSS color property to use as the background of the whole Vega-Lite view
-
-        **Default value:** none (transparent)
-    bar : :class:`RectConfig`
-        Bar-Specific Config
-    boxplot : :class:`BoxPlotConfig`
-        Box Config
-    circle : :class:`MarkConfig`
-        Circle-Specific Config
-    concat : :class:`CompositionConfig`
-        Default configuration for all concatenation view composition operators ( ``concat``,
-        ``hconcat``, and ``vconcat`` )
-    countTitle : string
-        Default axis and legend title for count fields.
-
-        **Default value:** ``'Count of Records``.
-    errorband : :class:`ErrorBandConfig`
-        ErrorBand Config
-    errorbar : :class:`ErrorBarConfig`
-        ErrorBar Config
-    facet : :class:`CompositionConfig`
-        Default configuration for the ``facet`` view composition operator
-    fieldTitle : enum('verbal', 'functional', 'plain')
-        Defines how Vega-Lite generates title for fields.  There are three possible styles:
-
-
-        * ``"verbal"`` (Default) - displays function in a verbal style (e.g., "Sum of
-          field", "Year-month of date", "field (binned)").
-        * ``"function"`` - displays function using parentheses and capitalized texts (e.g.,
-          "SUM(field)", "YEARMONTH(date)", "BIN(field)").
-        * ``"plain"`` - displays only the field name without functions (e.g., "field",
-          "date", "field").
-    geoshape : :class:`MarkConfig`
-        Geoshape-Specific Config
-    header : :class:`HeaderConfig`
-        Header configuration, which determines default properties for all `headers
-        <https://vega.github.io/vega-lite/docs/header.html>`__.
-
-        For a full list of header configuration options, please see the `corresponding
-        section of in the header documentation
-        <https://vega.github.io/vega-lite/docs/header.html#config>`__.
-    headerColumn : :class:`HeaderConfig`
-        Header configuration, which determines default properties for column `headers
-        <https://vega.github.io/vega-lite/docs/header.html>`__.
-
-        For a full list of header configuration options, please see the `corresponding
-        section of in the header documentation
-        <https://vega.github.io/vega-lite/docs/header.html#config>`__.
-    headerFacet : :class:`HeaderConfig`
-        Header configuration, which determines default properties for non-row/column facet
-        `headers <https://vega.github.io/vega-lite/docs/header.html>`__.
-
-        For a full list of header configuration options, please see the `corresponding
-        section of in the header documentation
-        <https://vega.github.io/vega-lite/docs/header.html#config>`__.
-    headerRow : :class:`HeaderConfig`
-        Header configuration, which determines default properties for row `headers
-        <https://vega.github.io/vega-lite/docs/header.html>`__.
-
-        For a full list of header configuration options, please see the `corresponding
-        section of in the header documentation
-        <https://vega.github.io/vega-lite/docs/header.html#config>`__.
-    invalidValues : enum('filter', None)
-        Defines how Vega-Lite should handle invalid values ( ``null`` and ``NaN`` ).
-
-
-        * If set to ``"filter"`` (default), all data items with null values will be skipped
-          (for line, trail, and area marks) or filtered (for other marks).
-        * If ``null``, all data items are included. In this case, invalid values will be
-          interpreted as zeroes.
-    legend : :class:`LegendConfig`
-        Legend configuration, which determines default properties for all `legends
-        <https://vega.github.io/vega-lite/docs/legend.html>`__. For a full list of legend
-        configuration options, please see the `corresponding section of in the legend
-        documentation <https://vega.github.io/vega-lite/docs/legend.html#config>`__.
-    line : :class:`LineConfig`
-        Line-Specific Config
-    mark : :class:`MarkConfig`
-        Mark Config
-    numberFormat : string
-        D3 Number format for guide labels and text marks. For example "s" for SI units. Use
-        `D3's number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    point : :class:`MarkConfig`
-        Point-Specific Config
-    projection : :class:`ProjectionConfig`
-        Projection configuration, which determines default properties for all `projections
-        <https://vega.github.io/vega-lite/docs/projection.html>`__. For a full list of
-        projection configuration options, please see the `corresponding section of the
-        projection documentation
-        <https://vega.github.io/vega-lite/docs/projection.html#config>`__.
-    range : :class:`RangeConfig`
-        An object hash that defines default range arrays or schemes for using with scales.
-        For a full list of scale range configuration options, please see the `corresponding
-        section of the scale documentation
-        <https://vega.github.io/vega-lite/docs/scale.html#config>`__.
-    rect : :class:`RectConfig`
-        Rect-Specific Config
-    repeat : :class:`CompositionConfig`
-        Default configuration for the ``repeat`` view composition operator
-    rule : :class:`MarkConfig`
-        Rule-Specific Config
-    scale : :class:`ScaleConfig`
-        Scale configuration determines default properties for all `scales
-        <https://vega.github.io/vega-lite/docs/scale.html>`__. For a full list of scale
-        configuration options, please see the `corresponding section of the scale
-        documentation <https://vega.github.io/vega-lite/docs/scale.html#config>`__.
-    selection : :class:`SelectionConfig`
-        An object hash for defining default properties for each type of selections.
-    square : :class:`MarkConfig`
-        Square-Specific Config
-    stack : :class:`StackOffset`
-        Default stack offset for stackable mark.
-    style : :class:`StyleConfigIndex`
-        An object hash that defines key-value mappings to determine default properties for
-        marks with a given `style
-        <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.  The keys represent
-        styles names; the values have to be valid `mark configuration objects
-        <https://vega.github.io/vega-lite/docs/mark.html#config>`__.
-    text : :class:`TextConfig`
-        Text-Specific Config
-    tick : :class:`TickConfig`
-        Tick-Specific Config
-    timeFormat : string
-        Default time format for raw time values (without time units) in text marks, legend
-        labels and header labels.
-
-        **Default value:** ``"%b %d, %Y"``
-        **Note:** Axes automatically determine format each label automatically so this
-        config would not affect axes.
-    title : :class:`TitleConfig`
-        Title configuration, which determines default properties for all `titles
-        <https://vega.github.io/vega-lite/docs/title.html>`__. For a full list of title
-        configuration options, please see the `corresponding section of the title
-        documentation <https://vega.github.io/vega-lite/docs/title.html#config>`__.
-    trail : :class:`LineConfig`
-        Trail-Specific Config
-    view : :class:`ViewConfig`
-        Default properties for `single view plots
-        <https://vega.github.io/vega-lite/docs/spec.html#single>`__.
-    """
-    _schema = {'$ref': '#/definitions/Config'}
-
-    def __init__(self, area=Undefined, autosize=Undefined, axis=Undefined, axisBand=Undefined,
-                 axisBottom=Undefined, axisLeft=Undefined, axisRight=Undefined, axisTop=Undefined,
-                 axisX=Undefined, axisY=Undefined, background=Undefined, bar=Undefined,
-                 boxplot=Undefined, circle=Undefined, concat=Undefined, countTitle=Undefined,
-                 errorband=Undefined, errorbar=Undefined, facet=Undefined, fieldTitle=Undefined,
-                 geoshape=Undefined, header=Undefined, headerColumn=Undefined, headerFacet=Undefined,
-                 headerRow=Undefined, invalidValues=Undefined, legend=Undefined, line=Undefined,
-                 mark=Undefined, numberFormat=Undefined, padding=Undefined, point=Undefined,
-                 projection=Undefined, range=Undefined, rect=Undefined, repeat=Undefined,
-                 rule=Undefined, scale=Undefined, selection=Undefined, square=Undefined,
-                 stack=Undefined, style=Undefined, text=Undefined, tick=Undefined, timeFormat=Undefined,
-                 title=Undefined, trail=Undefined, view=Undefined, **kwds):
-        super(Config, self).__init__(area=area, autosize=autosize, axis=axis, axisBand=axisBand,
-                                     axisBottom=axisBottom, axisLeft=axisLeft, axisRight=axisRight,
-                                     axisTop=axisTop, axisX=axisX, axisY=axisY, background=background,
-                                     bar=bar, boxplot=boxplot, circle=circle, concat=concat,
-                                     countTitle=countTitle, errorband=errorband, errorbar=errorbar,
-                                     facet=facet, fieldTitle=fieldTitle, geoshape=geoshape,
-                                     header=header, headerColumn=headerColumn, headerFacet=headerFacet,
-                                     headerRow=headerRow, invalidValues=invalidValues, legend=legend,
-                                     line=line, mark=mark, numberFormat=numberFormat, padding=padding,
-                                     point=point, projection=projection, range=range, rect=rect,
-                                     repeat=repeat, rule=rule, scale=scale, selection=selection,
-                                     square=square, stack=stack, style=style, text=text, tick=tick,
-                                     timeFormat=timeFormat, title=title, trail=trail, view=view, **kwds)
-
-
-class Cursor(VegaLiteSchema):
-    """Cursor schema wrapper
-
-    enum('auto', 'default', 'none', 'context-menu', 'help', 'pointer', 'progress', 'wait',
-    'cell', 'crosshair', 'text', 'vertical-text', 'alias', 'copy', 'move', 'no-drop',
-    'not-allowed', 'e-resize', 'n-resize', 'ne-resize', 'nw-resize', 's-resize', 'se-resize',
-    'sw-resize', 'w-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize',
-    'col-resize', 'row-resize', 'all-scroll', 'zoom-in', 'zoom-out', 'grab', 'grabbing')
-    """
-    _schema = {'$ref': '#/definitions/Cursor'}
-
-    def __init__(self, *args):
-        super(Cursor, self).__init__(*args)
-
-
-class Data(VegaLiteSchema):
-    """Data schema wrapper
-
-    anyOf(:class:`DataSource`, :class:`Generator`)
-    """
-    _schema = {'$ref': '#/definitions/Data'}
-
-    def __init__(self, *args, **kwds):
-        super(Data, self).__init__(*args, **kwds)
-
-
-class DataFormat(VegaLiteSchema):
-    """DataFormat schema wrapper
-
-    anyOf(:class:`CsvDataFormat`, :class:`DsvDataFormat`, :class:`JsonDataFormat`,
-    :class:`TopoDataFormat`)
-    """
-    _schema = {'$ref': '#/definitions/DataFormat'}
-
-    def __init__(self, *args, **kwds):
-        super(DataFormat, self).__init__(*args, **kwds)
-
-
-class CsvDataFormat(DataFormat):
-    """CsvDataFormat schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    parse : anyOf(:class:`Parse`, None)
-        If set to ``null``, disable type inference based on the spec and only use type
-        inference based on the data.
-        Alternatively, a parsing directive object can be provided for explicit data types.
-        Each property of the object corresponds to a field name, and the value to the
-        desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not
-        parse the field)).
-        For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field
-        in each input record a Date value.
-
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
-        <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
-        For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
-        the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
-        UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ).
-        See more about `UTC time
-        <https://vega.github.io/vega-lite/docs/timeunit.html#utc>`__
-    type : enum('csv', 'tsv')
-        Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``.
-
-        **Default value:**  The default format type is determined by the extension of the
-        file URL.
-        If no extension is detected, ``"json"`` will be used by default.
-    """
-    _schema = {'$ref': '#/definitions/CsvDataFormat'}
-
-    def __init__(self, parse=Undefined, type=Undefined, **kwds):
-        super(CsvDataFormat, self).__init__(parse=parse, type=type, **kwds)
-
-
-class DataSource(Data):
-    """DataSource schema wrapper
-
-    anyOf(:class:`UrlData`, :class:`InlineData`, :class:`NamedData`)
-    """
-    _schema = {'$ref': '#/definitions/DataSource'}
-
-    def __init__(self, *args, **kwds):
-        super(DataSource, self).__init__(*args, **kwds)
-
-
-class Datasets(VegaLiteSchema):
-    """Datasets schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/definitions/Datasets'}
-
-    def __init__(self, **kwds):
-        super(Datasets, self).__init__(**kwds)
-
-
-class Day(VegaLiteSchema):
-    """Day schema wrapper
-
-    float
-    """
-    _schema = {'$ref': '#/definitions/Day'}
-
-    def __init__(self, *args):
-        super(Day, self).__init__(*args)
-
-
-class DictInlineDataset(VegaLiteSchema):
-    """DictInlineDataset schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/definitions/Dict<InlineDataset>'}
-
-    def __init__(self, **kwds):
-        super(DictInlineDataset, self).__init__(**kwds)
-
-
-class Dir(VegaLiteSchema):
-    """Dir schema wrapper
-
-    enum('ltr', 'rtl')
-    """
-    _schema = {'$ref': '#/definitions/Dir'}
-
-    def __init__(self, *args):
-        super(Dir, self).__init__(*args)
-
-
-class DsvDataFormat(DataFormat):
-    """DsvDataFormat schema wrapper
-
-    Mapping(required=[delimiter])
-
-    Attributes
-    ----------
-
-    delimiter : string
-        The delimiter between records. The delimiter must be a single character (i.e., a
-        single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are
-        not.
-    parse : anyOf(:class:`Parse`, None)
-        If set to ``null``, disable type inference based on the spec and only use type
-        inference based on the data.
-        Alternatively, a parsing directive object can be provided for explicit data types.
-        Each property of the object corresponds to a field name, and the value to the
-        desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not
-        parse the field)).
-        For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field
-        in each input record a Date value.
-
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
-        <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
-        For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
-        the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
-        UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ).
-        See more about `UTC time
-        <https://vega.github.io/vega-lite/docs/timeunit.html#utc>`__
-    type : enum('dsv')
-        Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``.
-
-        **Default value:**  The default format type is determined by the extension of the
-        file URL.
-        If no extension is detected, ``"json"`` will be used by default.
-    """
-    _schema = {'$ref': '#/definitions/DsvDataFormat'}
-
-    def __init__(self, delimiter=Undefined, parse=Undefined, type=Undefined, **kwds):
-        super(DsvDataFormat, self).__init__(delimiter=delimiter, parse=parse, type=type, **kwds)
-
-
-class Element(VegaLiteSchema):
-    """Element schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/definitions/Element'}
-
-    def __init__(self, *args):
-        super(Element, self).__init__(*args)
-
-
-class Encoding(VegaLiteSchema):
-    """Encoding schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    color : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
-        Color of the marks – either fill or stroke color based on  the ``filled`` property
-        of mark definition.
-        By default, ``color`` represents fill color for ``"area"``, ``"bar"``, ``"tick"``,
-        ``"text"``, ``"trail"``, ``"circle"``, and ``"square"`` / stroke color for
-        ``"line"`` and ``"point"``.
-
-        **Default value:** If undefined, the default color depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``color`` property.
-
-        *Note:*
-        1) For fine-grained control over both fill and stroke colors of the marks, please
-        use the ``fill`` and ``stroke`` channels.  If either ``fill`` or ``stroke`` channel
-        is specified, ``color`` channel will be ignored.
-        2) See the scale documentation for more information about customizing `color scheme
-        <https://vega.github.io/vega-lite/docs/scale.html#scheme>`__.
-    detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`))
-        Additional levels of detail for grouping data in aggregate views and
-        in line, trail, and area marks without mapping data to a specific visual channel.
-    fill : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
-        Fill color of the marks.
-        **Default value:** If undefined, the default color depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``color`` property.
-
-        *Note:* When using ``fill`` channel, ``color`` channel will be ignored. To customize
-        both fill and stroke, please use ``fill`` and ``stroke`` channels (not ``fill`` and
-        ``color`` ).
-    fillOpacity : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Fill opacity of the marks.
-
-        **Default value:** If undefined, the default opacity depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``fillOpacity``
-        property.
-    href : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`)
-        A URL to load upon mouse click.
-    key : :class:`FieldDefWithoutScale`
-        A data field to use as a unique key for data binding. When a visualization’s data is
-        updated, the key value will be used to match data elements to existing mark
-        instances. Use a key channel to enable object constancy for transitions over dynamic
-        data.
-    latitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`)
-        Latitude position of geographically projected marks.
-    latitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Latitude-2 position for geographically projected ranged ``"area"``, ``"bar"``,
-        ``"rect"``, and  ``"rule"``.
-    longitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`)
-        Longitude position of geographically projected marks.
-    longitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Longitude-2 position for geographically projected ranged ``"area"``, ``"bar"``,
-        ``"rect"``, and  ``"rule"``.
-    opacity : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Opacity of the marks.
-
-        **Default value:** If undefined, the default opacity depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``opacity`` property.
-    order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`NumberValueDef`)
-        Order of the marks.
-
-
-        * For stacked marks, this ``order`` channel encodes `stack order
-          <https://vega.github.io/vega-lite/docs/stack.html#order>`__.
-        * For line and trail marks, this ``order`` channel encodes order of data points in
-          the lines. This can be useful for creating `a connected scatterplot
-          <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__.
-          Setting ``order`` to ``{"value": null}`` makes the line marks use the original
-          order in the data sources.
-        * Otherwise, this ``order`` channel encodes layer order of the marks.
-
-        **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid
-        creating additional aggregation grouping.
-    shape : anyOf(:class:`ShapeFieldDefWithCondition`, :class:`ShapeValueDefWithCondition`)
-        Shape of the mark.
-
-
-        #.
-        For ``point`` marks the supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-        ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-        ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-        <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-        sizing, custom shape paths should be defined within a square bounding box with
-        coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        #.
-        For ``geoshape`` marks it should be a field definition of the geojson data
-
-        **Default value:** If undefined, the default shape depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#point-config>`__ 's ``shape``
-        property. ( ``"circle"`` if unset.)
-    size : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`)
-        Size of the mark.
-
-
-        * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area
-          of the mark.
-        * For ``"bar"`` and ``"tick"`` – the bar and tick's size.
-        * For ``"text"`` – the text's font size.
-        * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"``
-          instead of line with varying size)
-    stroke : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
-        Stroke color of the marks.
-        **Default value:** If undefined, the default color depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``color`` property.
-
-        *Note:* When using ``stroke`` channel, ``color`` channel will be ignored. To
-        customize both stroke and fill, please use ``stroke`` and ``fill`` channels (not
-        ``stroke`` and ``color`` ).
-    strokeOpacity : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Stroke opacity of the marks.
-
-        **Default value:** If undefined, the default opacity depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``strokeOpacity``
-        property.
-    strokeWidth : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Stroke width of the marks.
-
-        **Default value:** If undefined, the default stroke width depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``strokeWidth``
-        property.
-    text : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`)
-        Text of the ``text`` mark.
-    tooltip : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`,
-    List(:class:`TextFieldDef`), None)
-        The tooltip text to show upon mouse hover.
-    x : anyOf(:class:`PositionFieldDef`, :class:`XValueDef`)
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(:class:`SecondaryFieldDef`, :class:`XValueDef`)
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    xError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``.
-    xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Secondary error value of x coordinates for error specified ``"errorbar"`` and
-        ``"errorband"``.
-    y : anyOf(:class:`PositionFieldDef`, :class:`YValueDef`)
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(:class:`SecondaryFieldDef`, :class:`YValueDef`)
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    yError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``.
-    yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Secondary error value of y coordinates for error specified ``"errorbar"`` and
-        ``"errorband"``.
-    """
-    _schema = {'$ref': '#/definitions/Encoding'}
-
-    def __init__(self, color=Undefined, detail=Undefined, fill=Undefined, fillOpacity=Undefined,
-                 href=Undefined, key=Undefined, latitude=Undefined, latitude2=Undefined,
-                 longitude=Undefined, longitude2=Undefined, opacity=Undefined, order=Undefined,
-                 shape=Undefined, size=Undefined, stroke=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, text=Undefined, tooltip=Undefined, x=Undefined, x2=Undefined,
-                 xError=Undefined, xError2=Undefined, y=Undefined, y2=Undefined, yError=Undefined,
-                 yError2=Undefined, **kwds):
-        super(Encoding, self).__init__(color=color, detail=detail, fill=fill, fillOpacity=fillOpacity,
-                                       href=href, key=key, latitude=latitude, latitude2=latitude2,
-                                       longitude=longitude, longitude2=longitude2, opacity=opacity,
-                                       order=order, shape=shape, size=size, stroke=stroke,
-                                       strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, text=text,
-                                       tooltip=tooltip, x=x, x2=x2, xError=xError, xError2=xError2, y=y,
-                                       y2=y2, yError=yError, yError2=yError2, **kwds)
-
-
-class ErrorBand(CompositeMark):
-    """ErrorBand schema wrapper
-
-    enum('errorband')
-    """
-    _schema = {'$ref': '#/definitions/ErrorBand'}
-
-    def __init__(self, *args):
-        super(ErrorBand, self).__init__(*args)
-
-
-class ErrorBandConfig(VegaLiteSchema):
-    """ErrorBandConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : anyOf(boolean, :class:`MarkConfig`)
-
-    borders : anyOf(boolean, :class:`MarkConfig`)
-
-    extent : :class:`ErrorBarExtent`
-        The extent of the band. Available options include:
-
-
-        * ``"ci"`` : Extend the band to the confidence interval of the mean.
-        * ``"stderr"`` : The size of band are set to the value of standard error, extending
-          from the mean.
-        * ``"stdev"`` : The size of band are set to the value of standard deviation,
-          extending from the mean.
-        * ``"iqr"`` : Extend the band to the q1 and q3.
-
-        **Default value:** ``"stderr"``.
-    interpolate : :class:`Interpolate`
-        The line interpolation method for the error band. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : a piecewise constant function (a step function) consisting of
-          alternating horizontal and vertical lines. The y-value changes at the midpoint of
-          each pair of adjacent x-values.
-        * ``"step-before"`` : a piecewise constant function (a step function) consisting of
-          alternating horizontal and vertical lines. The y-value changes before the x-value.
-        * ``"step-after"`` : a piecewise constant function (a step function) consisting of
-          alternating horizontal and vertical lines. The y-value changes after the x-value.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    tension : float
-        The tension parameter for the interpolation type of the error band.
-    """
-    _schema = {'$ref': '#/definitions/ErrorBandConfig'}
-
-    def __init__(self, band=Undefined, borders=Undefined, extent=Undefined, interpolate=Undefined,
-                 tension=Undefined, **kwds):
-        super(ErrorBandConfig, self).__init__(band=band, borders=borders, extent=extent,
-                                              interpolate=interpolate, tension=tension, **kwds)
-
-
-class ErrorBandDef(CompositeMarkDef):
-    """ErrorBandDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`ErrorBand`
-        The mark type. This could a primitive mark type
-        (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` )
-        or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ).
-    band : anyOf(boolean, :class:`MarkConfig`)
-
-    borders : anyOf(boolean, :class:`MarkConfig`)
-
-    clip : boolean
-        Whether a composite mark be clipped to the enclosing group’s width and height.
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    extent : :class:`ErrorBarExtent`
-        The extent of the band. Available options include:
-
-
-        * ``"ci"`` : Extend the band to the confidence interval of the mean.
-        * ``"stderr"`` : The size of band are set to the value of standard error, extending
-          from the mean.
-        * ``"stdev"`` : The size of band are set to the value of standard deviation,
-          extending from the mean.
-        * ``"iqr"`` : Extend the band to the q1 and q3.
-
-        **Default value:** ``"stderr"``.
-    interpolate : :class:`Interpolate`
-        The line interpolation method for the error band. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : a piecewise constant function (a step function) consisting of
-          alternating horizontal and vertical lines. The y-value changes at the midpoint of
-          each pair of adjacent x-values.
-        * ``"step-before"`` : a piecewise constant function (a step function) consisting of
-          alternating horizontal and vertical lines. The y-value changes before the x-value.
-        * ``"step-after"`` : a piecewise constant function (a step function) consisting of
-          alternating horizontal and vertical lines. The y-value changes after the x-value.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    opacity : float
-        The opacity (value between [0,1]) of the mark.
-    orient : :class:`Orientation`
-        Orientation of the error band. This is normally automatically determined, but can be
-        specified when the orientation is ambiguous and cannot be automatically determined.
-    tension : float
-        The tension parameter for the interpolation type of the error band.
-    """
-    _schema = {'$ref': '#/definitions/ErrorBandDef'}
-
-    def __init__(self, type=Undefined, band=Undefined, borders=Undefined, clip=Undefined,
-                 color=Undefined, extent=Undefined, interpolate=Undefined, opacity=Undefined,
-                 orient=Undefined, tension=Undefined, **kwds):
-        super(ErrorBandDef, self).__init__(type=type, band=band, borders=borders, clip=clip,
-                                           color=color, extent=extent, interpolate=interpolate,
-                                           opacity=opacity, orient=orient, tension=tension, **kwds)
-
-
-class ErrorBar(CompositeMark):
-    """ErrorBar schema wrapper
-
-    enum('errorbar')
-    """
-    _schema = {'$ref': '#/definitions/ErrorBar'}
-
-    def __init__(self, *args):
-        super(ErrorBar, self).__init__(*args)
-
-
-class ErrorBarConfig(VegaLiteSchema):
-    """ErrorBarConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    extent : :class:`ErrorBarExtent`
-        The extent of the rule. Available options include:
-
-
-        * ``"ci"`` : Extend the rule to the confidence interval of the mean.
-        * ``"stderr"`` : The size of rule are set to the value of standard error, extending
-          from the mean.
-        * ``"stdev"`` : The size of rule are set to the value of standard deviation,
-          extending from the mean.
-        * ``"iqr"`` : Extend the rule to the q1 and q3.
-
-        **Default value:** ``"stderr"``.
-    rule : anyOf(boolean, :class:`MarkConfig`)
-
-    ticks : anyOf(boolean, :class:`MarkConfig`)
-
-    """
-    _schema = {'$ref': '#/definitions/ErrorBarConfig'}
-
-    def __init__(self, extent=Undefined, rule=Undefined, ticks=Undefined, **kwds):
-        super(ErrorBarConfig, self).__init__(extent=extent, rule=rule, ticks=ticks, **kwds)
-
-
-class ErrorBarDef(CompositeMarkDef):
-    """ErrorBarDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`ErrorBar`
-        The mark type. This could a primitive mark type
-        (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` )
-        or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ).
-    clip : boolean
-        Whether a composite mark be clipped to the enclosing group’s width and height.
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    extent : :class:`ErrorBarExtent`
-        The extent of the rule. Available options include:
-
-
-        * ``"ci"`` : Extend the rule to the confidence interval of the mean.
-        * ``"stderr"`` : The size of rule are set to the value of standard error, extending
-          from the mean.
-        * ``"stdev"`` : The size of rule are set to the value of standard deviation,
-          extending from the mean.
-        * ``"iqr"`` : Extend the rule to the q1 and q3.
-
-        **Default value:** ``"stderr"``.
-    opacity : float
-        The opacity (value between [0,1]) of the mark.
-    orient : :class:`Orientation`
-        Orientation of the error bar.  This is normally automatically determined, but can be
-        specified when the orientation is ambiguous and cannot be automatically determined.
-    rule : anyOf(boolean, :class:`MarkConfig`)
-
-    ticks : anyOf(boolean, :class:`MarkConfig`)
-
-    """
-    _schema = {'$ref': '#/definitions/ErrorBarDef'}
-
-    def __init__(self, type=Undefined, clip=Undefined, color=Undefined, extent=Undefined,
-                 opacity=Undefined, orient=Undefined, rule=Undefined, ticks=Undefined, **kwds):
-        super(ErrorBarDef, self).__init__(type=type, clip=clip, color=color, extent=extent,
-                                          opacity=opacity, orient=orient, rule=rule, ticks=ticks, **kwds)
-
-
-class ErrorBarExtent(VegaLiteSchema):
-    """ErrorBarExtent schema wrapper
-
-    enum('ci', 'iqr', 'stderr', 'stdev')
-    """
-    _schema = {'$ref': '#/definitions/ErrorBarExtent'}
-
-    def __init__(self, *args):
-        super(ErrorBarExtent, self).__init__(*args)
-
-
-class EventStream(VegaLiteSchema):
-    """EventStream schema wrapper
-
-    Any
-    """
-    _schema = {'$ref': '#/definitions/EventStream'}
-
-    def __init__(self, *args, **kwds):
-        super(EventStream, self).__init__(*args, **kwds)
-
-
-class FacetFieldDef(VegaLiteSchema):
-    """FacetFieldDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/FacetFieldDef'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(FacetFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field,
-                                            header=header, sort=sort, timeUnit=timeUnit, title=title,
-                                            **kwds)
-
-
-class FacetMapping(VegaLiteSchema):
-    """FacetMapping schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    column : :class:`FacetFieldDef`
-        A field definition for the horizontal facet of trellis plots.
-    row : :class:`FacetFieldDef`
-        A field definition for the vertical facet of trellis plots.
-    """
-    _schema = {'$ref': '#/definitions/FacetMapping'}
-
-    def __init__(self, column=Undefined, row=Undefined, **kwds):
-        super(FacetMapping, self).__init__(column=column, row=row, **kwds)
-
-
-class FacetedEncoding(VegaLiteSchema):
-    """FacetedEncoding schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    color : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
-        Color of the marks – either fill or stroke color based on  the ``filled`` property
-        of mark definition.
-        By default, ``color`` represents fill color for ``"area"``, ``"bar"``, ``"tick"``,
-        ``"text"``, ``"trail"``, ``"circle"``, and ``"square"`` / stroke color for
-        ``"line"`` and ``"point"``.
-
-        **Default value:** If undefined, the default color depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``color`` property.
-
-        *Note:*
-        1) For fine-grained control over both fill and stroke colors of the marks, please
-        use the ``fill`` and ``stroke`` channels.  If either ``fill`` or ``stroke`` channel
-        is specified, ``color`` channel will be ignored.
-        2) See the scale documentation for more information about customizing `color scheme
-        <https://vega.github.io/vega-lite/docs/scale.html#scheme>`__.
-    column : :class:`FacetFieldDef`
-        A field definition for the horizontal facet of trellis plots.
-    detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`))
-        Additional levels of detail for grouping data in aggregate views and
-        in line, trail, and area marks without mapping data to a specific visual channel.
-    facet : :class:`FacetFieldDef`
-        A field definition for the (flexible) facet of trellis plots.
-
-        If either ``row`` or ``column`` is specified, this channel will be ignored.
-    fill : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
-        Fill color of the marks.
-        **Default value:** If undefined, the default color depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``color`` property.
-
-        *Note:* When using ``fill`` channel, ``color`` channel will be ignored. To customize
-        both fill and stroke, please use ``fill`` and ``stroke`` channels (not ``fill`` and
-        ``color`` ).
-    fillOpacity : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Fill opacity of the marks.
-
-        **Default value:** If undefined, the default opacity depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``fillOpacity``
-        property.
-    href : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`)
-        A URL to load upon mouse click.
-    key : :class:`FieldDefWithoutScale`
-        A data field to use as a unique key for data binding. When a visualization’s data is
-        updated, the key value will be used to match data elements to existing mark
-        instances. Use a key channel to enable object constancy for transitions over dynamic
-        data.
-    latitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`)
-        Latitude position of geographically projected marks.
-    latitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Latitude-2 position for geographically projected ranged ``"area"``, ``"bar"``,
-        ``"rect"``, and  ``"rule"``.
-    longitude : anyOf(:class:`LatLongFieldDef`, :class:`NumberValueDef`)
-        Longitude position of geographically projected marks.
-    longitude2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Longitude-2 position for geographically projected ranged ``"area"``, ``"bar"``,
-        ``"rect"``, and  ``"rule"``.
-    opacity : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Opacity of the marks.
-
-        **Default value:** If undefined, the default opacity depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``opacity`` property.
-    order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`NumberValueDef`)
-        Order of the marks.
-
-
-        * For stacked marks, this ``order`` channel encodes `stack order
-          <https://vega.github.io/vega-lite/docs/stack.html#order>`__.
-        * For line and trail marks, this ``order`` channel encodes order of data points in
-          the lines. This can be useful for creating `a connected scatterplot
-          <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__.
-          Setting ``order`` to ``{"value": null}`` makes the line marks use the original
-          order in the data sources.
-        * Otherwise, this ``order`` channel encodes layer order of the marks.
-
-        **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid
-        creating additional aggregation grouping.
-    row : :class:`FacetFieldDef`
-        A field definition for the vertical facet of trellis plots.
-    shape : anyOf(:class:`ShapeFieldDefWithCondition`, :class:`ShapeValueDefWithCondition`)
-        Shape of the mark.
-
-
-        #.
-        For ``point`` marks the supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-        ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-        ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-        <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-        sizing, custom shape paths should be defined within a square bounding box with
-        coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        #.
-        For ``geoshape`` marks it should be a field definition of the geojson data
-
-        **Default value:** If undefined, the default shape depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#point-config>`__ 's ``shape``
-        property. ( ``"circle"`` if unset.)
-    size : anyOf(:class:`NumericFieldDefWithCondition`, :class:`NumericValueDefWithCondition`)
-        Size of the mark.
-
-
-        * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area
-          of the mark.
-        * For ``"bar"`` and ``"tick"`` – the bar and tick's size.
-        * For ``"text"`` – the text's font size.
-        * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"``
-          instead of line with varying size)
-    stroke : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
-        Stroke color of the marks.
-        **Default value:** If undefined, the default color depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``color`` property.
-
-        *Note:* When using ``stroke`` channel, ``color`` channel will be ignored. To
-        customize both stroke and fill, please use ``stroke`` and ``fill`` channels (not
-        ``stroke`` and ``color`` ).
-    strokeOpacity : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Stroke opacity of the marks.
-
-        **Default value:** If undefined, the default opacity depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``strokeOpacity``
-        property.
-    strokeWidth : anyOf(:class:`NumericFieldDefWithCondition`,
-    :class:`NumericValueDefWithCondition`)
-        Stroke width of the marks.
-
-        **Default value:** If undefined, the default stroke width depends on `mark config
-        <https://vega.github.io/vega-lite/docs/config.html#mark>`__ 's ``strokeWidth``
-        property.
-    text : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`)
-        Text of the ``text`` mark.
-    tooltip : anyOf(:class:`TextFieldDefWithCondition`, :class:`TextValueDefWithCondition`,
-    List(:class:`TextFieldDef`), None)
-        The tooltip text to show upon mouse hover.
-    x : anyOf(:class:`PositionFieldDef`, :class:`XValueDef`)
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(:class:`SecondaryFieldDef`, :class:`XValueDef`)
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    xError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Error value of x coordinates for error specified ``"errorbar"`` and ``"errorband"``.
-    xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Secondary error value of x coordinates for error specified ``"errorbar"`` and
-        ``"errorband"``.
-    y : anyOf(:class:`PositionFieldDef`, :class:`YValueDef`)
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(:class:`SecondaryFieldDef`, :class:`YValueDef`)
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    yError : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Error value of y coordinates for error specified ``"errorbar"`` and ``"errorband"``.
-    yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`NumberValueDef`)
-        Secondary error value of y coordinates for error specified ``"errorbar"`` and
-        ``"errorband"``.
-    """
-    _schema = {'$ref': '#/definitions/FacetedEncoding'}
-
-    def __init__(self, color=Undefined, column=Undefined, detail=Undefined, facet=Undefined,
-                 fill=Undefined, fillOpacity=Undefined, href=Undefined, key=Undefined,
-                 latitude=Undefined, latitude2=Undefined, longitude=Undefined, longitude2=Undefined,
-                 opacity=Undefined, order=Undefined, row=Undefined, shape=Undefined, size=Undefined,
-                 stroke=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined,
-                 tooltip=Undefined, x=Undefined, x2=Undefined, xError=Undefined, xError2=Undefined,
-                 y=Undefined, y2=Undefined, yError=Undefined, yError2=Undefined, **kwds):
-        super(FacetedEncoding, self).__init__(color=color, column=column, detail=detail, facet=facet,
-                                              fill=fill, fillOpacity=fillOpacity, href=href, key=key,
-                                              latitude=latitude, latitude2=latitude2,
-                                              longitude=longitude, longitude2=longitude2,
-                                              opacity=opacity, order=order, row=row, shape=shape,
-                                              size=size, stroke=stroke, strokeOpacity=strokeOpacity,
-                                              strokeWidth=strokeWidth, text=text, tooltip=tooltip, x=x,
-                                              x2=x2, xError=xError, xError2=xError2, y=y, y2=y2,
-                                              yError=yError, yError2=yError2, **kwds)
-
-
-class Field(VegaLiteSchema):
-    """Field schema wrapper
-
-    anyOf(:class:`FieldName`, :class:`RepeatRef`)
-    """
-    _schema = {'$ref': '#/definitions/Field'}
-
-    def __init__(self, *args, **kwds):
-        super(Field, self).__init__(*args, **kwds)
-
-
-class FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull(VegaLiteSchema):
-    """FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`TypeForShape`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/FieldDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(FieldDefWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(type=type,
-                                                                                          aggregate=aggregate,
-                                                                                          bin=bin,
-                                                                                          condition=condition,
-                                                                                          field=field,
-                                                                                          legend=legend,
-                                                                                          scale=scale,
-                                                                                          sort=sort,
-                                                                                          timeUnit=timeUnit,
-                                                                                          title=title,
-                                                                                          **kwds)
-
-
-class FieldDefWithConditionMarkPropFieldDefnumber(VegaLiteSchema):
-    """FieldDefWithConditionMarkPropFieldDefnumber schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/FieldDefWithCondition<MarkPropFieldDef,number>'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(FieldDefWithConditionMarkPropFieldDefnumber, self).__init__(type=type,
-                                                                          aggregate=aggregate, bin=bin,
-                                                                          condition=condition,
-                                                                          field=field, legend=legend,
-                                                                          scale=scale, sort=sort,
-                                                                          timeUnit=timeUnit,
-                                                                          title=title, **kwds)
-
-
-class FieldDefWithConditionMarkPropFieldDefstringnull(VegaLiteSchema):
-    """FieldDefWithConditionMarkPropFieldDefstringnull schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/FieldDefWithCondition<MarkPropFieldDef,(string|null)>'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(FieldDefWithConditionMarkPropFieldDefstringnull, self).__init__(type=type,
-                                                                              aggregate=aggregate,
-                                                                              bin=bin,
-                                                                              condition=condition,
-                                                                              field=field,
-                                                                              legend=legend,
-                                                                              scale=scale, sort=sort,
-                                                                              timeUnit=timeUnit,
-                                                                              title=title, **kwds)
-
-
-class FieldDefWithConditionTextFieldDefValue(VegaLiteSchema):
-    """FieldDefWithConditionTextFieldDefValue schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/FieldDefWithCondition<TextFieldDef,Value>'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(FieldDefWithConditionTextFieldDefValue, self).__init__(type=type, aggregate=aggregate,
-                                                                     bin=bin, condition=condition,
-                                                                     field=field, format=format,
-                                                                     formatType=formatType,
-                                                                     timeUnit=timeUnit, title=title,
-                                                                     **kwds)
-
-
-class FieldDefWithoutScale(VegaLiteSchema):
-    """FieldDefWithoutScale schema wrapper
-
-    Mapping(required=[type])
-    Definition object for a data field, its type and transformation of an encoding channel.
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/FieldDefWithoutScale'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(FieldDefWithoutScale, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field,
-                                                   timeUnit=timeUnit, title=title, **kwds)
-
-
-class FieldName(Field):
-    """FieldName schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/definitions/FieldName'}
-
-    def __init__(self, *args):
-        super(FieldName, self).__init__(*args)
-
-
-class FontStyle(VegaLiteSchema):
-    """FontStyle schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/definitions/FontStyle'}
-
-    def __init__(self, *args):
-        super(FontStyle, self).__init__(*args)
-
-
-class FontWeight(VegaLiteSchema):
-    """FontWeight schema wrapper
-
-    enum('normal', 'bold', 'lighter', 'bolder', 100, 200, 300, 400, 500, 600, 700, 800, 900)
-    """
-    _schema = {'$ref': '#/definitions/FontWeight'}
-
-    def __init__(self, *args):
-        super(FontWeight, self).__init__(*args)
-
-
-class Generator(Data):
-    """Generator schema wrapper
-
-    anyOf(:class:`SequenceGenerator`, :class:`SphereGenerator`, :class:`GraticuleGenerator`)
-    """
-    _schema = {'$ref': '#/definitions/Generator'}
-
-    def __init__(self, *args, **kwds):
-        super(Generator, self).__init__(*args, **kwds)
-
-
-class GenericUnitSpecEncodingAnyMark(VegaLiteSchema):
-    """GenericUnitSpecEncodingAnyMark schema wrapper
-
-    Mapping(required=[mark])
-    Base interface for a unit (single-view) specification.
-
-    Attributes
-    ----------
-
-    mark : :class:`AnyMark`
-        A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``,
-        ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark
-        definition object <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    encoding : :class:`Encoding`
-        A key-value mapping between encoding channels and definition of fields.
-    height : float
-        The height of a visualization.
-
-        **Default value:**
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its y-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the height will
-          be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For y-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the height is `determined by the range step, paddings, and the
-          cardinality of the field mapped to y-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__. Otherwise, if the
-          ``rangeStep`` is ``null``, the height will be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``y`` channel, the ``height`` will be the value of
-          ``rangeStep``.
-
-        **Note** : For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        height of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    name : string
-        Name of the visualization for later reference.
-    projection : :class:`Projection`
-        An object defining properties of geographic projection, which will be applied to
-        ``shape`` path for ``"geoshape"`` marks
-        and to ``latitude`` and ``"longitude"`` channels for other marks.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    view : :class:`ViewBackground`
-        An object defining the view background's fill and stroke.
-
-        **Default value:** none (transparent)
-    width : float
-        The width of a visualization.
-
-        **Default value:** This will be determined by the following rules:
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its x-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the width will
-          be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For x-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the width is `determined by the range step, paddings, and the
-          cardinality of the field mapped to x-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__.   Otherwise, if the
-          ``rangeStep`` is ``null``, the width will be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``x`` channel, the ``width`` will be the value of
-          `config.scale.textXRangeStep
-          <https://vega.github.io/vega-lite/docs/size.html#default-width-and-height>`__ for
-          ``text`` mark and the value of ``rangeStep`` for other marks.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        width of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    """
-    _schema = {'$ref': '#/definitions/GenericUnitSpec<Encoding,AnyMark>'}
-
-    def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, projection=Undefined, selection=Undefined,
-                 title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds):
-        super(GenericUnitSpecEncodingAnyMark, self).__init__(mark=mark, data=data,
-                                                             description=description, encoding=encoding,
-                                                             height=height, name=name,
-                                                             projection=projection, selection=selection,
-                                                             title=title, transform=transform,
-                                                             view=view, width=width, **kwds)
-
-
-class GraticuleGenerator(Generator):
-    """GraticuleGenerator schema wrapper
-
-    Mapping(required=[graticule])
-
-    Attributes
-    ----------
-
-    graticule : anyOf(enum(True), :class:`GraticuleParams`)
-        Generate graticule GeoJSON data for geographic reference lines.
-    name : string
-        Provide a placeholder name and bind data at runtime.
-    """
-    _schema = {'$ref': '#/definitions/GraticuleGenerator'}
-
-    def __init__(self, graticule=Undefined, name=Undefined, **kwds):
-        super(GraticuleGenerator, self).__init__(graticule=graticule, name=name, **kwds)
-
-
-class GraticuleParams(VegaLiteSchema):
-    """GraticuleParams schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    extent : List(List(float))
-        Sets both the major and minor extents to the same values.
-    extentMajor : List(List(float))
-        The major extent of the graticule as a two-element array of coordinates.
-    extentMinor : List(List(float))
-        The minor extent of the graticule as a two-element array of coordinates.
-    precision : float
-        The precision of the graticule in degrees.
-
-        **Default value:** ``2.5``
-    step : List(float)
-        Sets both the major and minor step angles to the same values.
-    stepMajor : List(float)
-        The major step angles of the graticule.
-
-        **Default value:** ``[90, 360]``
-    stepMinor : List(float)
-        The minor step angles of the graticule.
-
-        **Default value:** ``[10, 10]``
-    """
-    _schema = {'$ref': '#/definitions/GraticuleParams'}
-
-    def __init__(self, extent=Undefined, extentMajor=Undefined, extentMinor=Undefined,
-                 precision=Undefined, step=Undefined, stepMajor=Undefined, stepMinor=Undefined, **kwds):
-        super(GraticuleParams, self).__init__(extent=extent, extentMajor=extentMajor,
-                                              extentMinor=extentMinor, precision=precision, step=step,
-                                              stepMajor=stepMajor, stepMinor=stepMinor, **kwds)
-
-
-class Header(VegaLiteSchema):
-    """Header schema wrapper
-
-    Mapping(required=[])
-    Headers of row / column channels for faceted plots.
-
-    Attributes
-    ----------
-
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    labelAlign : :class:`Align`
-        Horizontal text alignment of header labels.
-    labelAnchor : :class:`TitleAnchor`
-        The anchor position for placing the labels. One of ``"start"``, ``"middle"``, or
-        ``"end"``. For example, with a label orientation of top these anchor positions map
-        to a left-, center-, or right-aligned label.
-    labelAngle : float
-        The rotation angle of the header labels.
-
-        **Default value:** ``0`` for column header, ``-90`` for row header.
-    labelColor : :class:`Color`
-        The color of the header label, can be in hex color code or regular color name.
-    labelFont : string
-        The font of the header label.
-    labelFontSize : float
-        The font size of the header label, in pixels.
-    labelFontStyle : :class:`FontStyle`
-        The font style of the header label.
-    labelLimit : float
-        The maximum length of the header label in pixels. The text value will be
-        automatically truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    labelOrient : :class:`Orient`
-        The orientation of the header label. One of ``"top"``, ``"bottom"``, ``"left"`` or
-        ``"right"``.
-    labelPadding : float
-        The padding, in pixel, between facet header's label and the plot.
-
-        **Default value:** ``10``
-    labels : boolean
-        A boolean flag indicating if labels should be included as part of the header.
-
-        **Default value:** ``true``.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    titleAlign : :class:`Align`
-        Horizontal text alignment (to the anchor) of header titles.
-    titleAnchor : :class:`TitleAnchor`
-        The anchor position for placing the title. One of ``"start"``, ``"middle"``, or
-        ``"end"``. For example, with an orientation of top these anchor positions map to a
-        left-, center-, or right-aligned title.
-    titleAngle : float
-        The rotation angle of the header title.
-
-        **Default value:** ``0``.
-    titleBaseline : :class:`TextBaseline`
-        Vertical text baseline for the header title. One of ``"top"``, ``"bottom"``,
-        ``"middle"``.
-
-        **Default value:** ``"middle"``
-    titleColor : :class:`Color`
-        Color of the header title, can be in hex color code or regular color name.
-    titleFont : string
-        Font of the header title. (e.g., ``"Helvetica Neue"`` ).
-    titleFontSize : float
-        Font size of the header title.
-    titleFontStyle : :class:`FontStyle`
-        The font style of the header title.
-    titleFontWeight : :class:`FontWeight`
-        Font weight of the header title.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    titleLimit : float
-        The maximum length of the header title in pixels. The text value will be
-        automatically truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    titleOrient : :class:`Orient`
-        The orientation of the header title. One of ``"top"``, ``"bottom"``, ``"left"`` or
-        ``"right"``.
-    titlePadding : float
-        The padding, in pixel, between facet header's title and the label.
-
-        **Default value:** ``10``
-    """
-    _schema = {'$ref': '#/definitions/Header'}
-
-    def __init__(self, format=Undefined, formatType=Undefined, labelAlign=Undefined,
-                 labelAnchor=Undefined, labelAngle=Undefined, labelColor=Undefined, labelFont=Undefined,
-                 labelFontSize=Undefined, labelFontStyle=Undefined, labelLimit=Undefined,
-                 labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, title=Undefined,
-                 titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined,
-                 titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined,
-                 titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined,
-                 titleLimit=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds):
-        super(Header, self).__init__(format=format, formatType=formatType, labelAlign=labelAlign,
-                                     labelAnchor=labelAnchor, labelAngle=labelAngle,
-                                     labelColor=labelColor, labelFont=labelFont,
-                                     labelFontSize=labelFontSize, labelFontStyle=labelFontStyle,
-                                     labelLimit=labelLimit, labelOrient=labelOrient,
-                                     labelPadding=labelPadding, labels=labels, title=title,
-                                     titleAlign=titleAlign, titleAnchor=titleAnchor,
-                                     titleAngle=titleAngle, titleBaseline=titleBaseline,
-                                     titleColor=titleColor, titleFont=titleFont,
-                                     titleFontSize=titleFontSize, titleFontStyle=titleFontStyle,
-                                     titleFontWeight=titleFontWeight, titleLimit=titleLimit,
-                                     titleOrient=titleOrient, titlePadding=titlePadding, **kwds)
-
-
-class HeaderConfig(VegaLiteSchema):
-    """HeaderConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    labelAlign : :class:`Align`
-        Horizontal text alignment of header labels.
-    labelAnchor : :class:`TitleAnchor`
-        The anchor position for placing the labels. One of ``"start"``, ``"middle"``, or
-        ``"end"``. For example, with a label orientation of top these anchor positions map
-        to a left-, center-, or right-aligned label.
-    labelAngle : float
-        The rotation angle of the header labels.
-
-        **Default value:** ``0`` for column header, ``-90`` for row header.
-    labelColor : :class:`Color`
-        The color of the header label, can be in hex color code or regular color name.
-    labelFont : string
-        The font of the header label.
-    labelFontSize : float
-        The font size of the header label, in pixels.
-    labelFontStyle : :class:`FontStyle`
-        The font style of the header label.
-    labelLimit : float
-        The maximum length of the header label in pixels. The text value will be
-        automatically truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    labelOrient : :class:`Orient`
-        The orientation of the header label. One of ``"top"``, ``"bottom"``, ``"left"`` or
-        ``"right"``.
-    labelPadding : float
-        The padding, in pixel, between facet header's label and the plot.
-
-        **Default value:** ``10``
-    labels : boolean
-        A boolean flag indicating if labels should be included as part of the header.
-
-        **Default value:** ``true``.
-    shortTimeLabels : boolean
-        Whether month names and weekday names should be abbreviated.
-
-        **Default value:**  ``false``
-    title : None
-        Set to null to disable title for the axis, legend, or header.
-    titleAlign : :class:`Align`
-        Horizontal text alignment (to the anchor) of header titles.
-    titleAnchor : :class:`TitleAnchor`
-        The anchor position for placing the title. One of ``"start"``, ``"middle"``, or
-        ``"end"``. For example, with an orientation of top these anchor positions map to a
-        left-, center-, or right-aligned title.
-    titleAngle : float
-        The rotation angle of the header title.
-
-        **Default value:** ``0``.
-    titleBaseline : :class:`TextBaseline`
-        Vertical text baseline for the header title. One of ``"top"``, ``"bottom"``,
-        ``"middle"``.
-
-        **Default value:** ``"middle"``
-    titleColor : :class:`Color`
-        Color of the header title, can be in hex color code or regular color name.
-    titleFont : string
-        Font of the header title. (e.g., ``"Helvetica Neue"`` ).
-    titleFontSize : float
-        Font size of the header title.
-    titleFontStyle : :class:`FontStyle`
-        The font style of the header title.
-    titleFontWeight : :class:`FontWeight`
-        Font weight of the header title.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    titleLimit : float
-        The maximum length of the header title in pixels. The text value will be
-        automatically truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    titleOrient : :class:`Orient`
-        The orientation of the header title. One of ``"top"``, ``"bottom"``, ``"left"`` or
-        ``"right"``.
-    titlePadding : float
-        The padding, in pixel, between facet header's title and the label.
-
-        **Default value:** ``10``
-    """
-    _schema = {'$ref': '#/definitions/HeaderConfig'}
-
-    def __init__(self, format=Undefined, formatType=Undefined, labelAlign=Undefined,
-                 labelAnchor=Undefined, labelAngle=Undefined, labelColor=Undefined, labelFont=Undefined,
-                 labelFontSize=Undefined, labelFontStyle=Undefined, labelLimit=Undefined,
-                 labelOrient=Undefined, labelPadding=Undefined, labels=Undefined,
-                 shortTimeLabels=Undefined, title=Undefined, titleAlign=Undefined,
-                 titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined,
-                 titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined,
-                 titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined,
-                 titleOrient=Undefined, titlePadding=Undefined, **kwds):
-        super(HeaderConfig, self).__init__(format=format, formatType=formatType, labelAlign=labelAlign,
-                                           labelAnchor=labelAnchor, labelAngle=labelAngle,
-                                           labelColor=labelColor, labelFont=labelFont,
-                                           labelFontSize=labelFontSize, labelFontStyle=labelFontStyle,
-                                           labelLimit=labelLimit, labelOrient=labelOrient,
-                                           labelPadding=labelPadding, labels=labels,
-                                           shortTimeLabels=shortTimeLabels, title=title,
-                                           titleAlign=titleAlign, titleAnchor=titleAnchor,
-                                           titleAngle=titleAngle, titleBaseline=titleBaseline,
-                                           titleColor=titleColor, titleFont=titleFont,
-                                           titleFontSize=titleFontSize, titleFontStyle=titleFontStyle,
-                                           titleFontWeight=titleFontWeight, titleLimit=titleLimit,
-                                           titleOrient=titleOrient, titlePadding=titlePadding, **kwds)
-
-
-class HexColor(Color):
-    """HexColor schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/definitions/HexColor'}
-
-    def __init__(self, *args):
-        super(HexColor, self).__init__(*args)
-
-
-class ImputeMethod(VegaLiteSchema):
-    """ImputeMethod schema wrapper
-
-    enum('value', 'median', 'max', 'min', 'mean')
-    """
-    _schema = {'$ref': '#/definitions/ImputeMethod'}
-
-    def __init__(self, *args):
-        super(ImputeMethod, self).__init__(*args)
-
-
-class ImputeParams(VegaLiteSchema):
-    """ImputeParams schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    frame : List(anyOf(None, float))
-        A frame specification as a two-element array used to control the window over which
-        the specified method is applied. The array entries should either be a number
-        indicating the offset from the current data object, or null to indicate unbounded
-        rows preceding or following the current data object.  For example, the value ``[-5,
-        5]`` indicates that the window should include five objects preceding and five
-        objects following the current object.
-
-        **Default value:** :  ``[null, null]`` indicating that the window includes all
-        objects.
-    keyvals : anyOf(List(Any), :class:`ImputeSequence`)
-        Defines the key values that should be considered for imputation.
-        An array of key values or an object defining a `number sequence
-        <https://vega.github.io/vega-lite/docs/impute.html#sequence-def>`__.
-
-        If provided, this will be used in addition to the key values observed within the
-        input data.  If not provided, the values will be derived from all unique values of
-        the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if
-        the y-field is imputed, or vice versa.
-
-        If there is no impute grouping, this property *must* be specified.
-    method : :class:`ImputeMethod`
-        The imputation method to use for the field value of imputed data objects.
-        One of ``value``, ``mean``, ``median``, ``max`` or ``min``.
-
-        **Default value:**  ``"value"``
-    value : Any
-        The field value to use when the imputation ``method`` is ``"value"``.
-    """
-    _schema = {'$ref': '#/definitions/ImputeParams'}
-
-    def __init__(self, frame=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds):
-        super(ImputeParams, self).__init__(frame=frame, keyvals=keyvals, method=method, value=value,
-                                           **kwds)
-
-
-class ImputeSequence(VegaLiteSchema):
-    """ImputeSequence schema wrapper
-
-    Mapping(required=[stop])
-
-    Attributes
-    ----------
-
-    stop : float
-        The ending value(exclusive) of the sequence.
-    start : float
-        The starting value of the sequence.
-        **Default value:** ``0``
-    step : float
-        The step value between sequence entries.
-        **Default value:** ``1`` or ``-1`` if ``stop < start``
-    """
-    _schema = {'$ref': '#/definitions/ImputeSequence'}
-
-    def __init__(self, stop=Undefined, start=Undefined, step=Undefined, **kwds):
-        super(ImputeSequence, self).__init__(stop=stop, start=start, step=step, **kwds)
-
-
-class InlineData(DataSource):
-    """InlineData schema wrapper
-
-    Mapping(required=[values])
-
-    Attributes
-    ----------
-
-    values : :class:`InlineDataset`
-        The full data set, included inline. This can be an array of objects or primitive
-        values, an object, or a string.
-        Arrays of primitive values are ingested as objects with a ``data`` property. Strings
-        are parsed according to the specified format type.
-    format : :class:`DataFormat`
-        An object that specifies the format for parsing the data.
-    name : string
-        Provide a placeholder name and bind data at runtime.
-    """
-    _schema = {'$ref': '#/definitions/InlineData'}
-
-    def __init__(self, values=Undefined, format=Undefined, name=Undefined, **kwds):
-        super(InlineData, self).__init__(values=values, format=format, name=name, **kwds)
-
-
-class InlineDataset(VegaLiteSchema):
-    """InlineDataset schema wrapper
-
-    anyOf(List(float), List(string), List(boolean), List(Mapping(required=[])), string,
-    Mapping(required=[]))
-    """
-    _schema = {'$ref': '#/definitions/InlineDataset'}
-
-    def __init__(self, *args, **kwds):
-        super(InlineDataset, self).__init__(*args, **kwds)
-
-
-class InputBinding(Binding):
-    """InputBinding schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    autocomplete : string
-
-    debounce : float
-
-    element : :class:`Element`
-
-    input : string
-
-    name : string
-
-    placeholder : string
-
-    type : string
-
-    """
-    _schema = {'$ref': '#/definitions/InputBinding'}
-
-    def __init__(self, autocomplete=Undefined, debounce=Undefined, element=Undefined, input=Undefined,
-                 name=Undefined, placeholder=Undefined, type=Undefined, **kwds):
-        super(InputBinding, self).__init__(autocomplete=autocomplete, debounce=debounce,
-                                           element=element, input=input, name=name,
-                                           placeholder=placeholder, type=type, **kwds)
-
-
-class Interpolate(VegaLiteSchema):
-    """Interpolate schema wrapper
-
-    enum('linear', 'linear-closed', 'step', 'step-before', 'step-after', 'basis', 'basis-open',
-    'basis-closed', 'cardinal', 'cardinal-open', 'cardinal-closed', 'bundle', 'monotone')
-    """
-    _schema = {'$ref': '#/definitions/Interpolate'}
-
-    def __init__(self, *args):
-        super(Interpolate, self).__init__(*args)
-
-
-class IntervalSelectionConfig(VegaLiteSchema):
-    """IntervalSelectionConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    bind : enum('scales')
-        Establishes a two-way binding between the interval selection and the scales
-        used within the same view. This allows a user to interactively pan and
-        zoom the view.
-
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
-    clear : anyOf(:class:`EventStream`, boolean)
-        Clears the selection, emptying it of all values. Can be an
-        `EventStream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to
-        disable.
-
-        **Default value:** ``dblclick``.
-
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values
-        must match for a data tuple to fall within the selection.
-
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to
-        fall within the selection.
-
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : :class:`SelectionInitIntervalMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and arrays of
-        initial values.
-
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    mark : :class:`BrushConfig`
-        An interval selection also adds a rectangle mark to depict the
-        extents of the interval. The ``mark`` property can be used to customize the
-        appearance of the mark.
-
-        **See also:** `mark <https://vega.github.io/vega-lite/docs/selection-mark.html>`__
-        documentation.
-    on : :class:`EventStream`
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection.
-        For interval selections, the event stream must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how
-        selections' data queries are resolved when applied in a filter transform,
-        conditional encoding rule, or scale domain.
-
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    translate : anyOf(string, boolean)
-        When truthy, allows a user to interactively move an interval selection
-        back-and-forth. Can be ``true``, ``false`` (to disable panning), or a
-        `Vega event stream definition <https://vega.github.io/vega/docs/event-streams/>`__
-        which must include a start and end event to trigger continuous panning.
-
-        **Default value:** ``true``, which corresponds to
-        ``[mousedown, window:mouseup] > window:mousemove!`` which corresponds to
-        clicks and dragging within an interval selection to reposition it.
-
-        **See also:** `translate <https://vega.github.io/vega-lite/docs/translate.html>`__
-        documentation.
-    zoom : anyOf(string, boolean)
-        When truthy, allows a user to interactively resize an interval selection.
-        Can be ``true``, ``false`` (to disable zooming), or a `Vega event stream
-        definition <https://vega.github.io/vega/docs/event-streams/>`__. Currently,
-        only ``wheel`` events are supported.
-
-        **Default value:** ``true``, which corresponds to ``wheel!``.
-
-        **See also:** `zoom <https://vega.github.io/vega-lite/docs/zoom.html>`__
-        documentation.
-    """
-    _schema = {'$ref': '#/definitions/IntervalSelectionConfig'}
-
-    def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined,
-                 fields=Undefined, init=Undefined, mark=Undefined, on=Undefined, resolve=Undefined,
-                 translate=Undefined, zoom=Undefined, **kwds):
-        super(IntervalSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty,
-                                                      encodings=encodings, fields=fields, init=init,
-                                                      mark=mark, on=on, resolve=resolve,
-                                                      translate=translate, zoom=zoom, **kwds)
-
-
-class JoinAggregateFieldDef(VegaLiteSchema):
-    """JoinAggregateFieldDef schema wrapper
-
-    Mapping(required=[op, as])
-
-    Attributes
-    ----------
-
-    op : :class:`AggregateOp`
-        The aggregation operation to apply (e.g., sum, average or count). See the list of
-        all supported operations `here
-        <https://vega.github.io/vega-lite/docs/aggregate.html#ops>`__.
-    field : :class:`FieldName`
-        The data field for which to compute the aggregate function. This can be omitted for
-        functions that do not operate over a field such as ``count``.
-    as : :class:`FieldName`
-        The output name for the join aggregate operation.
-    """
-    _schema = {'$ref': '#/definitions/JoinAggregateFieldDef'}
-
-    def __init__(self, op=Undefined, field=Undefined, **kwds):
-        super(JoinAggregateFieldDef, self).__init__(op=op, field=field, **kwds)
-
-
-class JsonDataFormat(DataFormat):
-    """JsonDataFormat schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    parse : anyOf(:class:`Parse`, None)
-        If set to ``null``, disable type inference based on the spec and only use type
-        inference based on the data.
-        Alternatively, a parsing directive object can be provided for explicit data types.
-        Each property of the object corresponds to a field name, and the value to the
-        desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not
-        parse the field)).
-        For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field
-        in each input record a Date value.
-
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
-        <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
-        For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
-        the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
-        UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ).
-        See more about `UTC time
-        <https://vega.github.io/vega-lite/docs/timeunit.html#utc>`__
-    property : string
-        The JSON property containing the desired data.
-        This parameter can be used when the loaded JSON file may have surrounding structure
-        or meta-data.
-        For example ``"property": "values.features"`` is equivalent to retrieving
-        ``json.values.features``
-        from the loaded JSON object.
-    type : enum('json')
-        Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``.
-
-        **Default value:**  The default format type is determined by the extension of the
-        file URL.
-        If no extension is detected, ``"json"`` will be used by default.
-    """
-    _schema = {'$ref': '#/definitions/JsonDataFormat'}
-
-    def __init__(self, parse=Undefined, property=Undefined, type=Undefined, **kwds):
-        super(JsonDataFormat, self).__init__(parse=parse, property=property, type=type, **kwds)
-
-
-class LabelOverlap(VegaLiteSchema):
-    """LabelOverlap schema wrapper
-
-    anyOf(boolean, enum('parity'), enum('greedy'))
-    """
-    _schema = {'$ref': '#/definitions/LabelOverlap'}
-
-    def __init__(self, *args, **kwds):
-        super(LabelOverlap, self).__init__(*args, **kwds)
-
-
-class LatLongFieldDef(VegaLiteSchema):
-    """LatLongFieldDef schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : enum('quantitative')
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _schema = {'$ref': '#/definitions/LatLongFieldDef'}
-
-    def __init__(self, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(LatLongFieldDef, self).__init__(aggregate=aggregate, bin=bin, field=field,
-                                              timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class LayoutAlign(VegaLiteSchema):
-    """LayoutAlign schema wrapper
-
-    enum('all', 'each', 'none')
-    """
-    _schema = {'$ref': '#/definitions/LayoutAlign'}
-
-    def __init__(self, *args):
-        super(LayoutAlign, self).__init__(*args)
-
-
-class LayoutBounds(VegaLiteSchema):
-    """LayoutBounds schema wrapper
-
-    anyOf(enum('full'), enum('flush'), :class:`SignalRef`)
-    """
-    _schema = {'$ref': '#/definitions/LayoutBounds'}
-
-    def __init__(self, *args, **kwds):
-        super(LayoutBounds, self).__init__(*args, **kwds)
-
-
-class Legend(VegaLiteSchema):
-    """Legend schema wrapper
-
-    Mapping(required=[])
-    Properties of a legend or boolean flag for determining whether to show it.
-
-    Attributes
-    ----------
-
-    clipHeight : float
-        The height in pixels to clip symbol legend entries and limit their size.
-    columnPadding : float
-        The horizontal padding in pixels between symbol legend entries.
-
-        **Default value:** ``10``.
-    columns : float
-        The number of columns in which to arrange symbol legend entries. A value of ``0`` or
-        lower indicates a single row with one column per entry.
-    cornerRadius : float
-        Corner radius for the full legend.
-    direction : :class:`Orientation`
-        The direction of the legend, one of ``"vertical"`` or ``"horizontal"``.
-
-        **Default value:**
-
-
-        * For top-/bottom- ``orient`` ed legends, ``"horizontal"``
-        * For left-/right- ``orient`` ed legends, ``"vertical"``
-        * For top/bottom-left/right- ``orient`` ed legends, ``"horizontal"`` for gradient
-          legends and ``"vertical"`` for symbol legends.
-    fillColor : :class:`Color`
-        Background fill color for the full legend.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    gradientLength : float
-        The length in pixels of the primary axis of a color gradient. This value corresponds
-        to the height of a vertical gradient or the width of a horizontal gradient.
-
-        **Default value:** ``200``.
-    gradientOpacity : float
-        Opacity of the color gradient.
-    gradientStrokeColor : :class:`Color`
-        The color of the gradient stroke, can be in hex color code or regular color name.
-
-        **Default value:** ``"lightGray"``.
-    gradientStrokeWidth : float
-        The width of the gradient stroke, in pixels.
-
-        **Default value:** ``0``.
-    gradientThickness : float
-        The thickness in pixels of the color gradient. This value corresponds to the width
-        of a vertical gradient or the height of a horizontal gradient.
-
-        **Default value:** ``16``.
-    gridAlign : :class:`LayoutAlign`
-        The alignment to apply to symbol legends rows and columns. The supported string
-        values are ``"all"``, ``"each"`` (the default), and ``none``. For more information,
-        see the `grid layout documentation <https://vega.github.io/vega/docs/layout>`__.
-
-        **Default value:** ``"each"``.
-    labelAlign : :class:`Align`
-        The alignment of the legend label, can be left, center, or right.
-    labelBaseline : :class:`TextBaseline`
-        The position of the baseline of legend label, can be ``"top"``, ``"middle"``,
-        ``"bottom"``, or ``"alphabetic"``.
-
-        **Default value:** ``"middle"``.
-    labelColor : :class:`Color`
-        The color of the legend label, can be in hex color code or regular color name.
-    labelFont : string
-        The font of the legend label.
-    labelFontSize : float
-        The font size of legend label.
-
-        **Default value:** ``10``.
-    labelFontStyle : :class:`FontStyle`
-        The font style of legend label.
-    labelFontWeight : :class:`FontWeight`
-        The font weight of legend label.
-    labelLimit : float
-        Maximum allowed pixel width of legend tick labels.
-
-        **Default value:** ``160``.
-    labelOffset : float
-        The offset of the legend label.
-    labelOpacity : float
-        Opacity of labels.
-    labelOverlap : :class:`LabelOverlap`
-        The strategy to use for resolving overlap of labels in gradient legends. If
-        ``false``, no overlap reduction is attempted. If set to ``true`` (default) or
-        ``"parity"``, a strategy of removing every other label is used. If set to
-        ``"greedy"``, a linear scan of the labels is performed, removing any label that
-        overlaps with the last visible label (this often works better for log-scaled axes).
-
-        **Default value:** ``true``.
-    labelPadding : float
-        Padding in pixels between the legend and legend labels.
-    labelSeparation : float
-        The minimum separation that must be between label bounding boxes for them to be
-        considered non-overlapping (default ``0`` ). This property is ignored if
-        *labelOverlap* resolution is not enabled.
-    legendX : float
-        Custom x-position for legend with orient "none".
-    legendY : float
-        Custom y-position for legend with orient "none".
-    offset : float
-        The offset in pixels by which to displace the legend from the data rectangle and
-        axes.
-
-        **Default value:** ``18``.
-    orient : :class:`LegendOrient`
-        The orientation of the legend, which determines how the legend is positioned within
-        the scene. One of ``"left"``, ``"right"``, ``"top"``, ``"bottom"``, ``"top-left"``,
-        ``"top-right"``, ``"bottom-left"``, ``"bottom-right"``, ``"none"``.
-
-        **Default value:** ``"right"``
-    padding : float
-        The padding between the border and content of the legend group.
-
-        **Default value:** ``0``.
-    rowPadding : float
-        The vertical padding in pixels between symbol legend entries.
-
-        **Default value:** ``2``.
-    strokeColor : :class:`Color`
-        Border stroke color for the full legend.
-    symbolDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed symbol strokes.
-    symbolDashOffset : float
-        The pixel offset at which to start drawing with the symbol stroke dash array.
-    symbolFillColor : :class:`Color`
-        The color of the legend symbol,
-    symbolOffset : float
-        Horizontal pixel offset for legend symbols.
-
-        **Default value:** ``0``.
-    symbolOpacity : float
-        Opacity of the legend symbols.
-    symbolSize : float
-        The size of the legend symbol, in pixels.
-
-        **Default value:** ``100``.
-    symbolStrokeColor : :class:`Color`
-        Stroke color for legend symbols.
-    symbolStrokeWidth : float
-        The width of the symbol's stroke.
-
-        **Default value:** ``1.5``.
-    symbolType : :class:`SymbolShape`
-        The symbol shape. One of the plotting shapes ``circle`` (default), ``square``,
-        ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or
-        ``triangle-left``, the line symbol ``stroke``, or one of the centered directional
-        shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path
-        string <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ can be
-        provided. For correct sizing, custom shape paths should be defined within a square
-        bounding box with coordinates ranging from -1 to 1 along both the x and y
-        dimensions.
-
-        **Default value:** ``"circle"``.
-    tickCount : float
-        The desired number of tick values for quantitative legends.
-    tickMinStep : float
-        The minimum desired step between legend ticks, in terms of scale domain values. For
-        example, a value of ``1`` indicates that ticks should not be less than 1 unit apart.
-        If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if
-        necessary, to enforce the minimum step value.
-
-        **Default value** : ``undefined``
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    titleAlign : :class:`Align`
-        Horizontal text alignment for legend titles.
-
-        **Default value:** ``"left"``.
-    titleAnchor : :class:`TitleAnchor`
-        Text anchor position for placing legend titles.
-    titleBaseline : :class:`TextBaseline`
-        Vertical text baseline for legend titles.
-
-        **Default value:** ``"top"``.
-    titleColor : :class:`Color`
-        The color of the legend title, can be in hex color code or regular color name.
-    titleFont : string
-        The font of the legend title.
-    titleFontSize : float
-        The font size of the legend title.
-    titleFontStyle : :class:`FontStyle`
-        The font style of the legend title.
-    titleFontWeight : :class:`FontWeight`
-        The font weight of the legend title.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    titleLimit : float
-        Maximum allowed pixel width of legend titles.
-
-        **Default value:** ``180``.
-    titleOpacity : float
-        Opacity of the legend title.
-    titleOrient : :class:`Orient`
-        Orientation of the legend title.
-    titlePadding : float
-        The padding, in pixels, between title and legend.
-
-        **Default value:** ``5``.
-    type : enum('symbol', 'gradient')
-        The type of the legend. Use ``"symbol"`` to create a discrete legend and
-        ``"gradient"`` for a continuous color gradient.
-
-        **Default value:** ``"gradient"`` for non-binned quantitative fields and temporal
-        fields; ``"symbol"`` otherwise.
-    values : List(anyOf(float, string, boolean, :class:`DateTime`))
-        Explicitly set the visible legend values.
-    zindex : float
-        A non-negative integer indicating the z-index of the legend.
-        If zindex is 0, legend should be drawn behind all chart elements.
-        To put them in front, use zindex = 1.
-    """
-    _schema = {'$ref': '#/definitions/Legend'}
-
-    def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined,
-                 cornerRadius=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined,
-                 formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined,
-                 gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined,
-                 gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined,
-                 labelBaseline=Undefined, labelColor=Undefined, labelFont=Undefined,
-                 labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined,
-                 labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined,
-                 labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined,
-                 legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined,
-                 padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined,
-                 symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolOffset=Undefined,
-                 symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined,
-                 symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined,
-                 tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined,
-                 titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined,
-                 titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined,
-                 titleLimit=Undefined, titleOpacity=Undefined, titleOrient=Undefined,
-                 titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds):
-        super(Legend, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding,
-                                     columns=columns, cornerRadius=cornerRadius, direction=direction,
-                                     fillColor=fillColor, format=format, formatType=formatType,
-                                     gradientLength=gradientLength, gradientOpacity=gradientOpacity,
-                                     gradientStrokeColor=gradientStrokeColor,
-                                     gradientStrokeWidth=gradientStrokeWidth,
-                                     gradientThickness=gradientThickness, gridAlign=gridAlign,
-                                     labelAlign=labelAlign, labelBaseline=labelBaseline,
-                                     labelColor=labelColor, labelFont=labelFont,
-                                     labelFontSize=labelFontSize, labelFontStyle=labelFontStyle,
-                                     labelFontWeight=labelFontWeight, labelLimit=labelLimit,
-                                     labelOffset=labelOffset, labelOpacity=labelOpacity,
-                                     labelOverlap=labelOverlap, labelPadding=labelPadding,
-                                     labelSeparation=labelSeparation, legendX=legendX, legendY=legendY,
-                                     offset=offset, orient=orient, padding=padding,
-                                     rowPadding=rowPadding, strokeColor=strokeColor,
-                                     symbolDash=symbolDash, symbolDashOffset=symbolDashOffset,
-                                     symbolFillColor=symbolFillColor, symbolOffset=symbolOffset,
-                                     symbolOpacity=symbolOpacity, symbolSize=symbolSize,
-                                     symbolStrokeColor=symbolStrokeColor,
-                                     symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType,
-                                     tickCount=tickCount, tickMinStep=tickMinStep, title=title,
-                                     titleAlign=titleAlign, titleAnchor=titleAnchor,
-                                     titleBaseline=titleBaseline, titleColor=titleColor,
-                                     titleFont=titleFont, titleFontSize=titleFontSize,
-                                     titleFontStyle=titleFontStyle, titleFontWeight=titleFontWeight,
-                                     titleLimit=titleLimit, titleOpacity=titleOpacity,
-                                     titleOrient=titleOrient, titlePadding=titlePadding, type=type,
-                                     values=values, zindex=zindex, **kwds)
-
-
-class LegendConfig(VegaLiteSchema):
-    """LegendConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    clipHeight : float
-        The height in pixels to clip symbol legend entries and limit their size.
-    columnPadding : float
-        The horizontal padding in pixels between symbol legend entries.
-
-        **Default value:** ``10``.
-    columns : float
-        The number of columns in which to arrange symbol legend entries. A value of ``0`` or
-        lower indicates a single row with one column per entry.
-    cornerRadius : float
-        Corner radius for the full legend.
-    fillColor : :class:`Color`
-        Background fill color for the full legend.
-    gradientDirection : :class:`Orientation`
-        The default direction ( ``"horizontal"`` or ``"vertical"`` ) for gradient legends.
-
-        **Default value:** ``"vertical"``.
-    gradientHorizontalMaxLength : float
-        Max legend length for a horizontal gradient when ``config.legend.gradientLength`` is
-        undefined.
-
-        **Default value:** ``200``
-    gradientHorizontalMinLength : float
-        Min legend length for a horizontal gradient when ``config.legend.gradientLength`` is
-        undefined.
-
-        **Default value:** ``100``
-    gradientLabelLimit : float
-        The maximum allowed length in pixels of color ramp gradient labels.
-    gradientLabelOffset : float
-        Vertical offset in pixels for color ramp gradient labels.
-
-        **Default value:** ``2``.
-    gradientLength : float
-        The length in pixels of the primary axis of a color gradient. This value corresponds
-        to the height of a vertical gradient or the width of a horizontal gradient.
-
-        **Default value:** ``200``.
-    gradientOpacity : float
-        Opacity of the color gradient.
-    gradientStrokeColor : :class:`Color`
-        The color of the gradient stroke, can be in hex color code or regular color name.
-
-        **Default value:** ``"lightGray"``.
-    gradientStrokeWidth : float
-        The width of the gradient stroke, in pixels.
-
-        **Default value:** ``0``.
-    gradientThickness : float
-        The thickness in pixels of the color gradient. This value corresponds to the width
-        of a vertical gradient or the height of a horizontal gradient.
-
-        **Default value:** ``16``.
-    gradientVerticalMaxLength : float
-        Max legend length for a vertical gradient when ``config.legend.gradientLength`` is
-        undefined.
-
-        **Default value:** ``200``
-    gradientVerticalMinLength : float
-        Min legend length for a vertical gradient when ``config.legend.gradientLength`` is
-        undefined.
-
-        **Default value:** ``100``
-    gridAlign : :class:`LayoutAlign`
-        The alignment to apply to symbol legends rows and columns. The supported string
-        values are ``"all"``, ``"each"`` (the default), and ``none``. For more information,
-        see the `grid layout documentation <https://vega.github.io/vega/docs/layout>`__.
-
-        **Default value:** ``"each"``.
-    labelAlign : :class:`Align`
-        The alignment of the legend label, can be left, center, or right.
-    labelBaseline : :class:`TextBaseline`
-        The position of the baseline of legend label, can be ``"top"``, ``"middle"``,
-        ``"bottom"``, or ``"alphabetic"``.
-
-        **Default value:** ``"middle"``.
-    labelColor : :class:`Color`
-        The color of the legend label, can be in hex color code or regular color name.
-    labelFont : string
-        The font of the legend label.
-    labelFontSize : float
-        The font size of legend label.
-
-        **Default value:** ``10``.
-    labelFontStyle : :class:`FontStyle`
-        The font style of legend label.
-    labelFontWeight : :class:`FontWeight`
-        The font weight of legend label.
-    labelLimit : float
-        Maximum allowed pixel width of legend tick labels.
-
-        **Default value:** ``160``.
-    labelOffset : float
-        The offset of the legend label.
-    labelOpacity : float
-        Opacity of labels.
-    labelOverlap : :class:`LabelOverlap`
-        The strategy to use for resolving overlap of labels in gradient legends. If
-        ``false``, no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a
-        strategy of removing every other label is used. If set to ``"greedy"``, a linear
-        scan of the labels is performed, removing any label that overlaps with the last
-        visible label (this often works better for log-scaled axes).
-
-        **Default value:** ``"greedy"`` for ``log scales otherwise`` true`.
-    labelPadding : float
-        Padding in pixels between the legend and legend labels.
-    labelSeparation : float
-        The minimum separation that must be between label bounding boxes for them to be
-        considered non-overlapping (default ``0`` ). This property is ignored if
-        *labelOverlap* resolution is not enabled.
-    layout : :class:`LegendLayout`
-        Legend orient group layout parameters.
-    legendX : float
-        Custom x-position for legend with orient "none".
-    legendY : float
-        Custom y-position for legend with orient "none".
-    offset : float
-        The offset in pixels by which to displace the legend from the data rectangle and
-        axes.
-
-        **Default value:** ``18``.
-    orient : :class:`LegendOrient`
-        The orientation of the legend, which determines how the legend is positioned within
-        the scene. One of "left", "right", "top-left", "top-right", "bottom-left",
-        "bottom-right", "none".
-
-        **Default value:** ``"right"``
-    padding : float
-        The padding between the border and content of the legend group.
-
-        **Default value:** ``0``.
-    rowPadding : float
-        The vertical padding in pixels between symbol legend entries.
-
-        **Default value:** ``2``.
-    shortTimeLabels : boolean
-        Whether month names and weekday names should be abbreviated.
-
-        **Default value:**  ``false``
-    strokeColor : :class:`Color`
-        Border stroke color for the full legend.
-    strokeDash : List(float)
-        Border stroke dash pattern for the full legend.
-    strokeWidth : float
-        Border stroke width for the full legend.
-    symbolBaseFillColor : :class:`Color`
-        Default fill color for legend symbols. Only applied if there is no ``"fill"`` scale
-        color encoding for the legend.
-
-        **Default value:** ``"transparent"``.
-    symbolBaseStrokeColor : :class:`Color`
-        Default stroke color for legend symbols. Only applied if there is no ``"fill"``
-        scale color encoding for the legend.
-
-        **Default value:** ``"gray"``.
-    symbolDash : List(float)
-        An array of alternating [stroke, space] lengths for dashed symbol strokes.
-    symbolDashOffset : float
-        The pixel offset at which to start drawing with the symbol stroke dash array.
-    symbolDirection : :class:`Orientation`
-        The default direction ( ``"horizontal"`` or ``"vertical"`` ) for symbol legends.
-
-        **Default value:** ``"vertical"``.
-    symbolFillColor : :class:`Color`
-        The color of the legend symbol,
-    symbolOffset : float
-        Horizontal pixel offset for legend symbols.
-
-        **Default value:** ``0``.
-    symbolOpacity : float
-        Opacity of the legend symbols.
-    symbolSize : float
-        The size of the legend symbol, in pixels.
-
-        **Default value:** ``100``.
-    symbolStrokeColor : :class:`Color`
-        Stroke color for legend symbols.
-    symbolStrokeWidth : float
-        The width of the symbol's stroke.
-
-        **Default value:** ``1.5``.
-    symbolType : :class:`SymbolShape`
-        The symbol shape. One of the plotting shapes ``circle`` (default), ``square``,
-        ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or
-        ``triangle-left``, the line symbol ``stroke``, or one of the centered directional
-        shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path
-        string <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ can be
-        provided. For correct sizing, custom shape paths should be defined within a square
-        bounding box with coordinates ranging from -1 to 1 along both the x and y
-        dimensions.
-
-        **Default value:** ``"circle"``.
-    title : None
-        Set to null to disable title for the axis, legend, or header.
-    titleAlign : :class:`Align`
-        Horizontal text alignment for legend titles.
-
-        **Default value:** ``"left"``.
-    titleAnchor : :class:`TitleAnchor`
-        Text anchor position for placing legend titles.
-    titleBaseline : :class:`TextBaseline`
-        Vertical text baseline for legend titles.
-
-        **Default value:** ``"top"``.
-    titleColor : :class:`Color`
-        The color of the legend title, can be in hex color code or regular color name.
-    titleFont : string
-        The font of the legend title.
-    titleFontSize : float
-        The font size of the legend title.
-    titleFontStyle : :class:`FontStyle`
-        The font style of the legend title.
-    titleFontWeight : :class:`FontWeight`
-        The font weight of the legend title.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    titleLimit : float
-        Maximum allowed pixel width of legend titles.
-
-        **Default value:** ``180``.
-    titleOpacity : float
-        Opacity of the legend title.
-    titleOrient : :class:`Orient`
-        Orientation of the legend title.
-    titlePadding : float
-        The padding, in pixels, between title and legend.
-
-        **Default value:** ``5``.
-    """
-    _schema = {'$ref': '#/definitions/LegendConfig'}
-
-    def __init__(self, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined,
-                 cornerRadius=Undefined, fillColor=Undefined, gradientDirection=Undefined,
-                 gradientHorizontalMaxLength=Undefined, gradientHorizontalMinLength=Undefined,
-                 gradientLabelLimit=Undefined, gradientLabelOffset=Undefined, gradientLength=Undefined,
-                 gradientOpacity=Undefined, gradientStrokeColor=Undefined,
-                 gradientStrokeWidth=Undefined, gradientThickness=Undefined,
-                 gradientVerticalMaxLength=Undefined, gradientVerticalMinLength=Undefined,
-                 gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined,
-                 labelColor=Undefined, labelFont=Undefined, labelFontSize=Undefined,
-                 labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined,
-                 labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined,
-                 labelPadding=Undefined, labelSeparation=Undefined, layout=Undefined, legendX=Undefined,
-                 legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined,
-                 rowPadding=Undefined, shortTimeLabels=Undefined, strokeColor=Undefined,
-                 strokeDash=Undefined, strokeWidth=Undefined, symbolBaseFillColor=Undefined,
-                 symbolBaseStrokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined,
-                 symbolDirection=Undefined, symbolFillColor=Undefined, symbolOffset=Undefined,
-                 symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined,
-                 symbolStrokeWidth=Undefined, symbolType=Undefined, title=Undefined,
-                 titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined,
-                 titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined,
-                 titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined,
-                 titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds):
-        super(LegendConfig, self).__init__(clipHeight=clipHeight, columnPadding=columnPadding,
-                                           columns=columns, cornerRadius=cornerRadius,
-                                           fillColor=fillColor, gradientDirection=gradientDirection,
-                                           gradientHorizontalMaxLength=gradientHorizontalMaxLength,
-                                           gradientHorizontalMinLength=gradientHorizontalMinLength,
-                                           gradientLabelLimit=gradientLabelLimit,
-                                           gradientLabelOffset=gradientLabelOffset,
-                                           gradientLength=gradientLength,
-                                           gradientOpacity=gradientOpacity,
-                                           gradientStrokeColor=gradientStrokeColor,
-                                           gradientStrokeWidth=gradientStrokeWidth,
-                                           gradientThickness=gradientThickness,
-                                           gradientVerticalMaxLength=gradientVerticalMaxLength,
-                                           gradientVerticalMinLength=gradientVerticalMinLength,
-                                           gridAlign=gridAlign, labelAlign=labelAlign,
-                                           labelBaseline=labelBaseline, labelColor=labelColor,
-                                           labelFont=labelFont, labelFontSize=labelFontSize,
-                                           labelFontStyle=labelFontStyle,
-                                           labelFontWeight=labelFontWeight, labelLimit=labelLimit,
-                                           labelOffset=labelOffset, labelOpacity=labelOpacity,
-                                           labelOverlap=labelOverlap, labelPadding=labelPadding,
-                                           labelSeparation=labelSeparation, layout=layout,
-                                           legendX=legendX, legendY=legendY, offset=offset,
-                                           orient=orient, padding=padding, rowPadding=rowPadding,
-                                           shortTimeLabels=shortTimeLabels, strokeColor=strokeColor,
-                                           strokeDash=strokeDash, strokeWidth=strokeWidth,
-                                           symbolBaseFillColor=symbolBaseFillColor,
-                                           symbolBaseStrokeColor=symbolBaseStrokeColor,
-                                           symbolDash=symbolDash, symbolDashOffset=symbolDashOffset,
-                                           symbolDirection=symbolDirection,
-                                           symbolFillColor=symbolFillColor, symbolOffset=symbolOffset,
-                                           symbolOpacity=symbolOpacity, symbolSize=symbolSize,
-                                           symbolStrokeColor=symbolStrokeColor,
-                                           symbolStrokeWidth=symbolStrokeWidth, symbolType=symbolType,
-                                           title=title, titleAlign=titleAlign, titleAnchor=titleAnchor,
-                                           titleBaseline=titleBaseline, titleColor=titleColor,
-                                           titleFont=titleFont, titleFontSize=titleFontSize,
-                                           titleFontStyle=titleFontStyle,
-                                           titleFontWeight=titleFontWeight, titleLimit=titleLimit,
-                                           titleOpacity=titleOpacity, titleOrient=titleOrient,
-                                           titlePadding=titlePadding, **kwds)
-
-
-class LegendLayout(VegaLiteSchema):
-    """LegendLayout schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    anchor : :class:`TitleAnchor`
-        The anchor point for legend orient group layout.
-    bottom : :class:`BaseLegendLayout`
-
-    bounds : :class:`LayoutBounds`
-        The bounds calculation to use for legend orient group layout.
-    center : anyOf(boolean, :class:`SignalRef`)
-        A flag to center legends within a shared orient group.
-    direction : anyOf(:class:`Orientation`, :class:`SignalRef`)
-        The layout direction for legend orient group layout.
-    left : :class:`BaseLegendLayout`
-
-    margin : anyOf(float, :class:`SignalRef`)
-        The pixel margin between legends within a orient group.
-    offset : anyOf(float, :class:`SignalRef`)
-        The pixel offset from the chart body for a legend orient group.
-    right : :class:`BaseLegendLayout`
-
-    top : :class:`BaseLegendLayout`
-
-    bottom-left : :class:`BaseLegendLayout`
-
-    bottom-right : :class:`BaseLegendLayout`
-
-    top-left : :class:`BaseLegendLayout`
-
-    top-right : :class:`BaseLegendLayout`
-
-    """
-    _schema = {'$ref': '#/definitions/LegendLayout'}
-
-    def __init__(self, anchor=Undefined, bottom=Undefined, bounds=Undefined, center=Undefined,
-                 direction=Undefined, left=Undefined, margin=Undefined, offset=Undefined,
-                 right=Undefined, top=Undefined, **kwds):
-        super(LegendLayout, self).__init__(anchor=anchor, bottom=bottom, bounds=bounds, center=center,
-                                           direction=direction, left=left, margin=margin, offset=offset,
-                                           right=right, top=top, **kwds)
-
-
-class LegendOrient(VegaLiteSchema):
-    """LegendOrient schema wrapper
-
-    enum('none', 'left', 'right', 'top', 'bottom', 'top-left', 'top-right', 'bottom-left',
-    'bottom-right')
-    """
-    _schema = {'$ref': '#/definitions/LegendOrient'}
-
-    def __init__(self, *args):
-        super(LegendOrient, self).__init__(*args)
-
-
-class LegendResolveMap(VegaLiteSchema):
-    """LegendResolveMap schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    color : :class:`ResolveMode`
-
-    fill : :class:`ResolveMode`
-
-    fillOpacity : :class:`ResolveMode`
-
-    opacity : :class:`ResolveMode`
-
-    shape : :class:`ResolveMode`
-
-    size : :class:`ResolveMode`
-
-    stroke : :class:`ResolveMode`
-
-    strokeOpacity : :class:`ResolveMode`
-
-    strokeWidth : :class:`ResolveMode`
-
-    """
-    _schema = {'$ref': '#/definitions/LegendResolveMap'}
-
-    def __init__(self, color=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined,
-                 shape=Undefined, size=Undefined, stroke=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, **kwds):
-        super(LegendResolveMap, self).__init__(color=color, fill=fill, fillOpacity=fillOpacity,
-                                               opacity=opacity, shape=shape, size=size, stroke=stroke,
-                                               strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                               **kwds)
-
-
-class LineConfig(VegaLiteSchema):
-    """LineConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent'))
-        A flag for overlaying points on top of line or area marks, or an object defining the
-        properties of the overlayed points.
-
-
-        If this property is ``"transparent"``, transparent points will be used (for
-        enhancing tooltips and selections).
-
-        If this property is an empty object ( ``{}`` ) or ``true``, filled points with
-        default properties will be used.
-
-        If this property is ``false``, no points would be automatically added to line or
-        area marks.
-
-        **Default value:** ``false``.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/LineConfig'}
-
-    def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined,
-                 cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined,
-                 ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined,
-                 font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined,
-                 height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined,
-                 opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined,
-                 radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined,
-                 y2=Undefined, **kwds):
-        super(LineConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color,
-                                         cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx,
-                                         dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity,
-                                         filled=filled, font=font, fontSize=fontSize,
-                                         fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                                         href=href, interpolate=interpolate, limit=limit,
-                                         opacity=opacity, order=order, orient=orient, point=point,
-                                         radius=radius, shape=shape, size=size, stroke=stroke,
-                                         strokeCap=strokeCap, strokeDash=strokeDash,
-                                         strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                                         strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                                         strokeWidth=strokeWidth, tension=tension, text=text,
-                                         theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y,
-                                         y2=y2, **kwds)
-
-
-class LogicalOperandPredicate(VegaLiteSchema):
-    """LogicalOperandPredicate schema wrapper
-
-    anyOf(:class:`LogicalNotPredicate`, :class:`LogicalAndPredicate`,
-    :class:`LogicalOrPredicate`, :class:`Predicate`)
-    """
-    _schema = {'$ref': '#/definitions/LogicalOperand<Predicate>'}
-
-    def __init__(self, *args, **kwds):
-        super(LogicalOperandPredicate, self).__init__(*args, **kwds)
-
-
-class LogicalAndPredicate(LogicalOperandPredicate):
-    """LogicalAndPredicate schema wrapper
-
-    Mapping(required=[and])
-
-    Attributes
-    ----------
-
-    and : List(:class:`LogicalOperandPredicate`)
-
-    """
-    _schema = {'$ref': '#/definitions/LogicalAnd<Predicate>'}
-
-    def __init__(self, **kwds):
-        super(LogicalAndPredicate, self).__init__(**kwds)
-
-
-class LogicalNotPredicate(LogicalOperandPredicate):
-    """LogicalNotPredicate schema wrapper
-
-    Mapping(required=[not])
-
-    Attributes
-    ----------
-
-    not : :class:`LogicalOperandPredicate`
-
-    """
-    _schema = {'$ref': '#/definitions/LogicalNot<Predicate>'}
-
-    def __init__(self, **kwds):
-        super(LogicalNotPredicate, self).__init__(**kwds)
-
-
-class LogicalOrPredicate(LogicalOperandPredicate):
-    """LogicalOrPredicate schema wrapper
-
-    Mapping(required=[or])
-
-    Attributes
-    ----------
-
-    or : List(:class:`LogicalOperandPredicate`)
-
-    """
-    _schema = {'$ref': '#/definitions/LogicalOr<Predicate>'}
-
-    def __init__(self, **kwds):
-        super(LogicalOrPredicate, self).__init__(**kwds)
-
-
-class LookupData(VegaLiteSchema):
-    """LookupData schema wrapper
-
-    Mapping(required=[data, key])
-
-    Attributes
-    ----------
-
-    data : :class:`Data`
-        Secondary data source to lookup in.
-    key : :class:`FieldName`
-        Key in data to lookup.
-    fields : List(:class:`FieldName`)
-        Fields in foreign data to lookup.
-        If not specified, the entire object is queried.
-    """
-    _schema = {'$ref': '#/definitions/LookupData'}
-
-    def __init__(self, data=Undefined, key=Undefined, fields=Undefined, **kwds):
-        super(LookupData, self).__init__(data=data, key=key, fields=fields, **kwds)
-
-
-class Mark(AnyMark):
-    """Mark schema wrapper
-
-    enum('area', 'bar', 'line', 'trail', 'point', 'text', 'tick', 'rect', 'rule', 'circle',
-    'square', 'geoshape')
-    All types of primitive marks.
-    """
-    _schema = {'$ref': '#/definitions/Mark'}
-
-    def __init__(self, *args):
-        super(Mark, self).__init__(*args)
-
-
-class MarkConfig(VegaLiteSchema):
-    """MarkConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/MarkConfig'}
-
-    def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined,
-                 cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined,
-                 ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined,
-                 font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined,
-                 height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined,
-                 opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined,
-                 shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined,
-                 strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                 strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                 tension=Undefined, text=Undefined, theta=Undefined, tooltip=Undefined, width=Undefined,
-                 x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds):
-        super(MarkConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color,
-                                         cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx,
-                                         dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity,
-                                         filled=filled, font=font, fontSize=fontSize,
-                                         fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                                         href=href, interpolate=interpolate, limit=limit,
-                                         opacity=opacity, order=order, orient=orient, radius=radius,
-                                         shape=shape, size=size, stroke=stroke, strokeCap=strokeCap,
-                                         strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                         strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit,
-                                         strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                         tension=tension, text=text, theta=theta, tooltip=tooltip,
-                                         width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
-
-
-class MarkDef(AnyMark):
-    """MarkDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`Mark`
-        The mark type. This could a primitive mark type
-        (one of ``"bar"``, ``"circle"``, ``"square"``, ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"geoshape"``, ``"rule"``, and ``"text"`` )
-        or a composite mark type ( ``"boxplot"``, ``"errorband"``, ``"errorbar"`` ).
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    binSpacing : float
-        Offset between bars for binned field.  Ideal value for this is either 0 (Preferred
-        by statisticians) or 1 (Vega-Lite Default, D3 example style).
-
-        **Default value:** ``1``
-    clip : boolean
-        Whether a mark be clipped to the enclosing group’s width and height.
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    line : anyOf(boolean, :class:`OverlayMarkDef`)
-        A flag for overlaying line on top of area marks, or an object defining the
-        properties of the overlayed lines.
-
-
-        If this value is an empty object ( ``{}`` ) or ``true``, lines with default
-        properties will be used.
-
-        If this value is ``false``, no lines would be automatically added to area marks.
-
-        **Default value:** ``false``.
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    point : anyOf(boolean, :class:`OverlayMarkDef`, enum('transparent'))
-        A flag for overlaying points on top of line or area marks, or an object defining the
-        properties of the overlayed points.
-
-
-        If this property is ``"transparent"``, transparent points will be used (for
-        enhancing tooltips and selections).
-
-        If this property is an empty object ( ``{}`` ) or ``true``, filled points with
-        default properties will be used.
-
-        If this property is ``false``, no points would be automatically added to line or
-        area marks.
-
-        **Default value:** ``false``.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    style : anyOf(string, List(string))
-        A string or array of strings indicating the name of custom styles to apply to the
-        mark. A style is a named collection of mark property defaults defined within the
-        `style configuration
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. If style is an
-        array, later styles will override earlier styles. Any `mark properties
-        <https://vega.github.io/vega-lite/docs/encoding.html#mark-prop>`__ explicitly
-        defined within the ``encoding`` will override a style default.
-
-        **Default value:** The mark's name.  For example, a bar mark will have style
-        ``"bar"`` by default.
-        **Note:** Any specified style will augment the default style. For example, a bar
-        mark with ``"style": "foo"`` will receive from ``config.style.bar`` and
-        ``config.style.foo`` (the specified style ``"foo"`` has higher precedence).
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    thickness : float
-        Thickness of the tick mark.
-
-        **Default value:**  ``1``
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2Offset : float
-        Offset for x2-position.
-    xOffset : float
-        Offset for x-position.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2Offset : float
-        Offset for y2-position.
-    yOffset : float
-        Offset for y-position.
-    """
-    _schema = {'$ref': '#/definitions/MarkDef'}
-
-    def __init__(self, type=Undefined, align=Undefined, angle=Undefined, baseline=Undefined,
-                 binSpacing=Undefined, clip=Undefined, color=Undefined, cornerRadius=Undefined,
-                 cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined,
-                 fill=Undefined, fillOpacity=Undefined, filled=Undefined, font=Undefined,
-                 fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, height=Undefined,
-                 href=Undefined, interpolate=Undefined, limit=Undefined, line=Undefined,
-                 opacity=Undefined, order=Undefined, orient=Undefined, point=Undefined,
-                 radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
-                 theta=Undefined, thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined,
-                 x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
-                 y2Offset=Undefined, yOffset=Undefined, **kwds):
-        super(MarkDef, self).__init__(type=type, align=align, angle=angle, baseline=baseline,
-                                      binSpacing=binSpacing, clip=clip, color=color,
-                                      cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                                      ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity,
-                                      filled=filled, font=font, fontSize=fontSize, fontStyle=fontStyle,
-                                      fontWeight=fontWeight, height=height, href=href,
-                                      interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                                      order=order, orient=orient, point=point, radius=radius,
-                                      shape=shape, size=size, stroke=stroke, strokeCap=strokeCap,
-                                      strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                      strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit,
-                                      strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style,
-                                      tension=tension, text=text, theta=theta, thickness=thickness,
-                                      tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                                      xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset,
-                                      **kwds)
-
-
-class Month(VegaLiteSchema):
-    """Month schema wrapper
-
-    float
-    """
-    _schema = {'$ref': '#/definitions/Month'}
-
-    def __init__(self, *args):
-        super(Month, self).__init__(*args)
-
-
-class MultiSelectionConfig(VegaLiteSchema):
-    """MultiSelectionConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    clear : anyOf(:class:`EventStream`, boolean)
-        Clears the selection, emptying it of all values. Can be an
-        `EventStream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to
-        disable.
-
-        **Default value:** ``dblclick``.
-
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values
-        must match for a data tuple to fall within the selection.
-
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to
-        fall within the selection.
-
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : anyOf(:class:`SelectionInitMapping`, List(:class:`SelectionInitMapping`))
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and an initial
-        value (or array of values).
-
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
-
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
-        documentation.
-    on : :class:`EventStream`
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection.
-        For interval selections, the event stream must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how
-        selections' data queries are resolved when applied in a filter transform,
-        conditional encoding rule, or scale domain.
-
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    toggle : anyOf(string, boolean)
-        Controls whether data values should be toggled or only ever inserted into
-        multi selections. Can be ``true``, ``false`` (for insertion only), or a
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__.
-
-        **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e.,
-        data values are toggled when a user interacts with the shift-key pressed).
-
-        **See also:** `toggle <https://vega.github.io/vega-lite/docs/toggle.html>`__
-        documentation.
-    """
-    _schema = {'$ref': '#/definitions/MultiSelectionConfig'}
-
-    def __init__(self, clear=Undefined, empty=Undefined, encodings=Undefined, fields=Undefined,
-                 init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined, toggle=Undefined,
-                 **kwds):
-        super(MultiSelectionConfig, self).__init__(clear=clear, empty=empty, encodings=encodings,
-                                                   fields=fields, init=init, nearest=nearest, on=on,
-                                                   resolve=resolve, toggle=toggle, **kwds)
-
-
-class NamedData(DataSource):
-    """NamedData schema wrapper
-
-    Mapping(required=[name])
-
-    Attributes
-    ----------
-
-    name : string
-        Provide a placeholder name and bind data at runtime.
-    format : :class:`DataFormat`
-        An object that specifies the format for parsing the data.
-    """
-    _schema = {'$ref': '#/definitions/NamedData'}
-
-    def __init__(self, name=Undefined, format=Undefined, **kwds):
-        super(NamedData, self).__init__(name=name, format=format, **kwds)
-
-
-class NiceTime(VegaLiteSchema):
-    """NiceTime schema wrapper
-
-    enum('second', 'minute', 'hour', 'day', 'week', 'month', 'year')
-    """
-    _schema = {'$ref': '#/definitions/NiceTime'}
-
-    def __init__(self, *args):
-        super(NiceTime, self).__init__(*args)
-
-
-class NumberValueDef(VegaLiteSchema):
-    """NumberValueDef schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/NumberValueDef'}
-
-    def __init__(self, value=Undefined, **kwds):
-        super(NumberValueDef, self).__init__(value=value, **kwds)
-
-
-class NumericFieldDefWithCondition(VegaLiteSchema):
-    """NumericFieldDefWithCondition schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/NumericFieldDefWithCondition'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(NumericFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin,
-                                                           condition=condition, field=field,
-                                                           legend=legend, scale=scale, sort=sort,
-                                                           timeUnit=timeUnit, title=title, **kwds)
-
-
-class NumericValueDefWithCondition(VegaLiteSchema):
-    """NumericValueDefWithCondition schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/NumericValueDefWithCondition'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(NumericValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds)
-
-
-class OrderFieldDef(VegaLiteSchema):
-    """OrderFieldDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    sort : :class:`SortOrder`
-        The sort order. One of ``"ascending"`` (default) or ``"descending"``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/OrderFieldDef'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(OrderFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field,
-                                            sort=sort, timeUnit=timeUnit, title=title, **kwds)
-
-
-class Orient(VegaLiteSchema):
-    """Orient schema wrapper
-
-    enum('left', 'right', 'top', 'bottom')
-    """
-    _schema = {'$ref': '#/definitions/Orient'}
-
-    def __init__(self, *args):
-        super(Orient, self).__init__(*args)
-
-
-class Orientation(VegaLiteSchema):
-    """Orientation schema wrapper
-
-    enum('horizontal', 'vertical')
-    """
-    _schema = {'$ref': '#/definitions/Orientation'}
-
-    def __init__(self, *args):
-        super(Orientation, self).__init__(*args)
-
-
-class OverlayMarkDef(VegaLiteSchema):
-    """OverlayMarkDef schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    clip : boolean
-        Whether a mark be clipped to the enclosing group’s width and height.
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    style : anyOf(string, List(string))
-        A string or array of strings indicating the name of custom styles to apply to the
-        mark. A style is a named collection of mark property defaults defined within the
-        `style configuration
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. If style is an
-        array, later styles will override earlier styles. Any `mark properties
-        <https://vega.github.io/vega-lite/docs/encoding.html#mark-prop>`__ explicitly
-        defined within the ``encoding`` will override a style default.
-
-        **Default value:** The mark's name.  For example, a bar mark will have style
-        ``"bar"`` by default.
-        **Note:** Any specified style will augment the default style. For example, a bar
-        mark with ``"style": "foo"`` will receive from ``config.style.bar`` and
-        ``config.style.foo`` (the specified style ``"foo"`` has higher precedence).
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2Offset : float
-        Offset for x2-position.
-    xOffset : float
-        Offset for x-position.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2Offset : float
-        Offset for y2-position.
-    yOffset : float
-        Offset for y-position.
-    """
-    _schema = {'$ref': '#/definitions/OverlayMarkDef'}
-
-    def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, clip=Undefined,
-                 color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined,
-                 dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined,
-                 filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined,
-                 fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined,
-                 limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined,
-                 radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
-                 theta=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined,
-                 x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                 yOffset=Undefined, **kwds):
-        super(OverlayMarkDef, self).__init__(align=align, angle=angle, baseline=baseline, clip=clip,
-                                             color=color, cornerRadius=cornerRadius, cursor=cursor,
-                                             dir=dir, dx=dx, dy=dy, ellipsis=ellipsis, fill=fill,
-                                             fillOpacity=fillOpacity, filled=filled, font=font,
-                                             fontSize=fontSize, fontStyle=fontStyle,
-                                             fontWeight=fontWeight, height=height, href=href,
-                                             interpolate=interpolate, limit=limit, opacity=opacity,
-                                             order=order, orient=orient, radius=radius, shape=shape,
-                                             size=size, stroke=stroke, strokeCap=strokeCap,
-                                             strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                             strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit,
-                                             strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                             style=style, tension=tension, text=text, theta=theta,
-                                             tooltip=tooltip, width=width, x=x, x2=x2,
-                                             x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2,
-                                             y2Offset=y2Offset, yOffset=yOffset, **kwds)
-
-
-class Padding(VegaLiteSchema):
-    """Padding schema wrapper
-
-    anyOf(float, Mapping(required=[]))
-    """
-    _schema = {'$ref': '#/definitions/Padding'}
-
-    def __init__(self, *args, **kwds):
-        super(Padding, self).__init__(*args, **kwds)
-
-
-class Parse(VegaLiteSchema):
-    """Parse schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/definitions/Parse'}
-
-    def __init__(self, **kwds):
-        super(Parse, self).__init__(**kwds)
-
-
-class ParseValue(VegaLiteSchema):
-    """ParseValue schema wrapper
-
-    anyOf(None, string, enum('string'), enum('boolean'), enum('date'), enum('number'))
-    """
-    _schema = {'$ref': '#/definitions/ParseValue'}
-
-    def __init__(self, *args, **kwds):
-        super(ParseValue, self).__init__(*args, **kwds)
-
-
-class PartsMixinsBoxPlotPart(VegaLiteSchema):
-    """PartsMixinsBoxPlotPart schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    box : anyOf(boolean, :class:`MarkConfig`)
-
-    median : anyOf(boolean, :class:`MarkConfig`)
-
-    outliers : anyOf(boolean, :class:`MarkConfig`)
-
-    rule : anyOf(boolean, :class:`MarkConfig`)
-
-    ticks : anyOf(boolean, :class:`MarkConfig`)
-
-    """
-    _schema = {'$ref': '#/definitions/PartsMixins<BoxPlotPart>'}
-
-    def __init__(self, box=Undefined, median=Undefined, outliers=Undefined, rule=Undefined,
-                 ticks=Undefined, **kwds):
-        super(PartsMixinsBoxPlotPart, self).__init__(box=box, median=median, outliers=outliers,
-                                                     rule=rule, ticks=ticks, **kwds)
-
-
-class PartsMixinsErrorBandPart(VegaLiteSchema):
-    """PartsMixinsErrorBandPart schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : anyOf(boolean, :class:`MarkConfig`)
-
-    borders : anyOf(boolean, :class:`MarkConfig`)
-
-    """
-    _schema = {'$ref': '#/definitions/PartsMixins<ErrorBandPart>'}
-
-    def __init__(self, band=Undefined, borders=Undefined, **kwds):
-        super(PartsMixinsErrorBandPart, self).__init__(band=band, borders=borders, **kwds)
-
-
-class PartsMixinsErrorBarPart(VegaLiteSchema):
-    """PartsMixinsErrorBarPart schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    rule : anyOf(boolean, :class:`MarkConfig`)
-
-    ticks : anyOf(boolean, :class:`MarkConfig`)
-
-    """
-    _schema = {'$ref': '#/definitions/PartsMixins<ErrorBarPart>'}
-
-    def __init__(self, rule=Undefined, ticks=Undefined, **kwds):
-        super(PartsMixinsErrorBarPart, self).__init__(rule=rule, ticks=ticks, **kwds)
-
-
-class PositionFieldDef(VegaLiteSchema):
-    """PositionFieldDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    axis : anyOf(:class:`Axis`, None)
-        An object defining properties of axis's gridlines, ticks and labels.
-        If ``null``, the axis for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `axis properties
-        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
-
-        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    impute : :class:`ImputeParams`
-        An object defining the properties of the Impute Operation to be applied.
-        The field value of the other positional channel is taken as ``key`` of the
-        ``Impute`` Operation.
-        The field of the ``color`` channel if specified is used as ``groupby`` of the
-        ``Impute`` Operation.
-
-        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked.
-        ``stack`` is only applicable for ``x`` and ``y`` channels with continuous domains.
-        For example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values:
-
-
-        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
-          (for creating typical stacked
-          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
-        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
-          stacked bar and area charts
-          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-          :raw-html:`<br/>`
-        - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
-        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
-          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-          chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar`` or ``area`` ;
-        (2) the stacked measure channel (x or y) has a linear scale;
-        (3) At least one of non-position channels mapped to an unaggregated field that is
-        different from x and y.  Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/PositionFieldDef'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, axis=Undefined, bin=Undefined,
-                 field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(PositionFieldDef, self).__init__(type=type, aggregate=aggregate, axis=axis, bin=bin,
-                                               field=field, impute=impute, scale=scale, sort=sort,
-                                               stack=stack, timeUnit=timeUnit, title=title, **kwds)
-
-
-class Predicate(LogicalOperandPredicate):
-    """Predicate schema wrapper
-
-    anyOf(:class:`FieldEqualPredicate`, :class:`FieldRangePredicate`,
-    :class:`FieldOneOfPredicate`, :class:`FieldLTPredicate`, :class:`FieldGTPredicate`,
-    :class:`FieldLTEPredicate`, :class:`FieldGTEPredicate`, :class:`FieldValidPredicate`,
-    :class:`SelectionPredicate`, string)
-    """
-    _schema = {'$ref': '#/definitions/Predicate'}
-
-    def __init__(self, *args, **kwds):
-        super(Predicate, self).__init__(*args, **kwds)
-
-
-class FieldEqualPredicate(Predicate):
-    """FieldEqualPredicate schema wrapper
-
-    Mapping(required=[equal, field])
-
-    Attributes
-    ----------
-
-    equal : anyOf(string, float, boolean, :class:`DateTime`)
-        The value that the field should be equal to.
-    field : :class:`FieldName`
-        Field to be filtered.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldEqualPredicate'}
-
-    def __init__(self, equal=Undefined, field=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldEqualPredicate, self).__init__(equal=equal, field=field, timeUnit=timeUnit, **kwds)
-
-
-class FieldGTEPredicate(Predicate):
-    """FieldGTEPredicate schema wrapper
-
-    Mapping(required=[field, gte])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        Field to be filtered.
-    gte : anyOf(string, float, :class:`DateTime`)
-        The value that the field should be greater than or equals to.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldGTEPredicate'}
-
-    def __init__(self, field=Undefined, gte=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldGTEPredicate, self).__init__(field=field, gte=gte, timeUnit=timeUnit, **kwds)
-
-
-class FieldGTPredicate(Predicate):
-    """FieldGTPredicate schema wrapper
-
-    Mapping(required=[field, gt])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        Field to be filtered.
-    gt : anyOf(string, float, :class:`DateTime`)
-        The value that the field should be greater than.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldGTPredicate'}
-
-    def __init__(self, field=Undefined, gt=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldGTPredicate, self).__init__(field=field, gt=gt, timeUnit=timeUnit, **kwds)
-
-
-class FieldLTEPredicate(Predicate):
-    """FieldLTEPredicate schema wrapper
-
-    Mapping(required=[field, lte])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        Field to be filtered.
-    lte : anyOf(string, float, :class:`DateTime`)
-        The value that the field should be less than or equals to.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldLTEPredicate'}
-
-    def __init__(self, field=Undefined, lte=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldLTEPredicate, self).__init__(field=field, lte=lte, timeUnit=timeUnit, **kwds)
-
-
-class FieldLTPredicate(Predicate):
-    """FieldLTPredicate schema wrapper
-
-    Mapping(required=[field, lt])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        Field to be filtered.
-    lt : anyOf(string, float, :class:`DateTime`)
-        The value that the field should be less than.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldLTPredicate'}
-
-    def __init__(self, field=Undefined, lt=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldLTPredicate, self).__init__(field=field, lt=lt, timeUnit=timeUnit, **kwds)
-
-
-class FieldOneOfPredicate(Predicate):
-    """FieldOneOfPredicate schema wrapper
-
-    Mapping(required=[field, oneOf])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        Field to be filtered.
-    oneOf : anyOf(List(string), List(float), List(boolean), List(:class:`DateTime`))
-        A set of values that the ``field`` 's value should be a member of,
-        for a data item included in the filtered data.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldOneOfPredicate'}
-
-    def __init__(self, field=Undefined, oneOf=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldOneOfPredicate, self).__init__(field=field, oneOf=oneOf, timeUnit=timeUnit, **kwds)
-
-
-class FieldRangePredicate(Predicate):
-    """FieldRangePredicate schema wrapper
-
-    Mapping(required=[field, range])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        Field to be filtered.
-    range : List(anyOf(float, :class:`DateTime`, None))
-        An array of inclusive minimum and maximum values
-        for a field value of a data item to be included in the filtered data.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldRangePredicate'}
-
-    def __init__(self, field=Undefined, range=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldRangePredicate, self).__init__(field=field, range=range, timeUnit=timeUnit, **kwds)
-
-
-class FieldValidPredicate(Predicate):
-    """FieldValidPredicate schema wrapper
-
-    Mapping(required=[field, valid])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        Field to be filtered.
-    valid : boolean
-        If set to true the field's value has to be valid, meaning both not ``null`` and not
-        `NaN
-        <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN>`__.
-    timeUnit : :class:`TimeUnit`
-        Time unit for the field to be filtered.
-    """
-    _schema = {'$ref': '#/definitions/FieldValidPredicate'}
-
-    def __init__(self, field=Undefined, valid=Undefined, timeUnit=Undefined, **kwds):
-        super(FieldValidPredicate, self).__init__(field=field, valid=valid, timeUnit=timeUnit, **kwds)
-
-
-class Projection(VegaLiteSchema):
-    """Projection schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    center : List(float)
-        Sets the projection’s center to the specified center, a two-element array of
-        longitude and latitude in degrees.
-
-        **Default value:** ``[0, 0]``
-    clipAngle : float
-        Sets the projection’s clipping circle radius to the specified angle in degrees. If
-        ``null``, switches to `antimeridian <http://bl.ocks.org/mbostock/3788999>`__ cutting
-        rather than small-circle clipping.
-    clipExtent : List(List(float))
-        Sets the projection’s viewport clip extent to the specified bounds in pixels. The
-        extent bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is
-        the left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is
-        the bottom. If ``null``, no viewport clipping is performed.
-    coefficient : float
-
-    distance : float
-
-    fraction : float
-
-    lobes : float
-
-    parallel : float
-
-    precision : float
-        Sets the threshold for the projection’s `adaptive resampling
-        <http://bl.ocks.org/mbostock/3795544>`__ to the specified value in pixels. This
-        value corresponds to the `Douglas–Peucker distance
-        <http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm>`__.
-        If precision is not specified, returns the projection’s current resampling precision
-        which defaults to ``√0.5 ≅ 0.70710…``.
-    radius : float
-
-    ratio : float
-
-    reflectX : boolean
-
-    reflectY : boolean
-
-    rotate : List(float)
-        Sets the projection’s three-axis rotation to the specified angles, which must be a
-        two- or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying
-        the rotation angles in degrees about each spherical axis. (These correspond to yaw,
-        pitch and roll.)
-
-        **Default value:** ``[0, 0, 0]``
-    scale : float
-        Sets the projection's scale (zoom) value, overriding automatic fitting.
-    spacing : float
-
-    tilt : float
-
-    translate : List(float)
-        Sets the projection's translation (pan) value, overriding automatic fitting.
-    type : :class:`ProjectionType`
-        The cartographic projection to use. This value is case-insensitive, for example
-        ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all
-        valid projection types `in the documentation
-        <https://vega.github.io/vega-lite/docs/projection.html#projection-types>`__.
-
-        **Default value:** ``mercator``
-    """
-    _schema = {'$ref': '#/definitions/Projection'}
-
-    def __init__(self, center=Undefined, clipAngle=Undefined, clipExtent=Undefined,
-                 coefficient=Undefined, distance=Undefined, fraction=Undefined, lobes=Undefined,
-                 parallel=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined,
-                 reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined,
-                 spacing=Undefined, tilt=Undefined, translate=Undefined, type=Undefined, **kwds):
-        super(Projection, self).__init__(center=center, clipAngle=clipAngle, clipExtent=clipExtent,
-                                         coefficient=coefficient, distance=distance, fraction=fraction,
-                                         lobes=lobes, parallel=parallel, precision=precision,
-                                         radius=radius, ratio=ratio, reflectX=reflectX,
-                                         reflectY=reflectY, rotate=rotate, scale=scale, spacing=spacing,
-                                         tilt=tilt, translate=translate, type=type, **kwds)
-
-
-class ProjectionConfig(VegaLiteSchema):
-    """ProjectionConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    center : List(float)
-        Sets the projection’s center to the specified center, a two-element array of
-        longitude and latitude in degrees.
-
-        **Default value:** ``[0, 0]``
-    clipAngle : float
-        Sets the projection’s clipping circle radius to the specified angle in degrees. If
-        ``null``, switches to `antimeridian <http://bl.ocks.org/mbostock/3788999>`__ cutting
-        rather than small-circle clipping.
-    clipExtent : List(List(float))
-        Sets the projection’s viewport clip extent to the specified bounds in pixels. The
-        extent bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is
-        the left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is
-        the bottom. If ``null``, no viewport clipping is performed.
-    coefficient : float
-
-    distance : float
-
-    fraction : float
-
-    lobes : float
-
-    parallel : float
-
-    precision : float
-        Sets the threshold for the projection’s `adaptive resampling
-        <http://bl.ocks.org/mbostock/3795544>`__ to the specified value in pixels. This
-        value corresponds to the `Douglas–Peucker distance
-        <http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm>`__.
-        If precision is not specified, returns the projection’s current resampling precision
-        which defaults to ``√0.5 ≅ 0.70710…``.
-    radius : float
-
-    ratio : float
-
-    reflectX : boolean
-
-    reflectY : boolean
-
-    rotate : List(float)
-        Sets the projection’s three-axis rotation to the specified angles, which must be a
-        two- or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying
-        the rotation angles in degrees about each spherical axis. (These correspond to yaw,
-        pitch and roll.)
-
-        **Default value:** ``[0, 0, 0]``
-    scale : float
-        Sets the projection's scale (zoom) value, overriding automatic fitting.
-    spacing : float
-
-    tilt : float
-
-    translate : List(float)
-        Sets the projection's translation (pan) value, overriding automatic fitting.
-    type : :class:`ProjectionType`
-        The cartographic projection to use. This value is case-insensitive, for example
-        ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all
-        valid projection types `in the documentation
-        <https://vega.github.io/vega-lite/docs/projection.html#projection-types>`__.
-
-        **Default value:** ``mercator``
-    """
-    _schema = {'$ref': '#/definitions/ProjectionConfig'}
-
-    def __init__(self, center=Undefined, clipAngle=Undefined, clipExtent=Undefined,
-                 coefficient=Undefined, distance=Undefined, fraction=Undefined, lobes=Undefined,
-                 parallel=Undefined, precision=Undefined, radius=Undefined, ratio=Undefined,
-                 reflectX=Undefined, reflectY=Undefined, rotate=Undefined, scale=Undefined,
-                 spacing=Undefined, tilt=Undefined, translate=Undefined, type=Undefined, **kwds):
-        super(ProjectionConfig, self).__init__(center=center, clipAngle=clipAngle,
-                                               clipExtent=clipExtent, coefficient=coefficient,
-                                               distance=distance, fraction=fraction, lobes=lobes,
-                                               parallel=parallel, precision=precision, radius=radius,
-                                               ratio=ratio, reflectX=reflectX, reflectY=reflectY,
-                                               rotate=rotate, scale=scale, spacing=spacing, tilt=tilt,
-                                               translate=translate, type=type, **kwds)
-
-
-class ProjectionType(VegaLiteSchema):
-    """ProjectionType schema wrapper
-
-    enum('albers', 'albersUsa', 'azimuthalEqualArea', 'azimuthalEquidistant', 'conicConformal',
-    'conicEqualArea', 'conicEquidistant', 'equirectangular', 'gnomonic', 'identity', 'mercator',
-    'naturalEarth1', 'orthographic', 'stereographic', 'transverseMercator')
-    """
-    _schema = {'$ref': '#/definitions/ProjectionType'}
-
-    def __init__(self, *args):
-        super(ProjectionType, self).__init__(*args)
-
-
-class RangeConfig(VegaLiteSchema):
-    """RangeConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    category : anyOf(List(string), :class:`SchemeConfig`)
-        Default range for *nominal* (categorical) fields.
-    diverging : anyOf(List(string), :class:`SchemeConfig`)
-        Default range for diverging *quantitative* fields.
-    heatmap : anyOf(List(string), :class:`SchemeConfig`)
-        Default range for *quantitative* heatmaps.
-    ordinal : anyOf(List(string), :class:`SchemeConfig`)
-        Default range for *ordinal* fields.
-    ramp : anyOf(List(string), :class:`SchemeConfig`)
-        Default range for *quantitative* and *temporal* fields.
-    symbol : List(string)
-        Default range palette for the ``shape`` channel.
-    """
-    _schema = {'$ref': '#/definitions/RangeConfig'}
-
-    def __init__(self, category=Undefined, diverging=Undefined, heatmap=Undefined, ordinal=Undefined,
-                 ramp=Undefined, symbol=Undefined, **kwds):
-        super(RangeConfig, self).__init__(category=category, diverging=diverging, heatmap=heatmap,
-                                          ordinal=ordinal, ramp=ramp, symbol=symbol, **kwds)
-
-
-class RangeConfigValue(VegaLiteSchema):
-    """RangeConfigValue schema wrapper
-
-    anyOf(List(anyOf(float, string)), :class:`SchemeConfig`, Mapping(required=[step]))
-    """
-    _schema = {'$ref': '#/definitions/RangeConfigValue'}
-
-    def __init__(self, *args, **kwds):
-        super(RangeConfigValue, self).__init__(*args, **kwds)
-
-
-class RectConfig(VegaLiteSchema):
-    """RectConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    binSpacing : float
-        Offset between bars for binned field.  Ideal value for this is either 0 (Preferred
-        by statisticians) or 1 (Vega-Lite Default, D3 example style).
-
-        **Default value:** ``1``
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    continuousBandSize : float
-        The default size of the bars on continuous scales.
-
-        **Default value:** ``5``
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    discreteBandSize : float
-        The default size of the bars with discrete dimensions.  If unspecified, the default
-        size is  ``bandSize-1``,
-        which provides 1 pixel offset between bars.
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/RectConfig'}
-
-    def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                 color=Undefined, continuousBandSize=Undefined, cornerRadius=Undefined,
-                 cursor=Undefined, dir=Undefined, discreteBandSize=Undefined, dx=Undefined,
-                 dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined,
-                 filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined,
-                 fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined,
-                 limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined,
-                 radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined,
-                 y2=Undefined, **kwds):
-        super(RectConfig, self).__init__(align=align, angle=angle, baseline=baseline,
-                                         binSpacing=binSpacing, color=color,
-                                         continuousBandSize=continuousBandSize,
-                                         cornerRadius=cornerRadius, cursor=cursor, dir=dir,
-                                         discreteBandSize=discreteBandSize, dx=dx, dy=dy,
-                                         ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity,
-                                         filled=filled, font=font, fontSize=fontSize,
-                                         fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                                         href=href, interpolate=interpolate, limit=limit,
-                                         opacity=opacity, order=order, orient=orient, radius=radius,
-                                         shape=shape, size=size, stroke=stroke, strokeCap=strokeCap,
-                                         strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                         strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit,
-                                         strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                         tension=tension, text=text, theta=theta, tooltip=tooltip,
-                                         width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
-
-
-class RepeatMapping(VegaLiteSchema):
-    """RepeatMapping schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    column : List(string)
-        An array of fields to be repeated horizontally.
-    row : List(string)
-        An array of fields to be repeated vertically.
-    """
-    _schema = {'$ref': '#/definitions/RepeatMapping'}
-
-    def __init__(self, column=Undefined, row=Undefined, **kwds):
-        super(RepeatMapping, self).__init__(column=column, row=row, **kwds)
-
-
-class RepeatRef(Field):
-    """RepeatRef schema wrapper
-
-    Mapping(required=[repeat])
-    A ValueDef with optional Condition<ValueDef | FieldDef>
-     Reference to a repeated value.
-
-    Attributes
-    ----------
-
-    repeat : enum('row', 'column', 'repeat')
-
-    """
-    _schema = {'$ref': '#/definitions/RepeatRef'}
-
-    def __init__(self, repeat=Undefined, **kwds):
-        super(RepeatRef, self).__init__(repeat=repeat, **kwds)
-
-
-class Resolve(VegaLiteSchema):
-    """Resolve schema wrapper
-
-    Mapping(required=[])
-    Defines how scales, axes, and legends from different specs should be combined. Resolve is a
-    mapping from ``scale``, ``axis``, and ``legend`` to a mapping from channels to resolutions.
-
-    Attributes
-    ----------
-
-    axis : :class:`AxisResolveMap`
-
-    legend : :class:`LegendResolveMap`
-
-    scale : :class:`ScaleResolveMap`
-
-    """
-    _schema = {'$ref': '#/definitions/Resolve'}
-
-    def __init__(self, axis=Undefined, legend=Undefined, scale=Undefined, **kwds):
-        super(Resolve, self).__init__(axis=axis, legend=legend, scale=scale, **kwds)
-
-
-class ResolveMode(VegaLiteSchema):
-    """ResolveMode schema wrapper
-
-    enum('independent', 'shared')
-    """
-    _schema = {'$ref': '#/definitions/ResolveMode'}
-
-    def __init__(self, *args):
-        super(ResolveMode, self).__init__(*args)
-
-
-class RowColLayoutAlign(VegaLiteSchema):
-    """RowColLayoutAlign schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    column : :class:`LayoutAlign`
-
-    row : :class:`LayoutAlign`
-
-    """
-    _schema = {'$ref': '#/definitions/RowCol<LayoutAlign>'}
-
-    def __init__(self, column=Undefined, row=Undefined, **kwds):
-        super(RowColLayoutAlign, self).__init__(column=column, row=row, **kwds)
-
-
-class RowColboolean(VegaLiteSchema):
-    """RowColboolean schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    column : boolean
-
-    row : boolean
-
-    """
-    _schema = {'$ref': '#/definitions/RowCol<boolean>'}
-
-    def __init__(self, column=Undefined, row=Undefined, **kwds):
-        super(RowColboolean, self).__init__(column=column, row=row, **kwds)
-
-
-class RowColnumber(VegaLiteSchema):
-    """RowColnumber schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    column : float
-
-    row : float
-
-    """
-    _schema = {'$ref': '#/definitions/RowCol<number>'}
-
-    def __init__(self, column=Undefined, row=Undefined, **kwds):
-        super(RowColnumber, self).__init__(column=column, row=row, **kwds)
-
-
-class Scale(VegaLiteSchema):
-    """Scale schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : float
-        The alignment of the steps within the scale range.
-
-        This value must lie in the range ``[0,1]``. A value of ``0.5`` indicates that the
-        steps should be centered within the range. A value of ``0`` or ``1`` may be used to
-        shift the bands to one side, say to position them adjacent to an axis.
-
-        **Default value:** ``0.5``
-    base : float
-        The logarithm base of the ``log`` scale (default ``10`` ).
-    bins : List(float)
-        An array of bin boundaries over the scale domain. If provided, axes and legends will
-        use the bin boundaries to inform the choice of tick marks and text labels.
-    clamp : boolean
-        If ``true``, values that exceed the data domain are clamped to either the minimum or
-        maximum range value
-
-        **Default value:** derived from the `scale config
-        <https://vega.github.io/vega-lite/docs/config.html#scale-config>`__ 's ``clamp`` (
-        ``true`` by default).
-    constant : float
-        A constant determining the slope of the symlog function around zero. Only used for
-        ``symlog`` scales.
-
-        **Default value:** ``1``
-    domain : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`),
-    enum('unaggregated'), :class:`SelectionDomain`)
-        Customized domain values.
-
-        For *quantitative* fields, ``domain`` can take the form of a two-element array with
-        minimum and maximum values.  `Piecewise scales
-        <https://vega.github.io/vega-lite/docs/scale.html#piecewise>`__ can be created by
-        providing a ``domain`` with more than two entries.
-        If the input field is aggregated, ``domain`` can also be a string value
-        ``"unaggregated"``, indicating that the domain should include the raw data values
-        prior to the aggregation.
-
-        For *temporal* fields, ``domain`` can be a two-element array minimum and maximum
-        values, in the form of either timestamps or the `DateTime definition objects
-        <https://vega.github.io/vega-lite/docs/types.html#datetime>`__.
-
-        For *ordinal* and *nominal* fields, ``domain`` can be an array that lists valid
-        input values.
-
-        The ``selection`` property can be used to `interactively determine
-        <https://vega.github.io/vega-lite/docs/selection.html#scale-domains>`__ the scale
-        domain.
-    exponent : float
-        The exponent of the ``pow`` scale.
-    interpolate : anyOf(:class:`ScaleInterpolate`, :class:`ScaleInterpolateParams`)
-        The interpolation method for range values. By default, a general interpolator for
-        numbers, dates, strings and colors (in HCL space) is used. For color ranges, this
-        property allows interpolation in alternative color spaces. Legal values include
-        ``rgb``, ``hsl``, ``hsl-long``, ``lab``, ``hcl``, ``hcl-long``, ``cubehelix`` and
-        ``cubehelix-long`` ('-long' variants use longer paths in polar coordinate spaces).
-        If object-valued, this property accepts an object with a string-valued *type*
-        property and an optional numeric *gamma* property applicable to rgb and cubehelix
-        interpolators. For more, see the `d3-interpolate documentation
-        <https://github.com/d3/d3-interpolate>`__.
-
-
-        * **Default value:** ``hcl``
-    nice : anyOf(boolean, float, :class:`NiceTime`, Mapping(required=[interval, step]))
-        Extending the domain so that it starts and ends on nice round values. This method
-        typically modifies the scale’s domain, and may only extend the bounds to the nearest
-        round value. Nicing is useful if the domain is computed from data and may be
-        irregular. For example, for a domain of *[0.201479…, 0.996679…]*, a nice domain
-        might be *[0.2, 1.0]*.
-
-        For quantitative scales such as linear, ``nice`` can be either a boolean flag or a
-        number. If ``nice`` is a number, it will represent a desired tick count. This allows
-        greater control over the step size used to extend the bounds, guaranteeing that the
-        returned ticks will exactly cover the domain.
-
-        For temporal fields with time and utc scales, the ``nice`` value can be a string
-        indicating the desired time interval. Legal values are ``"millisecond"``,
-        ``"second"``, ``"minute"``, ``"hour"``, ``"day"``, ``"week"``, ``"month"``, and
-        ``"year"``. Alternatively, ``time`` and ``utc`` scales can accept an object-valued
-        interval specifier of the form ``{"interval": "month", "step": 3}``, which includes
-        a desired number of interval steps. Here, the domain would snap to quarter (Jan,
-        Apr, Jul, Oct) boundaries.
-
-        **Default value:** ``true`` for unbinned *quantitative* fields; ``false`` otherwise.
-    padding : float
-        For * `continuous <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ *
-        scales, expands the scale domain to accommodate the specified number of pixels on
-        each of the scale range. The scale range must represent pixels for this parameter to
-        function as intended. Padding adjustment is performed prior to all other
-        adjustments, including the effects of the  ``zero``,  ``nice``,  ``domainMin``, and
-        ``domainMax``  properties.
-
-        For * `band <https://vega.github.io/vega-lite/docs/scale.html#band>`__ * scales,
-        shortcut for setting ``paddingInner`` and ``paddingOuter`` to the same value.
-
-        For * `point <https://vega.github.io/vega-lite/docs/scale.html#point>`__ * scales,
-        alias for ``paddingOuter``.
-
-        **Default value:** For *continuous* scales, derived from the `scale config
-        <https://vega.github.io/vega-lite/docs/scale.html#config>`__ 's
-        ``continuousPadding``.
-        For *band and point* scales, see ``paddingInner`` and ``paddingOuter``.  By default,
-        Vega-Lite sets padding such that *width/height = number of unique values * step*.
-    paddingInner : float
-        The inner padding (spacing) within each band step of band scales, as a fraction of
-        the step size. This value must lie in the range [0,1].
-
-        For point scale, this property is invalid as point scales do not have internal band
-        widths (only step sizes between bands).
-
-        **Default value:** derived from the `scale config
-        <https://vega.github.io/vega-lite/docs/scale.html#config>`__ 's
-        ``bandPaddingInner``.
-    paddingOuter : float
-        The outer padding (spacing) at the ends of the range of band and point scales,
-        as a fraction of the step size. This value must lie in the range [0,1].
-
-        **Default value:** derived from the `scale config
-        <https://vega.github.io/vega-lite/docs/scale.html#config>`__ 's ``bandPaddingOuter``
-        for band scales and ``pointPadding`` for point scales.
-        By default, Vega-Lite sets outer padding such that *width/height = number of unique
-        values * step*.
-    range : anyOf(List(float), List(string), string)
-        The range of the scale. One of:
-
-
-        A string indicating a `pre-defined named scale range
-        <https://vega.github.io/vega-lite/docs/scale.html#range-config>`__ (e.g., example,
-        ``"symbol"``, or ``"diverging"`` ).
-
-        For `continuous scales
-        <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, two-element array
-        indicating  minimum and maximum values, or an array with more than two entries for
-        specifying a `piecewise scale
-        <https://vega.github.io/vega-lite/docs/scale.html#piecewise>`__.
-
-        For `discrete <https://vega.github.io/vega-lite/docs/scale.html#discrete>`__ and
-        `discretizing <https://vega.github.io/vega-lite/docs/scale.html#discretizing>`__
-        scales, an array of desired output values.
-
-        **Notes:**
-
-        1) For color scales you can also specify a color `scheme
-        <https://vega.github.io/vega-lite/docs/scale.html#scheme>`__ instead of ``range``.
-
-        2) Any directly specified ``range`` for ``x`` and ``y`` channels will be ignored.
-        Range can be customized via the view's corresponding `size
-        <https://vega.github.io/vega-lite/docs/size.html>`__ ( ``width`` and ``height`` ) or
-        via `range steps and paddings properties <#range-step>`__ for `band <#band>`__ and
-        `point <#point>`__ scales.
-    rangeStep : anyOf(float, None)
-        The distance between the starts of adjacent bands or points in `band
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__ and `point
-        <https://vega.github.io/vega-lite/docs/scale.html#point>`__ scales.
-
-        If ``rangeStep`` is ``null`` or if the view contains the scale's corresponding `size
-        <https://vega.github.io/vega-lite/docs/size.html>`__ ( ``width`` for ``x`` scales
-        and ``height`` for ``y`` scales), ``rangeStep`` will be automatically determined to
-        fit the size of the view.
-
-        **Default value:**  derived the `scale config
-        <https://vega.github.io/vega-lite/docs/config.html#scale-config>`__ 's
-        ``textXRangeStep`` ( ``90`` by default) for x-scales of ``text`` marks and
-        ``rangeStep`` ( ``21`` by default) for x-scales of other marks and y-scales.
-
-        **Warning** : If ``rangeStep`` is ``null`` and the cardinality of the scale's domain
-        is higher than ``width`` or ``height``, the rangeStep might become less than one
-        pixel and the mark might not appear correctly.
-    round : boolean
-        If ``true``, rounds numeric output values to integers. This can be helpful for
-        snapping to the pixel grid.
-
-        **Default value:** ``false``.
-    scheme : anyOf(string, :class:`SchemeParams`)
-        A string indicating a color `scheme
-        <https://vega.github.io/vega-lite/docs/scale.html#scheme>`__ name (e.g.,
-        ``"category10"`` or ``"blues"`` ) or a `scheme parameter object
-        <https://vega.github.io/vega-lite/docs/scale.html#scheme-params>`__.
-
-        Discrete color schemes may be used with `discrete
-        <https://vega.github.io/vega-lite/docs/scale.html#discrete>`__ or `discretizing
-        <https://vega.github.io/vega-lite/docs/scale.html#discretizing>`__ scales.
-        Continuous color schemes are intended for use with color scales.
-
-        For the full list of supported schemes, please refer to the `Vega Scheme
-        <https://vega.github.io/vega/docs/schemes/#reference>`__ reference.
-    type : :class:`ScaleType`
-        The type of scale.  Vega-Lite supports the following categories of scale types:
-
-        1) `Continuous Scales
-        <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ -- mapping
-        continuous domains to continuous output ranges ( `"linear"
-        <https://vega.github.io/vega-lite/docs/scale.html#linear>`__, `"pow"
-        <https://vega.github.io/vega-lite/docs/scale.html#pow>`__, `"sqrt"
-        <https://vega.github.io/vega-lite/docs/scale.html#sqrt>`__, `"symlog"
-        <https://vega.github.io/vega-lite/docs/scale.html#symlog>`__, `"log"
-        <https://vega.github.io/vega-lite/docs/scale.html#log>`__, `"time"
-        <https://vega.github.io/vega-lite/docs/scale.html#time>`__, `"utc"
-        <https://vega.github.io/vega-lite/docs/scale.html#utc>`__.
-
-        2) `Discrete Scales <https://vega.github.io/vega-lite/docs/scale.html#discrete>`__
-        -- mapping discrete domains to discrete ( `"ordinal"
-        <https://vega.github.io/vega-lite/docs/scale.html#ordinal>`__ ) or continuous (
-        `"band" <https://vega.github.io/vega-lite/docs/scale.html#band>`__ and `"point"
-        <https://vega.github.io/vega-lite/docs/scale.html#point>`__ ) output ranges.
-
-        3) `Discretizing Scales
-        <https://vega.github.io/vega-lite/docs/scale.html#discretizing>`__ -- mapping
-        continuous domains to discrete output ranges `"bin-ordinal"
-        <https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal>`__, `"quantile"
-        <https://vega.github.io/vega-lite/docs/scale.html#quantile>`__, `"quantize"
-        <https://vega.github.io/vega-lite/docs/scale.html#quantize>`__ and `"threshold"
-        <https://vega.github.io/vega-lite/docs/scale.html#threshold>`__.
-
-        **Default value:** please see the `scale type table
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
-    zero : boolean
-        If ``true``, ensures that a zero baseline value is included in the scale domain.
-
-        **Default value:** ``true`` for x and y channels if the quantitative field is not
-        binned and no custom ``domain`` is provided; ``false`` otherwise.
-
-        **Note:** Log, time, and utc scales do not support ``zero``.
-    """
-    _schema = {'$ref': '#/definitions/Scale'}
-
-    def __init__(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined,
-                 constant=Undefined, domain=Undefined, exponent=Undefined, interpolate=Undefined,
-                 nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined,
-                 range=Undefined, rangeStep=Undefined, round=Undefined, scheme=Undefined,
-                 type=Undefined, zero=Undefined, **kwds):
-        super(Scale, self).__init__(align=align, base=base, bins=bins, clamp=clamp, constant=constant,
-                                    domain=domain, exponent=exponent, interpolate=interpolate,
-                                    nice=nice, padding=padding, paddingInner=paddingInner,
-                                    paddingOuter=paddingOuter, range=range, rangeStep=rangeStep,
-                                    round=round, scheme=scheme, type=type, zero=zero, **kwds)
-
-
-class ScaleConfig(VegaLiteSchema):
-    """ScaleConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    bandPaddingInner : float
-        Default inner padding for ``x`` and ``y`` band-ordinal scales.
-
-        **Default value:**
-
-
-        * ``barBandPaddingInner`` for bar marks ( ``0.1`` by default)
-        * ``rectBandPaddingInner`` for rect and other marks ( ``0`` by default)
-    bandPaddingOuter : float
-        Default outer padding for ``x`` and ``y`` band-ordinal scales.
-
-        **Default value:** ``paddingInner/2`` (which makes *width/height = number of unique
-        values * step* )
-    barBandPaddingInner : float
-        Default inner padding for ``x`` and ``y`` band-ordinal scales of ``"bar"`` marks.
-
-        **Default value:** ``0.1``
-    barBandPaddingOuter : float
-        Default outer padding for ``x`` and ``y`` band-ordinal scales of ``"bar"`` marks.
-        If not specified, by default, band scale's paddingOuter is paddingInner/2.
-    clamp : boolean
-        If true, values that exceed the data domain are clamped to either the minimum or
-        maximum range value
-    continuousPadding : float
-        Default padding for continuous scales.
-
-        **Default:** ``5`` for continuous x-scale of a vertical bar and continuous y-scale
-        of a horizontal bar.; ``0`` otherwise.
-    maxBandSize : float
-        The default max value for mapping quantitative fields to bar's size/bandSize.
-
-        If undefined (default), we will use the scale's ``rangeStep`` - 1.
-    maxFontSize : float
-        The default max value for mapping quantitative fields to text's size/fontSize.
-
-        **Default value:** ``40``
-    maxOpacity : float
-        Default max opacity for mapping a field to opacity.
-
-        **Default value:** ``0.8``
-    maxSize : float
-        Default max value for point size scale.
-    maxStrokeWidth : float
-        Default max strokeWidth for the scale of strokeWidth for rule and line marks and of
-        size for trail marks.
-
-        **Default value:** ``4``
-    minBandSize : float
-        The default min value for mapping quantitative fields to bar and tick's
-        size/bandSize scale with zero=false.
-
-        **Default value:** ``2``
-    minFontSize : float
-        The default min value for mapping quantitative fields to tick's size/fontSize scale
-        with zero=false
-
-        **Default value:** ``8``
-    minOpacity : float
-        Default minimum opacity for mapping a field to opacity.
-
-        **Default value:** ``0.3``
-    minSize : float
-        Default minimum value for point size scale with zero=false.
-
-        **Default value:** ``9``
-    minStrokeWidth : float
-        Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and
-        of size for trail marks with zero=false.
-
-        **Default value:** ``1``
-    pointPadding : float
-        Default outer padding for ``x`` and ``y`` point-ordinal scales.
-
-        **Default value:** ``0.5`` (which makes *width/height = number of unique values *
-        step* )
-    quantileCount : float
-        Default range cardinality for `quantile
-        <https://vega.github.io/vega-lite/docs/scale.html#quantile>`__ scale.
-
-        **Default value:** ``4``
-    quantizeCount : float
-        Default range cardinality for `quantize
-        <https://vega.github.io/vega-lite/docs/scale.html#quantize>`__ scale.
-
-        **Default value:** ``4``
-    rangeStep : anyOf(float, None)
-        Default range step for band and point scales of (1) the ``y`` channel
-        and (2) the ``x`` channel when the mark is not ``text``.
-
-        **Default value:** ``20``
-    rectBandPaddingInner : float
-        Default inner padding for ``x`` and ``y`` band-ordinal scales of ``"rect"`` marks.
-
-        **Default value:** ``0``
-    rectBandPaddingOuter : float
-        Default outer padding for ``x`` and ``y`` band-ordinal scales of ``"rect"`` marks.
-        If not specified, by default, band scale's paddingOuter is paddingInner/2.
-    round : boolean
-        If true, rounds numeric output values to integers.
-        This can be helpful for snapping to the pixel grid.
-        (Only available for ``x``, ``y``, and ``size`` scales.)
-    textXRangeStep : float
-        Default range step for ``x`` band and point scales of text marks.
-
-        **Default value:** ``90``
-    useUnaggregatedDomain : boolean
-        Use the source data range before aggregation as scale domain instead of aggregated
-        data for aggregate axis.
-
-        This is equivalent to setting ``domain`` to ``"unaggregate"`` for aggregated
-        *quantitative* fields by default.
-
-        This property only works with aggregate functions that produce values within the raw
-        data domain ( ``"mean"``, ``"average"``, ``"median"``, ``"q1"``, ``"q3"``,
-        ``"min"``, ``"max"`` ). For other aggregations that produce values outside of the
-        raw data domain (e.g. ``"count"``, ``"sum"`` ), this property is ignored.
-
-        **Default value:** ``false``
-    """
-    _schema = {'$ref': '#/definitions/ScaleConfig'}
-
-    def __init__(self, bandPaddingInner=Undefined, bandPaddingOuter=Undefined,
-                 barBandPaddingInner=Undefined, barBandPaddingOuter=Undefined, clamp=Undefined,
-                 continuousPadding=Undefined, maxBandSize=Undefined, maxFontSize=Undefined,
-                 maxOpacity=Undefined, maxSize=Undefined, maxStrokeWidth=Undefined,
-                 minBandSize=Undefined, minFontSize=Undefined, minOpacity=Undefined, minSize=Undefined,
-                 minStrokeWidth=Undefined, pointPadding=Undefined, quantileCount=Undefined,
-                 quantizeCount=Undefined, rangeStep=Undefined, rectBandPaddingInner=Undefined,
-                 rectBandPaddingOuter=Undefined, round=Undefined, textXRangeStep=Undefined,
-                 useUnaggregatedDomain=Undefined, **kwds):
-        super(ScaleConfig, self).__init__(bandPaddingInner=bandPaddingInner,
-                                          bandPaddingOuter=bandPaddingOuter,
-                                          barBandPaddingInner=barBandPaddingInner,
-                                          barBandPaddingOuter=barBandPaddingOuter, clamp=clamp,
-                                          continuousPadding=continuousPadding, maxBandSize=maxBandSize,
-                                          maxFontSize=maxFontSize, maxOpacity=maxOpacity,
-                                          maxSize=maxSize, maxStrokeWidth=maxStrokeWidth,
-                                          minBandSize=minBandSize, minFontSize=minFontSize,
-                                          minOpacity=minOpacity, minSize=minSize,
-                                          minStrokeWidth=minStrokeWidth, pointPadding=pointPadding,
-                                          quantileCount=quantileCount, quantizeCount=quantizeCount,
-                                          rangeStep=rangeStep,
-                                          rectBandPaddingInner=rectBandPaddingInner,
-                                          rectBandPaddingOuter=rectBandPaddingOuter, round=round,
-                                          textXRangeStep=textXRangeStep,
-                                          useUnaggregatedDomain=useUnaggregatedDomain, **kwds)
-
-
-class ScaleInterpolate(VegaLiteSchema):
-    """ScaleInterpolate schema wrapper
-
-    enum('rgb', 'lab', 'hcl', 'hsl', 'hsl-long', 'hcl-long', 'cubehelix', 'cubehelix-long')
-    """
-    _schema = {'$ref': '#/definitions/ScaleInterpolate'}
-
-    def __init__(self, *args):
-        super(ScaleInterpolate, self).__init__(*args)
-
-
-class ScaleInterpolateParams(VegaLiteSchema):
-    """ScaleInterpolateParams schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('rgb', 'cubehelix', 'cubehelix-long')
-
-    gamma : float
-
-    """
-    _schema = {'$ref': '#/definitions/ScaleInterpolateParams'}
-
-    def __init__(self, type=Undefined, gamma=Undefined, **kwds):
-        super(ScaleInterpolateParams, self).__init__(type=type, gamma=gamma, **kwds)
-
-
-class ScaleResolveMap(VegaLiteSchema):
-    """ScaleResolveMap schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    color : :class:`ResolveMode`
-
-    fill : :class:`ResolveMode`
-
-    fillOpacity : :class:`ResolveMode`
-
-    opacity : :class:`ResolveMode`
-
-    shape : :class:`ResolveMode`
-
-    size : :class:`ResolveMode`
-
-    stroke : :class:`ResolveMode`
-
-    strokeOpacity : :class:`ResolveMode`
-
-    strokeWidth : :class:`ResolveMode`
-
-    x : :class:`ResolveMode`
-
-    y : :class:`ResolveMode`
-
-    """
-    _schema = {'$ref': '#/definitions/ScaleResolveMap'}
-
-    def __init__(self, color=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined,
-                 shape=Undefined, size=Undefined, stroke=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, x=Undefined, y=Undefined, **kwds):
-        super(ScaleResolveMap, self).__init__(color=color, fill=fill, fillOpacity=fillOpacity,
-                                              opacity=opacity, shape=shape, size=size, stroke=stroke,
-                                              strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, x=x,
-                                              y=y, **kwds)
-
-
-class ScaleType(VegaLiteSchema):
-    """ScaleType schema wrapper
-
-    enum('linear', 'log', 'pow', 'sqrt', 'symlog', 'time', 'utc', 'quantile', 'quantize',
-    'threshold', 'bin-ordinal', 'ordinal', 'point', 'band')
-    """
-    _schema = {'$ref': '#/definitions/ScaleType'}
-
-    def __init__(self, *args):
-        super(ScaleType, self).__init__(*args)
-
-
-class SchemeConfig(RangeConfigValue):
-    """SchemeConfig schema wrapper
-
-    Mapping(required=[scheme])
-
-    Attributes
-    ----------
-
-    scheme : string
-
-    count : float
-
-    extent : List(float)
-
-    """
-    _schema = {'$ref': '#/definitions/SchemeConfig'}
-
-    def __init__(self, scheme=Undefined, count=Undefined, extent=Undefined, **kwds):
-        super(SchemeConfig, self).__init__(scheme=scheme, count=count, extent=extent, **kwds)
-
-
-class SchemeParams(VegaLiteSchema):
-    """SchemeParams schema wrapper
-
-    Mapping(required=[name])
-
-    Attributes
-    ----------
-
-    name : string
-        A color scheme name for ordinal scales (e.g., ``"category10"`` or ``"blues"`` ).
-
-        For the full list of supported schemes, please refer to the `Vega Scheme
-        <https://vega.github.io/vega/docs/schemes/#reference>`__ reference.
-    count : float
-        The number of colors to use in the scheme. This can be useful for scale types such
-        as ``"quantize"``, which use the length of the scale range to determine the number
-        of discrete bins for the scale domain.
-    extent : List(float)
-        The extent of the color range to use. For example ``[0.2, 1]`` will rescale the
-        color scheme such that color values in the range *[0, 0.2)* are excluded from the
-        scheme.
-    """
-    _schema = {'$ref': '#/definitions/SchemeParams'}
-
-    def __init__(self, name=Undefined, count=Undefined, extent=Undefined, **kwds):
-        super(SchemeParams, self).__init__(name=name, count=count, extent=extent, **kwds)
-
-
-class SecondaryFieldDef(VegaLiteSchema):
-    """SecondaryFieldDef schema wrapper
-
-    Mapping(required=[])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/SecondaryFieldDef'}
-
-    def __init__(self, aggregate=Undefined, bin=Undefined, field=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(SecondaryFieldDef, self).__init__(aggregate=aggregate, bin=bin, field=field,
-                                                timeUnit=timeUnit, title=title, **kwds)
-
-
-class SelectionConfig(VegaLiteSchema):
-    """SelectionConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    interval : :class:`IntervalSelectionConfig`
-        The default definition for an `interval
-        <https://vega.github.io/vega-lite/docs/selection.html#type>`__ selection. All
-        properties and transformations
-        for an interval selection definition (except ``type`` ) may be specified here.
-
-        For instance, setting ``interval`` to ``{"translate": false}`` disables the ability
-        to move
-        interval selections by default.
-    multi : :class:`MultiSelectionConfig`
-        The default definition for a `multi
-        <https://vega.github.io/vega-lite/docs/selection.html#type>`__ selection. All
-        properties and transformations
-        for a multi selection definition (except ``type`` ) may be specified here.
-
-        For instance, setting ``multi`` to ``{"toggle": "event.altKey"}`` adds additional
-        values to
-        multi selections when clicking with the alt-key pressed by default.
-    single : :class:`SingleSelectionConfig`
-        The default definition for a `single
-        <https://vega.github.io/vega-lite/docs/selection.html#type>`__ selection. All
-        properties and transformations
-        for a single selection definition (except ``type`` ) may be specified here.
-
-        For instance, setting ``single`` to ``{"on": "dblclick"}`` populates single
-        selections on double-click by default.
-    """
-    _schema = {'$ref': '#/definitions/SelectionConfig'}
-
-    def __init__(self, interval=Undefined, multi=Undefined, single=Undefined, **kwds):
-        super(SelectionConfig, self).__init__(interval=interval, multi=multi, single=single, **kwds)
-
-
-class SelectionDef(VegaLiteSchema):
-    """SelectionDef schema wrapper
-
-    anyOf(:class:`SingleSelection`, :class:`MultiSelection`, :class:`IntervalSelection`)
-    """
-    _schema = {'$ref': '#/definitions/SelectionDef'}
-
-    def __init__(self, *args, **kwds):
-        super(SelectionDef, self).__init__(*args, **kwds)
-
-
-class IntervalSelection(SelectionDef):
-    """IntervalSelection schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('interval')
-        Determines the default event processing and data query for the selection. Vega-Lite
-        currently supports three selection types:
-
-
-        * ``single`` -- to select a single discrete data value on ``click``.
-        * ``multi`` -- to select multiple discrete data value; the first value is selected
-          on ``click`` and additional values toggled on shift- ``click``.
-        * ``interval`` -- to select a continuous range of data values on ``drag``.
-    bind : enum('scales')
-        Establishes a two-way binding between the interval selection and the scales
-        used within the same view. This allows a user to interactively pan and
-        zoom the view.
-
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
-    clear : anyOf(:class:`EventStream`, boolean)
-        Clears the selection, emptying it of all values. Can be an
-        `EventStream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to
-        disable.
-
-        **Default value:** ``dblclick``.
-
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values
-        must match for a data tuple to fall within the selection.
-
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to
-        fall within the selection.
-
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : :class:`SelectionInitIntervalMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and arrays of
-        initial values.
-
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    mark : :class:`BrushConfig`
-        An interval selection also adds a rectangle mark to depict the
-        extents of the interval. The ``mark`` property can be used to customize the
-        appearance of the mark.
-
-        **See also:** `mark <https://vega.github.io/vega-lite/docs/selection-mark.html>`__
-        documentation.
-    on : :class:`EventStream`
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection.
-        For interval selections, the event stream must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how
-        selections' data queries are resolved when applied in a filter transform,
-        conditional encoding rule, or scale domain.
-
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    translate : anyOf(string, boolean)
-        When truthy, allows a user to interactively move an interval selection
-        back-and-forth. Can be ``true``, ``false`` (to disable panning), or a
-        `Vega event stream definition <https://vega.github.io/vega/docs/event-streams/>`__
-        which must include a start and end event to trigger continuous panning.
-
-        **Default value:** ``true``, which corresponds to
-        ``[mousedown, window:mouseup] > window:mousemove!`` which corresponds to
-        clicks and dragging within an interval selection to reposition it.
-
-        **See also:** `translate <https://vega.github.io/vega-lite/docs/translate.html>`__
-        documentation.
-    zoom : anyOf(string, boolean)
-        When truthy, allows a user to interactively resize an interval selection.
-        Can be ``true``, ``false`` (to disable zooming), or a `Vega event stream
-        definition <https://vega.github.io/vega/docs/event-streams/>`__. Currently,
-        only ``wheel`` events are supported.
-
-        **Default value:** ``true``, which corresponds to ``wheel!``.
-
-        **See also:** `zoom <https://vega.github.io/vega-lite/docs/zoom.html>`__
-        documentation.
-    """
-    _schema = {'$ref': '#/definitions/IntervalSelection'}
-
-    def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined,
-                 encodings=Undefined, fields=Undefined, init=Undefined, mark=Undefined, on=Undefined,
-                 resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds):
-        super(IntervalSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty,
-                                                encodings=encodings, fields=fields, init=init,
-                                                mark=mark, on=on, resolve=resolve, translate=translate,
-                                                zoom=zoom, **kwds)
-
-
-class MultiSelection(SelectionDef):
-    """MultiSelection schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('multi')
-        Determines the default event processing and data query for the selection. Vega-Lite
-        currently supports three selection types:
-
-
-        * ``single`` -- to select a single discrete data value on ``click``.
-        * ``multi`` -- to select multiple discrete data value; the first value is selected
-          on ``click`` and additional values toggled on shift- ``click``.
-        * ``interval`` -- to select a continuous range of data values on ``drag``.
-    clear : anyOf(:class:`EventStream`, boolean)
-        Clears the selection, emptying it of all values. Can be an
-        `EventStream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to
-        disable.
-
-        **Default value:** ``dblclick``.
-
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values
-        must match for a data tuple to fall within the selection.
-
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to
-        fall within the selection.
-
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : anyOf(:class:`SelectionInitMapping`, List(:class:`SelectionInitMapping`))
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and an initial
-        value (or array of values).
-
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
-
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
-        documentation.
-    on : :class:`EventStream`
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection.
-        For interval selections, the event stream must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how
-        selections' data queries are resolved when applied in a filter transform,
-        conditional encoding rule, or scale domain.
-
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    toggle : anyOf(string, boolean)
-        Controls whether data values should be toggled or only ever inserted into
-        multi selections. Can be ``true``, ``false`` (for insertion only), or a
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__.
-
-        **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e.,
-        data values are toggled when a user interacts with the shift-key pressed).
-
-        **See also:** `toggle <https://vega.github.io/vega-lite/docs/toggle.html>`__
-        documentation.
-    """
-    _schema = {'$ref': '#/definitions/MultiSelection'}
-
-    def __init__(self, type=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined,
-                 fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined,
-                 toggle=Undefined, **kwds):
-        super(MultiSelection, self).__init__(type=type, clear=clear, empty=empty, encodings=encodings,
-                                             fields=fields, init=init, nearest=nearest, on=on,
-                                             resolve=resolve, toggle=toggle, **kwds)
-
-
-class SelectionDomain(VegaLiteSchema):
-    """SelectionDomain schema wrapper
-
-    anyOf(Mapping(required=[selection]), Mapping(required=[selection]))
-    """
-    _schema = {'$ref': '#/definitions/SelectionDomain'}
-
-    def __init__(self, *args, **kwds):
-        super(SelectionDomain, self).__init__(*args, **kwds)
-
-
-class SelectionInit(VegaLiteSchema):
-    """SelectionInit schema wrapper
-
-    anyOf(boolean, float, string, :class:`DateTime`)
-    """
-    _schema = {'$ref': '#/definitions/SelectionInit'}
-
-    def __init__(self, *args, **kwds):
-        super(SelectionInit, self).__init__(*args, **kwds)
-
-
-class DateTime(SelectionInit):
-    """DateTime schema wrapper
-
-    Mapping(required=[])
-    Object for defining datetime in Vega-Lite Filter.
-    If both month and quarter are provided, month has higher precedence.
-    ``day`` cannot be combined with other date.
-    We accept string for month and day names.
-
-    Attributes
-    ----------
-
-    date : float
-        Integer value representing the date from 1-31.
-    day : anyOf(:class:`Day`, string)
-        Value representing the day of a week.  This can be one of: (1) integer value --
-        ``1`` represents Monday; (2) case-insensitive day name (e.g., ``"Monday"`` );  (3)
-        case-insensitive, 3-character short day name (e.g., ``"Mon"`` ).   :raw-html:`<br/>`
-        **Warning:** A DateTime definition object with ``day`` ** should not be combined
-        with ``year``, ``quarter``, ``month``, or ``date``.
-    hours : float
-        Integer value representing the hour of a day from 0-23.
-    milliseconds : float
-        Integer value representing the millisecond segment of time.
-    minutes : float
-        Integer value representing the minute segment of time from 0-59.
-    month : anyOf(:class:`Month`, string)
-        One of: (1) integer value representing the month from ``1`` - ``12``. ``1``
-        represents January;  (2) case-insensitive month name (e.g., ``"January"`` );  (3)
-        case-insensitive, 3-character short month name (e.g., ``"Jan"`` ).
-    quarter : float
-        Integer value representing the quarter of the year (from 1-4).
-    seconds : float
-        Integer value representing the second segment (0-59) of a time value
-    utc : boolean
-        A boolean flag indicating if date time is in utc time. If false, the date time is in
-        local time
-    year : float
-        Integer value representing the year.
-    """
-    _schema = {'$ref': '#/definitions/DateTime'}
-
-    def __init__(self, date=Undefined, day=Undefined, hours=Undefined, milliseconds=Undefined,
-                 minutes=Undefined, month=Undefined, quarter=Undefined, seconds=Undefined,
-                 utc=Undefined, year=Undefined, **kwds):
-        super(DateTime, self).__init__(date=date, day=day, hours=hours, milliseconds=milliseconds,
-                                       minutes=minutes, month=month, quarter=quarter, seconds=seconds,
-                                       utc=utc, year=year, **kwds)
-
-
-class SelectionInitInterval(VegaLiteSchema):
-    """SelectionInitInterval schema wrapper
-
-    anyOf(List([boolean, boolean]), List([float, float]), List([string, string]),
-    List([:class:`DateTime`, :class:`DateTime`]))
-    """
-    _schema = {'$ref': '#/definitions/SelectionInitInterval'}
-
-    def __init__(self, *args, **kwds):
-        super(SelectionInitInterval, self).__init__(*args, **kwds)
-
-
-class SelectionInitIntervalMapping(VegaLiteSchema):
-    """SelectionInitIntervalMapping schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/definitions/SelectionInitIntervalMapping'}
-
-    def __init__(self, **kwds):
-        super(SelectionInitIntervalMapping, self).__init__(**kwds)
-
-
-class SelectionInitMapping(VegaLiteSchema):
-    """SelectionInitMapping schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/definitions/SelectionInitMapping'}
-
-    def __init__(self, **kwds):
-        super(SelectionInitMapping, self).__init__(**kwds)
-
-
-class SelectionOperand(VegaLiteSchema):
-    """SelectionOperand schema wrapper
-
-    anyOf(:class:`SelectionNot`, :class:`SelectionAnd`, :class:`SelectionOr`, string)
-    """
-    _schema = {'$ref': '#/definitions/SelectionOperand'}
-
-    def __init__(self, *args, **kwds):
-        super(SelectionOperand, self).__init__(*args, **kwds)
-
-
-class SelectionAnd(SelectionOperand):
-    """SelectionAnd schema wrapper
-
-    Mapping(required=[and])
-
-    Attributes
-    ----------
-
-    and : List(:class:`SelectionOperand`)
-
-    """
-    _schema = {'$ref': '#/definitions/SelectionAnd'}
-
-    def __init__(self, **kwds):
-        super(SelectionAnd, self).__init__(**kwds)
-
-
-class SelectionNot(SelectionOperand):
-    """SelectionNot schema wrapper
-
-    Mapping(required=[not])
-
-    Attributes
-    ----------
-
-    not : :class:`SelectionOperand`
-
-    """
-    _schema = {'$ref': '#/definitions/SelectionNot'}
-
-    def __init__(self, **kwds):
-        super(SelectionNot, self).__init__(**kwds)
-
-
-class SelectionOr(SelectionOperand):
-    """SelectionOr schema wrapper
-
-    Mapping(required=[or])
-
-    Attributes
-    ----------
-
-    or : List(:class:`SelectionOperand`)
-
-    """
-    _schema = {'$ref': '#/definitions/SelectionOr'}
-
-    def __init__(self, **kwds):
-        super(SelectionOr, self).__init__(**kwds)
-
-
-class SelectionPredicate(Predicate):
-    """SelectionPredicate schema wrapper
-
-    Mapping(required=[selection])
-
-    Attributes
-    ----------
-
-    selection : :class:`SelectionOperand`
-        Filter using a selection name.
-    """
-    _schema = {'$ref': '#/definitions/SelectionPredicate'}
-
-    def __init__(self, selection=Undefined, **kwds):
-        super(SelectionPredicate, self).__init__(selection=selection, **kwds)
-
-
-class SelectionResolution(VegaLiteSchema):
-    """SelectionResolution schema wrapper
-
-    enum('global', 'union', 'intersect')
-    """
-    _schema = {'$ref': '#/definitions/SelectionResolution'}
-
-    def __init__(self, *args):
-        super(SelectionResolution, self).__init__(*args)
-
-
-class SequenceGenerator(Generator):
-    """SequenceGenerator schema wrapper
-
-    Mapping(required=[sequence])
-
-    Attributes
-    ----------
-
-    sequence : :class:`SequenceParams`
-        Generate a sequence of numbers.
-    name : string
-        Provide a placeholder name and bind data at runtime.
-    """
-    _schema = {'$ref': '#/definitions/SequenceGenerator'}
-
-    def __init__(self, sequence=Undefined, name=Undefined, **kwds):
-        super(SequenceGenerator, self).__init__(sequence=sequence, name=name, **kwds)
-
-
-class SequenceParams(VegaLiteSchema):
-    """SequenceParams schema wrapper
-
-    Mapping(required=[start, stop])
-
-    Attributes
-    ----------
-
-    start : float
-        The starting value of the sequence (inclusive).
-    stop : float
-        The ending value of the sequence (exclusive).
-    step : float
-        The step value between sequence entries.
-
-        **Default value:** ``1``
-    as : :class:`FieldName`
-        The name of the generated sequence field.
-
-        **Default value:** ``"data"``
-    """
-    _schema = {'$ref': '#/definitions/SequenceParams'}
-
-    def __init__(self, start=Undefined, stop=Undefined, step=Undefined, **kwds):
-        super(SequenceParams, self).__init__(start=start, stop=stop, step=step, **kwds)
-
-
-class ShapeFieldDefWithCondition(VegaLiteSchema):
-    """ShapeFieldDefWithCondition schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`TypeForShape`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/ShapeFieldDefWithCondition'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(ShapeFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin,
-                                                         condition=condition, field=field,
-                                                         legend=legend, scale=scale, sort=sort,
-                                                         timeUnit=timeUnit, title=title, **kwds)
-
-
-class ShapeValueDefWithCondition(VegaLiteSchema):
-    """ShapeValueDefWithCondition schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`,
-    :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ShapeValueDefWithCondition'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(ShapeValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds)
-
-
-class SignalRef(LayoutBounds):
-    """SignalRef schema wrapper
-
-    Mapping(required=[signal])
-
-    Attributes
-    ----------
-
-    signal : string
-
-    """
-    _schema = {'$ref': '#/definitions/SignalRef'}
-
-    def __init__(self, signal=Undefined, **kwds):
-        super(SignalRef, self).__init__(signal=signal, **kwds)
-
-
-class SingleDefUnitChannel(VegaLiteSchema):
-    """SingleDefUnitChannel schema wrapper
-
-    enum('x', 'y', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'color',
-    'fill', 'stroke', 'opacity', 'fillOpacity', 'strokeOpacity', 'strokeWidth', 'size', 'shape',
-    'key', 'text', 'tooltip', 'href')
-    """
-    _schema = {'$ref': '#/definitions/SingleDefUnitChannel'}
-
-    def __init__(self, *args):
-        super(SingleDefUnitChannel, self).__init__(*args)
-
-
-class SingleSelection(SelectionDef):
-    """SingleSelection schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : enum('single')
-        Determines the default event processing and data query for the selection. Vega-Lite
-        currently supports three selection types:
-
-
-        * ``single`` -- to select a single discrete data value on ``click``.
-        * ``multi`` -- to select multiple discrete data value; the first value is selected
-          on ``click`` and additional values toggled on shift- ``click``.
-        * ``interval`` -- to select a continuous range of data values on ``drag``.
-    bind : anyOf(:class:`Binding`, Mapping(required=[]))
-        Establish a two-way binding between a single selection and input elements
-        (also known as dynamic query widgets). A binding takes the form of
-        Vega's `input element binding definition
-        <https://vega.github.io/vega/docs/signals/#bind>`__
-        or can be a mapping between projected field/encodings and binding definitions.
-
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
-    clear : anyOf(:class:`EventStream`, boolean)
-        Clears the selection, emptying it of all values. Can be an
-        `EventStream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to
-        disable.
-
-        **Default value:** ``dblclick``.
-
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values
-        must match for a data tuple to fall within the selection.
-
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to
-        fall within the selection.
-
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : :class:`SelectionInitMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and initial values.
-
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
-
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
-        documentation.
-    on : :class:`EventStream`
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection.
-        For interval selections, the event stream must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how
-        selections' data queries are resolved when applied in a filter transform,
-        conditional encoding rule, or scale domain.
-
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    """
-    _schema = {'$ref': '#/definitions/SingleSelection'}
-
-    def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined,
-                 encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined,
-                 resolve=Undefined, **kwds):
-        super(SingleSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty,
-                                              encodings=encodings, fields=fields, init=init,
-                                              nearest=nearest, on=on, resolve=resolve, **kwds)
-
-
-class SingleSelectionConfig(VegaLiteSchema):
-    """SingleSelectionConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    bind : anyOf(:class:`Binding`, Mapping(required=[]))
-        Establish a two-way binding between a single selection and input elements
-        (also known as dynamic query widgets). A binding takes the form of
-        Vega's `input element binding definition
-        <https://vega.github.io/vega/docs/signals/#bind>`__
-        or can be a mapping between projected field/encodings and binding definitions.
-
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
-    clear : anyOf(:class:`EventStream`, boolean)
-        Clears the selection, emptying it of all values. Can be an
-        `EventStream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to
-        disable.
-
-        **Default value:** ``dblclick``.
-
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values
-        must match for a data tuple to fall within the selection.
-
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to
-        fall within the selection.
-
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : :class:`SelectionInitMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and initial values.
-
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
-
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
-        documentation.
-    on : :class:`EventStream`
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection.
-        For interval selections, the event stream must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how
-        selections' data queries are resolved when applied in a filter transform,
-        conditional encoding rule, or scale domain.
-
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    """
-    _schema = {'$ref': '#/definitions/SingleSelectionConfig'}
-
-    def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined,
-                 fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined,
-                 **kwds):
-        super(SingleSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty,
-                                                    encodings=encodings, fields=fields, init=init,
-                                                    nearest=nearest, on=on, resolve=resolve, **kwds)
-
-
-class Sort(VegaLiteSchema):
-    """Sort schema wrapper
-
-    anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`,
-    :class:`SortByEncoding`, None)
-    """
-    _schema = {'$ref': '#/definitions/Sort'}
-
-    def __init__(self, *args, **kwds):
-        super(Sort, self).__init__(*args, **kwds)
-
-
-class EncodingSortField(Sort):
-    """EncodingSortField schema wrapper
-
-    Mapping(required=[])
-    A sort definition for sorting a discrete scale in an encoding field definition.
-
-    Attributes
-    ----------
-
-    field : :class:`Field`
-        The data `field <https://vega.github.io/vega-lite/docs/field.html>`__ to sort by.
-
-        **Default value:** If unspecified, defaults to the field specified in the outer data
-        reference.
-    op : :class:`AggregateOp`
-        An `aggregate operation
-        <https://vega.github.io/vega-lite/docs/aggregate.html#ops>`__ to perform on the
-        field prior to sorting (e.g., ``"count"``, ``"mean"`` and ``"median"`` ).
-        An aggregation is required when there are multiple values of the sort field for each
-        encoded data field.
-        The input data objects will be aggregated, grouped by the encoded data field.
-
-        For a full list of operations, please see the documentation for `aggregate
-        <https://vega.github.io/vega-lite/docs/aggregate.html#ops>`__.
-
-        **Default value:** ``"sum"`` for stacked plots. Otherwise, ``"mean"``.
-    order : anyOf(:class:`SortOrder`, None)
-        The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no
-        not sort).
-    """
-    _schema = {'$ref': '#/definitions/EncodingSortField'}
-
-    def __init__(self, field=Undefined, op=Undefined, order=Undefined, **kwds):
-        super(EncodingSortField, self).__init__(field=field, op=op, order=order, **kwds)
-
-
-class SortArray(Sort):
-    """SortArray schema wrapper
-
-    anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`))
-    """
-    _schema = {'$ref': '#/definitions/SortArray'}
-
-    def __init__(self, *args, **kwds):
-        super(SortArray, self).__init__(*args, **kwds)
-
-
-class SortByEncoding(Sort):
-    """SortByEncoding schema wrapper
-
-    Mapping(required=[encoding])
-
-    Attributes
-    ----------
-
-    encoding : :class:`SingleDefUnitChannel`
-        The `encoding channel
-        <https://vega.github.io/vega-lite/docs/encoding.html#channels>`__ to sort by (e.g.,
-        ``"x"``, ``"y"`` )
-    order : anyOf(:class:`SortOrder`, None)
-        The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no
-        not sort).
-    """
-    _schema = {'$ref': '#/definitions/SortByEncoding'}
-
-    def __init__(self, encoding=Undefined, order=Undefined, **kwds):
-        super(SortByEncoding, self).__init__(encoding=encoding, order=order, **kwds)
-
-
-class SortField(VegaLiteSchema):
-    """SortField schema wrapper
-
-    Mapping(required=[field])
-    A sort definition for transform
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        The name of the field to sort.
-    order : anyOf(:class:`SortOrder`, None)
-        Whether to sort the field in ascending or descending order. One of ``"ascending"``
-        (default), ``"descending"``, or ``null`` (no not sort).
-    """
-    _schema = {'$ref': '#/definitions/SortField'}
-
-    def __init__(self, field=Undefined, order=Undefined, **kwds):
-        super(SortField, self).__init__(field=field, order=order, **kwds)
-
-
-class SortOrder(Sort):
-    """SortOrder schema wrapper
-
-    enum('ascending', 'descending')
-    """
-    _schema = {'$ref': '#/definitions/SortOrder'}
-
-    def __init__(self, *args):
-        super(SortOrder, self).__init__(*args)
-
-
-class Spec(VegaLiteSchema):
-    """Spec schema wrapper
-
-    anyOf(:class:`FacetedUnitSpec`, :class:`LayerSpec`, :class:`FacetSpec`, :class:`RepeatSpec`,
-    :class:`ConcatSpec`, :class:`VConcatSpec`, :class:`HConcatSpec`)
-    Any specification in Vega-Lite.
-    """
-    _schema = {'$ref': '#/definitions/Spec'}
-
-    def __init__(self, *args, **kwds):
-        super(Spec, self).__init__(*args, **kwds)
-
-
-class ConcatSpec(Spec):
-    """ConcatSpec schema wrapper
-
-    Mapping(required=[concat])
-    Base interface for a generalized concatenation specification.
-
-    Attributes
-    ----------
-
-    concat : List(:class:`Spec`)
-        A list of views to be concatenated.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/ConcatSpec'}
-
-    def __init__(self, concat=Undefined, align=Undefined, bounds=Undefined, center=Undefined,
-                 columns=Undefined, data=Undefined, description=Undefined, name=Undefined,
-                 resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds):
-        super(ConcatSpec, self).__init__(concat=concat, align=align, bounds=bounds, center=center,
-                                         columns=columns, data=data, description=description, name=name,
-                                         resolve=resolve, spacing=spacing, title=title,
-                                         transform=transform, **kwds)
-
-
-class FacetSpec(Spec):
-    """FacetSpec schema wrapper
-
-    Mapping(required=[facet, spec])
-    Base interface for a facet specification.
-
-    Attributes
-    ----------
-
-    facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`)
-        Definition for how to facet the data.  One of:
-        1) `a field definition for faceting the plot by one field
-        <https://vega.github.io/vega-lite/docs/facet.html#field-def>`__
-        2) `An object that maps row and column channels to their field definitions
-        <https://vega.github.io/vega-lite/docs/facet.html#mapping>`__
-    spec : anyOf(:class:`LayerSpec`, :class:`FacetedUnitSpec`)
-        A specification of the view that gets faceted.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/FacetSpec'}
-
-    def __init__(self, facet=Undefined, spec=Undefined, align=Undefined, bounds=Undefined,
-                 center=Undefined, columns=Undefined, data=Undefined, description=Undefined,
-                 name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined,
-                 transform=Undefined, **kwds):
-        super(FacetSpec, self).__init__(facet=facet, spec=spec, align=align, bounds=bounds,
-                                        center=center, columns=columns, data=data,
-                                        description=description, name=name, resolve=resolve,
-                                        spacing=spacing, title=title, transform=transform, **kwds)
-
-
-class FacetedUnitSpec(Spec):
-    """FacetedUnitSpec schema wrapper
-
-    Mapping(required=[mark])
-    Unit spec that can have a composite mark and row or column channels (shorthand for a facet
-    spec).
-
-    Attributes
-    ----------
-
-    mark : :class:`AnyMark`
-        A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``,
-        ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark
-        definition object <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    encoding : :class:`FacetedEncoding`
-        A key-value mapping between encoding channels and definition of fields.
-    height : float
-        The height of a visualization.
-
-        **Default value:**
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its y-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the height will
-          be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For y-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the height is `determined by the range step, paddings, and the
-          cardinality of the field mapped to y-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__. Otherwise, if the
-          ``rangeStep`` is ``null``, the height will be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``y`` channel, the ``height`` will be the value of
-          ``rangeStep``.
-
-        **Note** : For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        height of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    name : string
-        Name of the visualization for later reference.
-    projection : :class:`Projection`
-        An object defining properties of geographic projection, which will be applied to
-        ``shape`` path for ``"geoshape"`` marks
-        and to ``latitude`` and ``"longitude"`` channels for other marks.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    view : :class:`ViewBackground`
-        An object defining the view background's fill and stroke.
-
-        **Default value:** none (transparent)
-    width : float
-        The width of a visualization.
-
-        **Default value:** This will be determined by the following rules:
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its x-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the width will
-          be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For x-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the width is `determined by the range step, paddings, and the
-          cardinality of the field mapped to x-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__.   Otherwise, if the
-          ``rangeStep`` is ``null``, the width will be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``x`` channel, the ``width`` will be the value of
-          `config.scale.textXRangeStep
-          <https://vega.github.io/vega-lite/docs/size.html#default-width-and-height>`__ for
-          ``text`` mark and the value of ``rangeStep`` for other marks.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        width of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    """
-    _schema = {'$ref': '#/definitions/FacetedUnitSpec'}
-
-    def __init__(self, mark=Undefined, align=Undefined, bounds=Undefined, center=Undefined,
-                 columns=Undefined, data=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, projection=Undefined, resolve=Undefined,
-                 selection=Undefined, spacing=Undefined, title=Undefined, transform=Undefined,
-                 view=Undefined, width=Undefined, **kwds):
-        super(FacetedUnitSpec, self).__init__(mark=mark, align=align, bounds=bounds, center=center,
-                                              columns=columns, data=data, description=description,
-                                              encoding=encoding, height=height, name=name,
-                                              projection=projection, resolve=resolve,
-                                              selection=selection, spacing=spacing, title=title,
-                                              transform=transform, view=view, width=width, **kwds)
-
-
-class HConcatSpec(Spec):
-    """HConcatSpec schema wrapper
-
-    Mapping(required=[hconcat])
-    Base interface for a horizontal concatenation specification.
-
-    Attributes
-    ----------
-
-    hconcat : List(:class:`Spec`)
-        A list of views to be concatenated and put into a row.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : boolean
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        **Default value:** ``false``
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : float
-        The spacing in pixels between sub-views of the concat operator.
-
-        **Default value** : ``10``
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/HConcatSpec'}
-
-    def __init__(self, hconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined,
-                 description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined,
-                 title=Undefined, transform=Undefined, **kwds):
-        super(HConcatSpec, self).__init__(hconcat=hconcat, bounds=bounds, center=center, data=data,
-                                          description=description, name=name, resolve=resolve,
-                                          spacing=spacing, title=title, transform=transform, **kwds)
-
-
-class LayerSpec(Spec):
-    """LayerSpec schema wrapper
-
-    Mapping(required=[layer])
-    A full layered plot specification, which may contains ``encoding`` and ``projection``
-    properties that will be applied to underlying unit (single-view) specifications.
-
-    Attributes
-    ----------
-
-    layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`))
-        Layer or single view specifications to be layered.
-
-        **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column``
-        channels as layering facet specifications is not allowed. Instead, use the `facet
-        operator <https://vega.github.io/vega-lite/docs/facet.html>`__ and place a layer
-        inside a facet.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    encoding : :class:`Encoding`
-        A shared key-value mapping between encoding channels and definition of fields in the
-        underlying layers.
-    height : float
-        The height of a visualization.
-
-        **Default value:**
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its y-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the height will
-          be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For y-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the height is `determined by the range step, paddings, and the
-          cardinality of the field mapped to y-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__. Otherwise, if the
-          ``rangeStep`` is ``null``, the height will be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``y`` channel, the ``height`` will be the value of
-          ``rangeStep``.
-
-        **Note** : For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        height of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    name : string
-        Name of the visualization for later reference.
-    projection : :class:`Projection`
-        An object defining properties of the geographic projection shared by underlying
-        layers.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    view : :class:`ViewBackground`
-        An object defining the view background's fill and stroke.
-
-        **Default value:** none (transparent)
-    width : float
-        The width of a visualization.
-
-        **Default value:** This will be determined by the following rules:
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its x-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the width will
-          be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For x-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the width is `determined by the range step, paddings, and the
-          cardinality of the field mapped to x-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__.   Otherwise, if the
-          ``rangeStep`` is ``null``, the width will be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``x`` channel, the ``width`` will be the value of
-          `config.scale.textXRangeStep
-          <https://vega.github.io/vega-lite/docs/size.html#default-width-and-height>`__ for
-          ``text`` mark and the value of ``rangeStep`` for other marks.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        width of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    """
-    _schema = {'$ref': '#/definitions/LayerSpec'}
-
-    def __init__(self, layer=Undefined, data=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, projection=Undefined, resolve=Undefined,
-                 title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds):
-        super(LayerSpec, self).__init__(layer=layer, data=data, description=description,
-                                        encoding=encoding, height=height, name=name,
-                                        projection=projection, resolve=resolve, title=title,
-                                        transform=transform, view=view, width=width, **kwds)
-
-
-class RepeatSpec(Spec):
-    """RepeatSpec schema wrapper
-
-    Mapping(required=[repeat, spec])
-    Base interface for a repeat specification.
-
-    Attributes
-    ----------
-
-    repeat : anyOf(List(string), :class:`RepeatMapping`)
-        Definition for fields to be repeated.  One of:
-        1) An array of fields to be repeated.  If ``"repeat"`` is an array, the field can be
-        referred using ``{"repeat": "repeat"}``
-        2) An object that mapped ``"row"`` and/or ``"column"`` to the listed of fields to be
-        repeated along the particular orientations. The objects ``{"repeat": "row"}`` and
-        ``{"repeat": "column"}`` can be used to refer to the repeated field respectively.
-    spec : :class:`Spec`
-        A specification of the view that gets repeated.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/RepeatSpec'}
-
-    def __init__(self, repeat=Undefined, spec=Undefined, align=Undefined, bounds=Undefined,
-                 center=Undefined, columns=Undefined, data=Undefined, description=Undefined,
-                 name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined,
-                 transform=Undefined, **kwds):
-        super(RepeatSpec, self).__init__(repeat=repeat, spec=spec, align=align, bounds=bounds,
-                                         center=center, columns=columns, data=data,
-                                         description=description, name=name, resolve=resolve,
-                                         spacing=spacing, title=title, transform=transform, **kwds)
-
-
-class SphereGenerator(Generator):
-    """SphereGenerator schema wrapper
-
-    Mapping(required=[sphere])
-
-    Attributes
-    ----------
-
-    sphere : anyOf(enum(True), Mapping(required=[]))
-        Generate sphere GeoJSON data for the full globe.
-    name : string
-        Provide a placeholder name and bind data at runtime.
-    """
-    _schema = {'$ref': '#/definitions/SphereGenerator'}
-
-    def __init__(self, sphere=Undefined, name=Undefined, **kwds):
-        super(SphereGenerator, self).__init__(sphere=sphere, name=name, **kwds)
-
-
-class StackOffset(VegaLiteSchema):
-    """StackOffset schema wrapper
-
-    enum('zero', 'center', 'normalize')
-    """
-    _schema = {'$ref': '#/definitions/StackOffset'}
-
-    def __init__(self, *args):
-        super(StackOffset, self).__init__(*args)
-
-
-class StandardType(VegaLiteSchema):
-    """StandardType schema wrapper
-
-    enum('quantitative', 'ordinal', 'temporal', 'nominal')
-    """
-    _schema = {'$ref': '#/definitions/StandardType'}
-
-    def __init__(self, *args):
-        super(StandardType, self).__init__(*args)
-
-
-class StringFieldDefWithCondition(VegaLiteSchema):
-    """StringFieldDefWithCondition schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/StringFieldDefWithCondition'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(StringFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin,
-                                                          condition=condition, field=field,
-                                                          legend=legend, scale=scale, sort=sort,
-                                                          timeUnit=timeUnit, title=title, **kwds)
-
-
-class StringFieldDefWithConditionTypeForShape(VegaLiteSchema):
-    """StringFieldDefWithConditionTypeForShape schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`TypeForShape`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend.
-        If ``null``, the legend for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following:
-
-
-        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
-          Javascript.
-        * `A sort-by-encoding definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ for sorting
-          by another encoding channel. (This type of sort definition is not available for
-          ``row`` and ``column`` channels.)
-        * `A sort field definition
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-          another field.
-        * `An array specifying the field values in preferred order
-          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-          sort order will obey the values in the array, followed by any unspecified values
-          in their original order.  For discrete time field, values in the sort array can be
-          `date-time definition objects <types#datetime>`__. In addition, for time units
-          ``"month"`` and ``"day"``, the values can be the month or day names (case
-          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
-        * ``null`` indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/StringFieldDefWithCondition<TypeForShape>'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(StringFieldDefWithConditionTypeForShape, self).__init__(type=type, aggregate=aggregate,
-                                                                      bin=bin, condition=condition,
-                                                                      field=field, legend=legend,
-                                                                      scale=scale, sort=sort,
-                                                                      timeUnit=timeUnit, title=title,
-                                                                      **kwds)
-
-
-class StringValueDefWithCondition(VegaLiteSchema):
-    """StringValueDefWithCondition schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/StringValueDefWithCondition'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(StringValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds)
-
-
-class StringValueDefWithConditionTypeForShape(VegaLiteSchema):
-    """StringValueDefWithConditionTypeForShape schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`,
-    :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/StringValueDefWithCondition<TypeForShape>'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(StringValueDefWithConditionTypeForShape, self).__init__(condition=condition, value=value,
-                                                                      **kwds)
-
-
-class StrokeCap(VegaLiteSchema):
-    """StrokeCap schema wrapper
-
-    enum('butt', 'round', 'square')
-    """
-    _schema = {'$ref': '#/definitions/StrokeCap'}
-
-    def __init__(self, *args):
-        super(StrokeCap, self).__init__(*args)
-
-
-class StrokeJoin(VegaLiteSchema):
-    """StrokeJoin schema wrapper
-
-    enum('miter', 'round', 'bevel')
-    """
-    _schema = {'$ref': '#/definitions/StrokeJoin'}
-
-    def __init__(self, *args):
-        super(StrokeJoin, self).__init__(*args)
-
-
-class StyleConfigIndex(VegaLiteSchema):
-    """StyleConfigIndex schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/definitions/StyleConfigIndex'}
-
-    def __init__(self, **kwds):
-        super(StyleConfigIndex, self).__init__(**kwds)
-
-
-class SymbolShape(VegaLiteSchema):
-    """SymbolShape schema wrapper
-
-    string
-    """
-    _schema = {'$ref': '#/definitions/SymbolShape'}
-
-    def __init__(self, *args):
-        super(SymbolShape, self).__init__(*args)
-
-
-class TextBaseline(VegaLiteSchema):
-    """TextBaseline schema wrapper
-
-    anyOf(enum('alphabetic'), :class:`Baseline`)
-    """
-    _schema = {'$ref': '#/definitions/TextBaseline'}
-
-    def __init__(self, *args, **kwds):
-        super(TextBaseline, self).__init__(*args, **kwds)
-
-
-class Baseline(TextBaseline):
-    """Baseline schema wrapper
-
-    enum('top', 'middle', 'bottom')
-    """
-    _schema = {'$ref': '#/definitions/Baseline'}
-
-    def __init__(self, *args):
-        super(Baseline, self).__init__(*args)
-
-
-class TextConfig(VegaLiteSchema):
-    """TextConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    shortTimeLabels : boolean
-        Whether month names and weekday names should be abbreviated.
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/TextConfig'}
-
-    def __init__(self, align=Undefined, angle=Undefined, baseline=Undefined, color=Undefined,
-                 cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined, dy=Undefined,
-                 ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined, filled=Undefined,
-                 font=Undefined, fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined,
-                 height=Undefined, href=Undefined, interpolate=Undefined, limit=Undefined,
-                 opacity=Undefined, order=Undefined, orient=Undefined, radius=Undefined,
-                 shape=Undefined, shortTimeLabels=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined,
-                 y2=Undefined, **kwds):
-        super(TextConfig, self).__init__(align=align, angle=angle, baseline=baseline, color=color,
-                                         cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx,
-                                         dy=dy, ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity,
-                                         filled=filled, font=font, fontSize=fontSize,
-                                         fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                                         href=href, interpolate=interpolate, limit=limit,
-                                         opacity=opacity, order=order, orient=orient, radius=radius,
-                                         shape=shape, shortTimeLabels=shortTimeLabels, size=size,
-                                         stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                                         strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                                         strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                                         strokeWidth=strokeWidth, tension=tension, text=text,
-                                         theta=theta, tooltip=tooltip, width=width, x=x, x2=x2, y=y,
-                                         y2=y2, **kwds)
-
-
-class TextFieldDef(VegaLiteSchema):
-    """TextFieldDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/TextFieldDef'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(TextFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field,
-                                           format=format, formatType=formatType, timeUnit=timeUnit,
-                                           title=title, **kwds)
-
-
-class TextFieldDefWithCondition(VegaLiteSchema):
-    """TextFieldDefWithCondition schema wrapper
-
-    Mapping(required=[type])
-    A FieldDef with Condition :raw-html:`<ValueDef>`
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDef`, List(:class:`ConditionalValueDef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    format : string
-        The text formatting pattern for labels of guides (axes, legends, headers) and text
-        marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
-        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : enum('number', 'time')
-        The format type for labels ( ``"number"`` or ``"time"`` ).
-
-        **Default value:**
-
-
-        * ``"time"`` for temporal fields and ordinal and nomimal fields with ``timeUnit``.
-        * ``"number"`` for quantitative fields as well as ordinal and nomimal fields without
-          ``timeUnit``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/TextFieldDefWithCondition'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
-                 title=Undefined, **kwds):
-        super(TextFieldDefWithCondition, self).__init__(type=type, aggregate=aggregate, bin=bin,
-                                                        condition=condition, field=field, format=format,
-                                                        formatType=formatType, timeUnit=timeUnit,
-                                                        title=title, **kwds)
-
-
-class TextValueDefWithCondition(VegaLiteSchema):
-    """TextValueDefWithCondition schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`,
-    List(:class:`ConditionalValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : :class:`Value`
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/TextValueDefWithCondition'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(TextValueDefWithCondition, self).__init__(condition=condition, value=value, **kwds)
-
-
-class TickConfig(VegaLiteSchema):
-    """TickConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-        The horizontal alignment of the text. One of ``"left"``, ``"right"``, ``"center"``.
-    angle : float
-        The rotation angle of the text, in degrees.
-    bandSize : float
-        The width of the ticks.
-
-        **Default value:**  3/4 of rangeStep.
-    baseline : :class:`TextBaseline`
-        The vertical alignment of the text. One of ``"top"``, ``"middle"``, ``"bottom"``.
-
-        **Default value:** ``"middle"``
-    color : :class:`Color`
-        Default color.  Note that ``fill`` and ``stroke`` have higher precedence than
-        ``color`` and will override ``color``.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    cursor : :class:`Cursor`
-        The mouse cursor used over the mark. Any valid `CSS cursor type
-        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
-    dir : :class:`Dir`
-        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
-        (right-to-left). This property determines on which side is truncated in response to
-        the limit parameter.
-
-        **Default value:** ``"ltr"``
-    dx : float
-        The horizontal offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    dy : float
-        The vertical offset, in pixels, between the text label and its anchor point. The
-        offset is applied after rotation by the *angle* property.
-    ellipsis : string
-        The ellipsis string for text truncated in response to the limit parameter.
-
-        **Default value:** ``"…"``
-    fill : :class:`Color`
-        Default Fill Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for ``point``, ``line`` and ``rule`` ; otherwise,
-        ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : string
-        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
-    fontSize : float
-        The font size, in pixels.
-    fontStyle : :class:`FontStyle`
-        The font style (e.g., ``"italic"`` ).
-    fontWeight : :class:`FontWeight`
-        The font weight.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    height : float
-        Height of the marks.
-    href : string
-        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
-    interpolate : :class:`Interpolate`
-        The line interpolation method to use for line and area marks. One of the following:
-
-
-        * ``"linear"`` : piecewise linear segments, as in a polyline.
-        * ``"linear-closed"`` : close the linear segments to form a polygon.
-        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
-          function.
-        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
-          step function.
-        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
-          step function.
-        * ``"basis"`` : a B-spline, with control point duplication on the ends.
-        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
-        * ``"basis-closed"`` : a closed B-spline, as in a loop.
-        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
-        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
-          but will intersect other control points.
-        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
-        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
-          straighten the spline.
-        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
-    limit : float
-        The maximum length of the text mark in pixels. The text value will be automatically
-        truncated if the rendered size exceeds the limit.
-
-        **Default value:** ``0``, indicating no limit
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts.
-        The value is either horizontal (default) or vertical.
-
-
-        * For bar, rule and tick, this determines whether the size of the bar and tick
-        should be applied to x or y dimension.
-        * For area, this property determines the orient property of the Vega output.
-        * For line and trail marks, this property determines the sort order of the points in
-          the line
-        if ``config.sortLineBy`` is not specified.
-        For stacked charts, this is always determined by the orientation of the stack;
-        therefore explicitly specified value will be ignored.
-    radius : float
-        Polar coordinate radial offset, in pixels, of the text label from the origin
-        determined by the ``x`` and ``y`` properties.
-    shape : string
-        Shape of the point marks. Supported values include:
-
-
-        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
-          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
-          ``"triangle-left"``.
-        * the line symbol ``"stroke"``
-        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
-        * a custom `SVG path string
-          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
-          sizing, custom shape paths should be defined within a square bounding box with
-          coordinates ranging from -1 to 1 along both the x and y dimensions.)
-
-        **Default value:** ``"circle"``
-    size : float
-        Default size for marks.
-
-
-        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
-          marks. For example: in the case of circles, the radius is determined in part by
-          the square root of the size value.
-        * For ``bar``, this represents the band size of the bar, in pixels.
-        * For ``text``, this represents the font size, in pixels.
-
-        **Default value:** ``30`` for point, circle, square marks; ``rangeStep`` - 1 for bar
-        marks with discrete dimensions; ``5`` for bar marks with continuous dimensions;
-        ``11`` for text marks.
-    stroke : :class:`Color`
-        Default Stroke Color.  This has higher precedence than ``config.color``
-
-        **Default value:** (None)
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    tension : float
-        Depending on the interpolation type, sets the tension parameter (for line and area
-        marks).
-    text : string
-        Placeholder text if the ``text`` channel is not specified
-    theta : float
-        Polar coordinate angle, in radians, of the text label from the origin determined by
-        the ``x`` and ``y`` properties. Values for ``theta`` follow the same convention of
-        ``arc`` mark ``startAngle`` and ``endAngle`` properties: angles are measured in
-        radians, with ``0`` indicating "north".
-    thickness : float
-        Thickness of the tick mark.
-
-        **Default value:**  ``1``
-    tooltip : anyOf(:class:`Value`, :class:`TooltipContent`, None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``{"content": "encoding"}``, then all fields from ``encoding``
-          will be used.
-        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
-          highlighted data point will be used.
-        * If set to ``null``, then no tooltip will be used.
-    width : float
-        Width of the marks.
-    x : anyOf(float, enum('width'))
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, enum('width'))
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, enum('height'))
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, enum('width'))
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/TickConfig'}
-
-    def __init__(self, align=Undefined, angle=Undefined, bandSize=Undefined, baseline=Undefined,
-                 color=Undefined, cornerRadius=Undefined, cursor=Undefined, dir=Undefined, dx=Undefined,
-                 dy=Undefined, ellipsis=Undefined, fill=Undefined, fillOpacity=Undefined,
-                 filled=Undefined, font=Undefined, fontSize=Undefined, fontStyle=Undefined,
-                 fontWeight=Undefined, height=Undefined, href=Undefined, interpolate=Undefined,
-                 limit=Undefined, opacity=Undefined, order=Undefined, orient=Undefined,
-                 radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
-                 strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOpacity=Undefined,
-                 strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined,
-                 y=Undefined, y2=Undefined, **kwds):
-        super(TickConfig, self).__init__(align=align, angle=angle, bandSize=bandSize, baseline=baseline,
-                                         color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir,
-                                         dx=dx, dy=dy, ellipsis=ellipsis, fill=fill,
-                                         fillOpacity=fillOpacity, filled=filled, font=font,
-                                         fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight,
-                                         height=height, href=href, interpolate=interpolate, limit=limit,
-                                         opacity=opacity, order=order, orient=orient, radius=radius,
-                                         shape=shape, size=size, stroke=stroke, strokeCap=strokeCap,
-                                         strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                         strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit,
-                                         strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                         tension=tension, text=text, theta=theta, thickness=thickness,
-                                         tooltip=tooltip, width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
-
-
-class TimeUnit(VegaLiteSchema):
-    """TimeUnit schema wrapper
-
-    anyOf(:class:`SingleTimeUnit`, :class:`MultiTimeUnit`)
-    """
-    _schema = {'$ref': '#/definitions/TimeUnit'}
-
-    def __init__(self, *args, **kwds):
-        super(TimeUnit, self).__init__(*args, **kwds)
-
-
-class MultiTimeUnit(TimeUnit):
-    """MultiTimeUnit schema wrapper
-
-    anyOf(:class:`LocalMultiTimeUnit`, :class:`UtcMultiTimeUnit`)
-    """
-    _schema = {'$ref': '#/definitions/MultiTimeUnit'}
-
-    def __init__(self, *args, **kwds):
-        super(MultiTimeUnit, self).__init__(*args, **kwds)
-
-
-class LocalMultiTimeUnit(MultiTimeUnit):
-    """LocalMultiTimeUnit schema wrapper
-
-    enum('yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours',
-    'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'quartermonth',
-    'monthdate', 'monthdatehours', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds',
-    'secondsmilliseconds')
-    """
-    _schema = {'$ref': '#/definitions/LocalMultiTimeUnit'}
-
-    def __init__(self, *args):
-        super(LocalMultiTimeUnit, self).__init__(*args)
-
-
-class SingleTimeUnit(TimeUnit):
-    """SingleTimeUnit schema wrapper
-
-    anyOf(:class:`LocalSingleTimeUnit`, :class:`UtcSingleTimeUnit`)
-    """
-    _schema = {'$ref': '#/definitions/SingleTimeUnit'}
-
-    def __init__(self, *args, **kwds):
-        super(SingleTimeUnit, self).__init__(*args, **kwds)
-
-
-class LocalSingleTimeUnit(SingleTimeUnit):
-    """LocalSingleTimeUnit schema wrapper
-
-    enum('year', 'quarter', 'month', 'day', 'date', 'hours', 'minutes', 'seconds',
-    'milliseconds')
-    """
-    _schema = {'$ref': '#/definitions/LocalSingleTimeUnit'}
-
-    def __init__(self, *args):
-        super(LocalSingleTimeUnit, self).__init__(*args)
-
-
-class TitleAnchor(VegaLiteSchema):
-    """TitleAnchor schema wrapper
-
-    enum(None, 'start', 'middle', 'end')
-    """
-    _schema = {'$ref': '#/definitions/TitleAnchor'}
-
-    def __init__(self, *args):
-        super(TitleAnchor, self).__init__(*args)
-
-
-class TitleConfig(VegaLiteSchema):
-    """TitleConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    align : :class:`Align`
-
-    anchor : :class:`TitleAnchor`
-        The anchor position for placing the title. One of ``"start"``, ``"middle"``, or
-        ``"end"``. For example, with an orientation of top these anchor positions map to a
-        left-, center-, or right-aligned title.
-    angle : float
-        Angle in degrees of title text.
-    baseline : :class:`TextBaseline`
-        Vertical text baseline for title text. One of ``"top"``, ``"middle"``, ``"bottom"``,
-        or ``"alphabetic"``.
-    color : :class:`Color`
-        Text color for title text.
-    dx : float
-        Delta offset for title text x-coordinate.
-    dy : float
-        Delta offset for title text y-coordinate.
-    font : string
-        Font name for title text.
-    fontSize : float
-        Font size in pixels for title text.
-
-        **Default value:** ``10``.
-    fontStyle : :class:`FontStyle`
-        Font style for title text.
-    fontWeight : :class:`FontWeight`
-        Font weight for title text.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    frame : :class:`TitleFrame`
-        The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative
-        to the full bounding box) or ``"group"`` (to anchor relative to the group width or
-        height).
-    limit : float
-        The maximum allowed length in pixels of legend labels.
-    offset : float
-        The orthogonal offset in pixels by which to displace the title from its position
-        along the edge of the chart.
-    orient : :class:`TitleOrient`
-        Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` )
-    """
-    _schema = {'$ref': '#/definitions/TitleConfig'}
-
-    def __init__(self, align=Undefined, anchor=Undefined, angle=Undefined, baseline=Undefined,
-                 color=Undefined, dx=Undefined, dy=Undefined, font=Undefined, fontSize=Undefined,
-                 fontStyle=Undefined, fontWeight=Undefined, frame=Undefined, limit=Undefined,
-                 offset=Undefined, orient=Undefined, **kwds):
-        super(TitleConfig, self).__init__(align=align, anchor=anchor, angle=angle, baseline=baseline,
-                                          color=color, dx=dx, dy=dy, font=font, fontSize=fontSize,
-                                          fontStyle=fontStyle, fontWeight=fontWeight, frame=frame,
-                                          limit=limit, offset=offset, orient=orient, **kwds)
-
-
-class TitleFrame(VegaLiteSchema):
-    """TitleFrame schema wrapper
-
-    enum('bounds', 'group')
-    """
-    _schema = {'$ref': '#/definitions/TitleFrame'}
-
-    def __init__(self, *args):
-        super(TitleFrame, self).__init__(*args)
-
-
-class TitleOrient(VegaLiteSchema):
-    """TitleOrient schema wrapper
-
-    enum('none', 'left', 'right', 'top', 'bottom')
-    """
-    _schema = {'$ref': '#/definitions/TitleOrient'}
-
-    def __init__(self, *args):
-        super(TitleOrient, self).__init__(*args)
-
-
-class TitleParams(VegaLiteSchema):
-    """TitleParams schema wrapper
-
-    Mapping(required=[text])
-
-    Attributes
-    ----------
-
-    text : string
-        The title text.
-    align : :class:`Align`
-
-    anchor : :class:`TitleAnchor`
-        The anchor position for placing the title. One of ``"start"``, ``"middle"``, or
-        ``"end"``. For example, with an orientation of top these anchor positions map to a
-        left-, center-, or right-aligned title.
-
-        **Default value:** ``"middle"`` for `single
-        <https://vega.github.io/vega-lite/docs/spec.html>`__ and `layered
-        <https://vega.github.io/vega-lite/docs/layer.html>`__ views.
-        ``"start"`` for other composite views.
-
-        **Note:** `For now <https://github.com/vega/vega-lite/issues/2875>`__, ``anchor`` is
-        only customizable only for `single
-        <https://vega.github.io/vega-lite/docs/spec.html>`__ and `layered
-        <https://vega.github.io/vega-lite/docs/layer.html>`__ views.  For other composite
-        views, ``anchor`` is always ``"start"``.
-    angle : float
-        Angle in degrees of title text.
-    baseline : :class:`TextBaseline`
-        Vertical text baseline for title text. One of ``"top"``, ``"middle"``, ``"bottom"``,
-        or ``"alphabetic"``.
-    color : :class:`Color`
-        Text color for title text.
-    dx : float
-        Delta offset for title text x-coordinate.
-    dy : float
-        Delta offset for title text y-coordinate.
-    font : string
-        Font name for title text.
-    fontSize : float
-        Font size in pixels for title text.
-
-        **Default value:** ``10``.
-    fontStyle : :class:`FontStyle`
-        Font style for title text.
-    fontWeight : :class:`FontWeight`
-        Font weight for title text.
-        This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a number ( ``100``,
-        ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and ``"bold"`` = ``700``
-        ).
-    frame : :class:`TitleFrame`
-        The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative
-        to the full bounding box) or ``"group"`` (to anchor relative to the group width or
-        height).
-    limit : float
-        The maximum allowed length in pixels of legend labels.
-    offset : float
-        The orthogonal offset in pixels by which to displace the title from its position
-        along the edge of the chart.
-    orient : :class:`TitleOrient`
-        Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` )
-    style : anyOf(string, List(string))
-        A `mark style property <https://vega.github.io/vega-lite/docs/config.html#style>`__
-        to apply to the title text mark.
-
-        **Default value:** ``"group-title"``.
-    zindex : float
-        The integer z-index indicating the layering of the title group relative to other
-        axis, mark and legend groups.
-
-        **Default value:** ``0``.
-    """
-    _schema = {'$ref': '#/definitions/TitleParams'}
-
-    def __init__(self, text=Undefined, align=Undefined, anchor=Undefined, angle=Undefined,
-                 baseline=Undefined, color=Undefined, dx=Undefined, dy=Undefined, font=Undefined,
-                 fontSize=Undefined, fontStyle=Undefined, fontWeight=Undefined, frame=Undefined,
-                 limit=Undefined, offset=Undefined, orient=Undefined, style=Undefined, zindex=Undefined,
-                 **kwds):
-        super(TitleParams, self).__init__(text=text, align=align, anchor=anchor, angle=angle,
-                                          baseline=baseline, color=color, dx=dx, dy=dy, font=font,
-                                          fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight,
-                                          frame=frame, limit=limit, offset=offset, orient=orient,
-                                          style=style, zindex=zindex, **kwds)
-
-
-class TooltipContent(VegaLiteSchema):
-    """TooltipContent schema wrapper
-
-    Mapping(required=[content])
-
-    Attributes
-    ----------
-
-    content : enum('encoding', 'data')
-
-    """
-    _schema = {'$ref': '#/definitions/TooltipContent'}
-
-    def __init__(self, content=Undefined, **kwds):
-        super(TooltipContent, self).__init__(content=content, **kwds)
-
-
-class TopLevelSpec(VegaLiteSchema):
-    """TopLevelSpec schema wrapper
-
-    anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`,
-    :class:`TopLevelRepeatSpec`, :class:`TopLevelConcatSpec`, :class:`TopLevelVConcatSpec`,
-    :class:`TopLevelHConcatSpec`)
-    A Vega-Lite top-level specification.
-    This is the root class for all Vega-Lite specifications.
-    (The json schema is generated from this type.)
-    """
-    _schema = {'$ref': '#/definitions/TopLevelSpec'}
-
-    def __init__(self, *args, **kwds):
-        super(TopLevelSpec, self).__init__(*args, **kwds)
-
-
-class TopLevelConcatSpec(TopLevelSpec):
-    """TopLevelConcatSpec schema wrapper
-
-    Mapping(required=[concat])
-
-    Attributes
-    ----------
-
-    concat : List(:class:`Spec`)
-        A list of views to be concatenated.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    background : string
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** none (transparent)
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    config : :class:`Config`
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets.
-        This can be an array of objects or primitive values or a string. Arrays of primitive
-        values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : Mapping(required=[])
-        Optional metadata that will be passed to Vega.
-        This object is completely ignored by Vega and Vega-Lite and can be used for custom
-        metadata.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelConcatSpec'}
-
-    def __init__(self, concat=Undefined, align=Undefined, autosize=Undefined, background=Undefined,
-                 bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined,
-                 data=Undefined, datasets=Undefined, description=Undefined, name=Undefined,
-                 padding=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined,
-                 transform=Undefined, usermeta=Undefined, **kwds):
-        super(TopLevelConcatSpec, self).__init__(concat=concat, align=align, autosize=autosize,
-                                                 background=background, bounds=bounds, center=center,
-                                                 columns=columns, config=config, data=data,
-                                                 datasets=datasets, description=description, name=name,
-                                                 padding=padding, resolve=resolve, spacing=spacing,
-                                                 title=title, transform=transform, usermeta=usermeta,
-                                                 **kwds)
-
-
-class TopLevelFacetSpec(TopLevelSpec):
-    """TopLevelFacetSpec schema wrapper
-
-    Mapping(required=[data, facet, spec])
-
-    Attributes
-    ----------
-
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`)
-        Definition for how to facet the data.  One of:
-        1) `a field definition for faceting the plot by one field
-        <https://vega.github.io/vega-lite/docs/facet.html#field-def>`__
-        2) `An object that maps row and column channels to their field definitions
-        <https://vega.github.io/vega-lite/docs/facet.html#mapping>`__
-    spec : anyOf(:class:`LayerSpec`, :class:`FacetedUnitSpec`)
-        A specification of the view that gets faceted.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    background : string
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** none (transparent)
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    config : :class:`Config`
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets.
-        This can be an array of objects or primitive values or a string. Arrays of primitive
-        values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : Mapping(required=[])
-        Optional metadata that will be passed to Vega.
-        This object is completely ignored by Vega and Vega-Lite and can be used for custom
-        metadata.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelFacetSpec'}
-
-    def __init__(self, data=Undefined, facet=Undefined, spec=Undefined, align=Undefined,
-                 autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined,
-                 columns=Undefined, config=Undefined, datasets=Undefined, description=Undefined,
-                 name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined,
-                 title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
-        super(TopLevelFacetSpec, self).__init__(data=data, facet=facet, spec=spec, align=align,
-                                                autosize=autosize, background=background, bounds=bounds,
-                                                center=center, columns=columns, config=config,
-                                                datasets=datasets, description=description, name=name,
-                                                padding=padding, resolve=resolve, spacing=spacing,
-                                                title=title, transform=transform, usermeta=usermeta,
-                                                **kwds)
-
-
-class TopLevelHConcatSpec(TopLevelSpec):
-    """TopLevelHConcatSpec schema wrapper
-
-    Mapping(required=[hconcat])
-
-    Attributes
-    ----------
-
-    hconcat : List(:class:`Spec`)
-        A list of views to be concatenated and put into a row.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    background : string
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** none (transparent)
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : boolean
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        **Default value:** ``false``
-    config : :class:`Config`
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets.
-        This can be an array of objects or primitive values or a string. Arrays of primitive
-        values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : float
-        The spacing in pixels between sub-views of the concat operator.
-
-        **Default value** : ``10``
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : Mapping(required=[])
-        Optional metadata that will be passed to Vega.
-        This object is completely ignored by Vega and Vega-Lite and can be used for custom
-        metadata.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelHConcatSpec'}
-
-    def __init__(self, hconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined,
-                 center=Undefined, config=Undefined, data=Undefined, datasets=Undefined,
-                 description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined,
-                 spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
-        super(TopLevelHConcatSpec, self).__init__(hconcat=hconcat, autosize=autosize,
-                                                  background=background, bounds=bounds, center=center,
-                                                  config=config, data=data, datasets=datasets,
-                                                  description=description, name=name, padding=padding,
-                                                  resolve=resolve, spacing=spacing, title=title,
-                                                  transform=transform, usermeta=usermeta, **kwds)
-
-
-class TopLevelLayerSpec(TopLevelSpec):
-    """TopLevelLayerSpec schema wrapper
-
-    Mapping(required=[layer])
-
-    Attributes
-    ----------
-
-    layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`))
-        Layer or single view specifications to be layered.
-
-        **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column``
-        channels as layering facet specifications is not allowed. Instead, use the `facet
-        operator <https://vega.github.io/vega-lite/docs/facet.html>`__ and place a layer
-        inside a facet.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    background : string
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** none (transparent)
-    config : :class:`Config`
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets.
-        This can be an array of objects or primitive values or a string. Arrays of primitive
-        values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    encoding : :class:`Encoding`
-        A shared key-value mapping between encoding channels and definition of fields in the
-        underlying layers.
-    height : float
-        The height of a visualization.
-
-        **Default value:**
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its y-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the height will
-          be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For y-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the height is `determined by the range step, paddings, and the
-          cardinality of the field mapped to y-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__. Otherwise, if the
-          ``rangeStep`` is ``null``, the height will be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``y`` channel, the ``height`` will be the value of
-          ``rangeStep``.
-
-        **Note** : For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        height of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    name : string
-        Name of the visualization for later reference.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    projection : :class:`Projection`
-        An object defining properties of the geographic projection shared by underlying
-        layers.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : Mapping(required=[])
-        Optional metadata that will be passed to Vega.
-        This object is completely ignored by Vega and Vega-Lite and can be used for custom
-        metadata.
-    view : :class:`ViewBackground`
-        An object defining the view background's fill and stroke.
-
-        **Default value:** none (transparent)
-    width : float
-        The width of a visualization.
-
-        **Default value:** This will be determined by the following rules:
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its x-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the width will
-          be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For x-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the width is `determined by the range step, paddings, and the
-          cardinality of the field mapped to x-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__.   Otherwise, if the
-          ``rangeStep`` is ``null``, the width will be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``x`` channel, the ``width`` will be the value of
-          `config.scale.textXRangeStep
-          <https://vega.github.io/vega-lite/docs/size.html#default-width-and-height>`__ for
-          ``text`` mark and the value of ``rangeStep`` for other marks.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        width of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelLayerSpec'}
-
-    def __init__(self, layer=Undefined, autosize=Undefined, background=Undefined, config=Undefined,
-                 data=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, padding=Undefined, projection=Undefined,
-                 resolve=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined,
-                 view=Undefined, width=Undefined, **kwds):
-        super(TopLevelLayerSpec, self).__init__(layer=layer, autosize=autosize, background=background,
-                                                config=config, data=data, datasets=datasets,
-                                                description=description, encoding=encoding,
-                                                height=height, name=name, padding=padding,
-                                                projection=projection, resolve=resolve, title=title,
-                                                transform=transform, usermeta=usermeta, view=view,
-                                                width=width, **kwds)
-
-
-class TopLevelRepeatSpec(TopLevelSpec):
-    """TopLevelRepeatSpec schema wrapper
-
-    Mapping(required=[repeat, spec])
-
-    Attributes
-    ----------
-
-    repeat : anyOf(List(string), :class:`RepeatMapping`)
-        Definition for fields to be repeated.  One of:
-        1) An array of fields to be repeated.  If ``"repeat"`` is an array, the field can be
-        referred using ``{"repeat": "repeat"}``
-        2) An object that mapped ``"row"`` and/or ``"column"`` to the listed of fields to be
-        repeated along the particular orientations. The objects ``{"repeat": "row"}`` and
-        ``{"repeat": "column"}`` can be used to refer to the repeated field respectively.
-    spec : :class:`Spec`
-        A specification of the view that gets repeated.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    background : string
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** none (transparent)
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    config : :class:`Config`
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets.
-        This can be an array of objects or primitive values or a string. Arrays of primitive
-        values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : Mapping(required=[])
-        Optional metadata that will be passed to Vega.
-        This object is completely ignored by Vega and Vega-Lite and can be used for custom
-        metadata.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelRepeatSpec'}
-
-    def __init__(self, repeat=Undefined, spec=Undefined, align=Undefined, autosize=Undefined,
-                 background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined,
-                 config=Undefined, data=Undefined, datasets=Undefined, description=Undefined,
-                 name=Undefined, padding=Undefined, resolve=Undefined, spacing=Undefined,
-                 title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
-        super(TopLevelRepeatSpec, self).__init__(repeat=repeat, spec=spec, align=align,
-                                                 autosize=autosize, background=background,
-                                                 bounds=bounds, center=center, columns=columns,
-                                                 config=config, data=data, datasets=datasets,
-                                                 description=description, name=name, padding=padding,
-                                                 resolve=resolve, spacing=spacing, title=title,
-                                                 transform=transform, usermeta=usermeta, **kwds)
-
-
-class TopLevelUnitSpec(TopLevelSpec):
-    """TopLevelUnitSpec schema wrapper
-
-    Mapping(required=[data, mark])
-
-    Attributes
-    ----------
-
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    mark : :class:`AnyMark`
-        A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``,
-        ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark
-        definition object <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns.
-        The supported string values are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other.
-        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
-          or column may be of variable size.
-        * For ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    background : string
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** none (transparent)
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to
-        ``hconcat`` (for ``concat`` ) and to using the ``column`` channel (for ``facet`` and
-        ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for:
-
-
-        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
-        * the ``facet`` and ``repeat`` operator with one field/repetition definition
-          (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    config : :class:`Config`
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets.
-        This can be an array of objects or primitive values or a string. Arrays of primitive
-        values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    encoding : :class:`FacetedEncoding`
-        A key-value mapping between encoding channels and definition of fields.
-    height : float
-        The height of a visualization.
-
-        **Default value:**
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its y-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the height will
-          be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For y-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the height is `determined by the range step, paddings, and the
-          cardinality of the field mapped to y-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__. Otherwise, if the
-          ``rangeStep`` is ``null``, the height will be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``y`` channel, the ``height`` will be the value of
-          ``rangeStep``.
-
-        **Note** : For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        height of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    name : string
-        Name of the visualization for later reference.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    projection : :class:`Projection`
-        An object defining properties of geographic projection, which will be applied to
-        ``shape`` path for ``"geoshape"`` marks
-        and to ``latitude`` and ``"longitude"`` channels for other marks.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator.
-        An object of the form ``{"row": number, "column": number}`` can be used to set
-        different spacing values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : Mapping(required=[])
-        Optional metadata that will be passed to Vega.
-        This object is completely ignored by Vega and Vega-Lite and can be used for custom
-        metadata.
-    view : :class:`ViewBackground`
-        An object defining the view background's fill and stroke.
-
-        **Default value:** none (transparent)
-    width : float
-        The width of a visualization.
-
-        **Default value:** This will be determined by the following rules:
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its x-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the width will
-          be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For x-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the width is `determined by the range step, paddings, and the
-          cardinality of the field mapped to x-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__.   Otherwise, if the
-          ``rangeStep`` is ``null``, the width will be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``x`` channel, the ``width`` will be the value of
-          `config.scale.textXRangeStep
-          <https://vega.github.io/vega-lite/docs/size.html#default-width-and-height>`__ for
-          ``text`` mark and the value of ``rangeStep`` for other marks.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        width of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelUnitSpec'}
-
-    def __init__(self, data=Undefined, mark=Undefined, align=Undefined, autosize=Undefined,
-                 background=Undefined, bounds=Undefined, center=Undefined, columns=Undefined,
-                 config=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, padding=Undefined, projection=Undefined,
-                 resolve=Undefined, selection=Undefined, spacing=Undefined, title=Undefined,
-                 transform=Undefined, usermeta=Undefined, view=Undefined, width=Undefined, **kwds):
-        super(TopLevelUnitSpec, self).__init__(data=data, mark=mark, align=align, autosize=autosize,
-                                               background=background, bounds=bounds, center=center,
-                                               columns=columns, config=config, datasets=datasets,
-                                               description=description, encoding=encoding,
-                                               height=height, name=name, padding=padding,
-                                               projection=projection, resolve=resolve,
-                                               selection=selection, spacing=spacing, title=title,
-                                               transform=transform, usermeta=usermeta, view=view,
-                                               width=width, **kwds)
-
-
-class TopLevelVConcatSpec(TopLevelSpec):
-    """TopLevelVConcatSpec schema wrapper
-
-    Mapping(required=[vconcat])
-
-    Attributes
-    ----------
-
-    vconcat : List(:class:`Spec`)
-        A list of views to be concatenated and put into a column.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        Sets how the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``.
-        Object values can additionally specify parameters for content sizing and automatic
-        resizing.
-        ``"fit"`` is only supported for single and layered views that don't use
-        ``rangeStep``.
-
-        **Default value** : ``pad``
-    background : string
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** none (transparent)
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : boolean
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        **Default value:** ``false``
-    config : :class:`Config`
-        Vega-Lite configuration object.  This property can only be defined at the top-level
-        of a specification.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets.
-        This can be an array of objects or primitive values or a string. Arrays of primitive
-        values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    padding : :class:`Padding`
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle.  If a number, specifies padding for all sides.
-        If an object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : float
-        The spacing in pixels between sub-views of the concat operator.
-
-        **Default value** : ``10``
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : Mapping(required=[])
-        Optional metadata that will be passed to Vega.
-        This object is completely ignored by Vega and Vega-Lite and can be used for custom
-        metadata.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v3.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelVConcatSpec'}
-
-    def __init__(self, vconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined,
-                 center=Undefined, config=Undefined, data=Undefined, datasets=Undefined,
-                 description=Undefined, name=Undefined, padding=Undefined, resolve=Undefined,
-                 spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
-        super(TopLevelVConcatSpec, self).__init__(vconcat=vconcat, autosize=autosize,
-                                                  background=background, bounds=bounds, center=center,
-                                                  config=config, data=data, datasets=datasets,
-                                                  description=description, name=name, padding=padding,
-                                                  resolve=resolve, spacing=spacing, title=title,
-                                                  transform=transform, usermeta=usermeta, **kwds)
-
-
-class TopoDataFormat(DataFormat):
-    """TopoDataFormat schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    feature : string
-        The name of the TopoJSON object set to convert to a GeoJSON feature collection.
-        For example, in a map of the world, there may be an object set named
-        ``"countries"``.
-        Using the feature property, we can extract this set and generate a GeoJSON feature
-        object for each country.
-    mesh : string
-        The name of the TopoJSON object set to convert to mesh.
-        Similar to the ``feature`` option, ``mesh`` extracts a named TopoJSON object set.
-        Unlike the ``feature`` option, the corresponding geo data is returned as a single,
-        unified mesh instance, not as individual GeoJSON features.
-        Extracting a mesh is useful for more efficiently drawing borders or other geographic
-        elements that you do not need to associate with specific regions such as individual
-        countries, states or counties.
-    parse : anyOf(:class:`Parse`, None)
-        If set to ``null``, disable type inference based on the spec and only use type
-        inference based on the data.
-        Alternatively, a parsing directive object can be provided for explicit data types.
-        Each property of the object corresponds to a field name, and the value to the
-        desired data type (one of ``"number"``, ``"boolean"``, ``"date"``, or null (do not
-        parse the field)).
-        For example, ``"parse": {"modified_on": "date"}`` parses the ``modified_on`` field
-        in each input record a Date value.
-
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
-        <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
-        For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
-        the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
-        UTC date format parsing is supported similarly (e.g., ``{foo: "utc:'%m%d%Y'"}`` ).
-        See more about `UTC time
-        <https://vega.github.io/vega-lite/docs/timeunit.html#utc>`__
-    type : enum('topojson')
-        Type of input data: ``"json"``, ``"csv"``, ``"tsv"``, ``"dsv"``.
-
-        **Default value:**  The default format type is determined by the extension of the
-        file URL.
-        If no extension is detected, ``"json"`` will be used by default.
-    """
-    _schema = {'$ref': '#/definitions/TopoDataFormat'}
-
-    def __init__(self, feature=Undefined, mesh=Undefined, parse=Undefined, type=Undefined, **kwds):
-        super(TopoDataFormat, self).__init__(feature=feature, mesh=mesh, parse=parse, type=type, **kwds)
-
-
-class Transform(VegaLiteSchema):
-    """Transform schema wrapper
-
-    anyOf(:class:`AggregateTransform`, :class:`BinTransform`, :class:`CalculateTransform`,
-    :class:`FilterTransform`, :class:`FlattenTransform`, :class:`FoldTransform`,
-    :class:`ImputeTransform`, :class:`JoinAggregateTransform`, :class:`LookupTransform`,
-    :class:`TimeUnitTransform`, :class:`SampleTransform`, :class:`StackTransform`,
-    :class:`WindowTransform`)
-    """
-    _schema = {'$ref': '#/definitions/Transform'}
-
-    def __init__(self, *args, **kwds):
-        super(Transform, self).__init__(*args, **kwds)
-
-
-class AggregateTransform(Transform):
-    """AggregateTransform schema wrapper
-
-    Mapping(required=[aggregate])
-
-    Attributes
-    ----------
-
-    aggregate : List(:class:`AggregatedFieldDef`)
-        Array of objects that define fields to aggregate.
-    groupby : List(:class:`FieldName`)
-        The data fields to group by. If not specified, a single group containing all data
-        objects will be used.
-    """
-    _schema = {'$ref': '#/definitions/AggregateTransform'}
-
-    def __init__(self, aggregate=Undefined, groupby=Undefined, **kwds):
-        super(AggregateTransform, self).__init__(aggregate=aggregate, groupby=groupby, **kwds)
-
-
-class BinTransform(Transform):
-    """BinTransform schema wrapper
-
-    Mapping(required=[bin, field, as])
-
-    Attributes
-    ----------
-
-    bin : anyOf(enum(True), :class:`BinParams`)
-        An object indicating bin properties, or simply ``true`` for using default bin
-        parameters.
-    field : :class:`FieldName`
-        The data field to bin.
-    as : anyOf(:class:`FieldName`, List(:class:`FieldName`))
-        The output fields at which to write the start and end bin values.
-    """
-    _schema = {'$ref': '#/definitions/BinTransform'}
-
-    def __init__(self, bin=Undefined, field=Undefined, **kwds):
-        super(BinTransform, self).__init__(bin=bin, field=field, **kwds)
-
-
-class CalculateTransform(Transform):
-    """CalculateTransform schema wrapper
-
-    Mapping(required=[calculate, as])
-
-    Attributes
-    ----------
-
-    calculate : string
-        A `expression <https://vega.github.io/vega-lite/docs/types.html#expression>`__
-        string. Use the variable ``datum`` to refer to the current data object.
-    as : :class:`FieldName`
-        The field for storing the computed formula value.
-    """
-    _schema = {'$ref': '#/definitions/CalculateTransform'}
-
-    def __init__(self, calculate=Undefined, **kwds):
-        super(CalculateTransform, self).__init__(calculate=calculate, **kwds)
-
-
-class FilterTransform(Transform):
-    """FilterTransform schema wrapper
-
-    Mapping(required=[filter])
-
-    Attributes
-    ----------
-
-    filter : :class:`LogicalOperandPredicate`
-        The ``filter`` property must be one of the predicate definitions:
-
-        1) an `expression <https://vega.github.io/vega-lite/docs/types.html#expression>`__
-        string,
-        where ``datum`` can be used to refer to the current data object
-
-        2) one of the field predicates: `equal
-        <https://vega.github.io/vega-lite/docs/filter.html#equal-predicate>`__,
-        `lt <https://vega.github.io/vega-lite/docs/filter.html#lt-predicate>`__,
-        `lte <https://vega.github.io/vega-lite/docs/filter.html#lte-predicate>`__,
-        `gt <https://vega.github.io/vega-lite/docs/filter.html#gt-predicate>`__,
-        `gte <https://vega.github.io/vega-lite/docs/filter.html#gte-predicate>`__,
-        `range <https://vega.github.io/vega-lite/docs/filter.html#range-predicate>`__,
-        `oneOf <https://vega.github.io/vega-lite/docs/filter.html#one-of-predicate>`__,
-        or `valid <https://vega.github.io/vega-lite/docs/filter.html#valid-predicate>`__,
-
-        3) a `selection predicate
-        <https://vega.github.io/vega-lite/docs/filter.html#selection-predicate>`__
-
-        4) a logical operand that combines (1), (2), or (3).
-    """
-    _schema = {'$ref': '#/definitions/FilterTransform'}
-
-    def __init__(self, filter=Undefined, **kwds):
-        super(FilterTransform, self).__init__(filter=filter, **kwds)
-
-
-class FlattenTransform(Transform):
-    """FlattenTransform schema wrapper
-
-    Mapping(required=[flatten])
-
-    Attributes
-    ----------
-
-    flatten : List(:class:`FieldName`)
-        An array of one or more data fields containing arrays to flatten.
-        If multiple fields are specified, their array values should have a parallel
-        structure, ideally with the same length.
-        If the lengths of parallel arrays do not match,
-        the longest array will be used with ``null`` values added for missing entries.
-    as : List(:class:`FieldName`)
-        The output field names for extracted array values.
-
-        **Default value:** The field name of the corresponding array field
-    """
-    _schema = {'$ref': '#/definitions/FlattenTransform'}
-
-    def __init__(self, flatten=Undefined, **kwds):
-        super(FlattenTransform, self).__init__(flatten=flatten, **kwds)
-
-
-class FoldTransform(Transform):
-    """FoldTransform schema wrapper
-
-    Mapping(required=[fold])
-
-    Attributes
-    ----------
-
-    fold : List(:class:`FieldName`)
-        An array of data fields indicating the properties to fold.
-    as : List([:class:`FieldName`, :class:`FieldName`])
-        The output field names for the key and value properties produced by the fold
-        transform.
-        **Default value:** ``["key", "value"]``
-    """
-    _schema = {'$ref': '#/definitions/FoldTransform'}
-
-    def __init__(self, fold=Undefined, **kwds):
-        super(FoldTransform, self).__init__(fold=fold, **kwds)
-
-
-class ImputeTransform(Transform):
-    """ImputeTransform schema wrapper
-
-    Mapping(required=[impute, key])
-
-    Attributes
-    ----------
-
-    impute : :class:`FieldName`
-        The data field for which the missing values should be imputed.
-    key : :class:`FieldName`
-        A key field that uniquely identifies data objects within a group.
-        Missing key values (those occurring in the data but not in the current group) will
-        be imputed.
-    frame : List(anyOf(None, float))
-        A frame specification as a two-element array used to control the window over which
-        the specified method is applied. The array entries should either be a number
-        indicating the offset from the current data object, or null to indicate unbounded
-        rows preceding or following the current data object.  For example, the value ``[-5,
-        5]`` indicates that the window should include five objects preceding and five
-        objects following the current object.
-
-        **Default value:** :  ``[null, null]`` indicating that the window includes all
-        objects.
-    groupby : List(:class:`FieldName`)
-        An optional array of fields by which to group the values.
-        Imputation will then be performed on a per-group basis.
-    keyvals : anyOf(List(Any), :class:`ImputeSequence`)
-        Defines the key values that should be considered for imputation.
-        An array of key values or an object defining a `number sequence
-        <https://vega.github.io/vega-lite/docs/impute.html#sequence-def>`__.
-
-        If provided, this will be used in addition to the key values observed within the
-        input data.  If not provided, the values will be derived from all unique values of
-        the ``key`` field. For ``impute`` in ``encoding``, the key field is the x-field if
-        the y-field is imputed, or vice versa.
-
-        If there is no impute grouping, this property *must* be specified.
-    method : :class:`ImputeMethod`
-        The imputation method to use for the field value of imputed data objects.
-        One of ``value``, ``mean``, ``median``, ``max`` or ``min``.
-
-        **Default value:**  ``"value"``
-    value : Any
-        The field value to use when the imputation ``method`` is ``"value"``.
-    """
-    _schema = {'$ref': '#/definitions/ImputeTransform'}
-
-    def __init__(self, impute=Undefined, key=Undefined, frame=Undefined, groupby=Undefined,
-                 keyvals=Undefined, method=Undefined, value=Undefined, **kwds):
-        super(ImputeTransform, self).__init__(impute=impute, key=key, frame=frame, groupby=groupby,
-                                              keyvals=keyvals, method=method, value=value, **kwds)
-
-
-class JoinAggregateTransform(Transform):
-    """JoinAggregateTransform schema wrapper
-
-    Mapping(required=[joinaggregate])
-
-    Attributes
-    ----------
-
-    joinaggregate : List(:class:`JoinAggregateFieldDef`)
-        The definition of the fields in the join aggregate, and what calculations to use.
-    groupby : List(:class:`FieldName`)
-        The data fields for partitioning the data objects into separate groups. If
-        unspecified, all data points will be in a single group.
-    """
-    _schema = {'$ref': '#/definitions/JoinAggregateTransform'}
-
-    def __init__(self, joinaggregate=Undefined, groupby=Undefined, **kwds):
-        super(JoinAggregateTransform, self).__init__(joinaggregate=joinaggregate, groupby=groupby,
-                                                     **kwds)
-
-
-class LookupTransform(Transform):
-    """LookupTransform schema wrapper
-
-    Mapping(required=[lookup, from])
-
-    Attributes
-    ----------
-
-    lookup : :class:`FieldName`
-        Key in primary data source.
-    default : string
-        The default value to use if lookup fails.
-
-        **Default value:** ``null``
-    as : anyOf(:class:`FieldName`, List(:class:`FieldName`))
-        The field or fields for storing the computed formula value.
-        If ``from.fields`` is specified, the transform will use the same names for ``as``.
-        If ``from.fields`` is not specified, ``as`` has to be a string and we put the whole
-        object into the data under the specified name.
-    from : :class:`LookupData`
-        Secondary data reference.
-    """
-    _schema = {'$ref': '#/definitions/LookupTransform'}
-
-    def __init__(self, lookup=Undefined, default=Undefined, **kwds):
-        super(LookupTransform, self).__init__(lookup=lookup, default=default, **kwds)
-
-
-class SampleTransform(Transform):
-    """SampleTransform schema wrapper
-
-    Mapping(required=[sample])
-
-    Attributes
-    ----------
-
-    sample : float
-        The maximum number of data objects to include in the sample.
-
-        **Default value:** ``1000``
-    """
-    _schema = {'$ref': '#/definitions/SampleTransform'}
-
-    def __init__(self, sample=Undefined, **kwds):
-        super(SampleTransform, self).__init__(sample=sample, **kwds)
-
-
-class StackTransform(Transform):
-    """StackTransform schema wrapper
-
-    Mapping(required=[stack, groupby, as])
-
-    Attributes
-    ----------
-
-    groupby : List(:class:`FieldName`)
-        The data fields to group by.
-    stack : :class:`FieldName`
-        The field which is stacked.
-    offset : enum('zero', 'center', 'normalize')
-        Mode for stacking marks.
-        **Default value:** ``"zero"``
-    sort : List(:class:`SortField`)
-        Field that determines the order of leaves in the stacked charts.
-    as : anyOf(:class:`FieldName`, List(:class:`FieldName`))
-        Output field names. This can be either a string or an array of strings with
-        two elements denoting the name for the fields for stack start and stack end
-        respectively.
-        If a single string(eg."val") is provided, the end field will be "val_end".
-    """
-    _schema = {'$ref': '#/definitions/StackTransform'}
-
-    def __init__(self, groupby=Undefined, stack=Undefined, offset=Undefined, sort=Undefined, **kwds):
-        super(StackTransform, self).__init__(groupby=groupby, stack=stack, offset=offset, sort=sort,
-                                             **kwds)
-
-
-class TimeUnitTransform(Transform):
-    """TimeUnitTransform schema wrapper
-
-    Mapping(required=[timeUnit, field, as])
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        The data field to apply time unit.
-    timeUnit : :class:`TimeUnit`
-        The timeUnit.
-    as : :class:`FieldName`
-        The output field to write the timeUnit value.
-    """
-    _schema = {'$ref': '#/definitions/TimeUnitTransform'}
-
-    def __init__(self, field=Undefined, timeUnit=Undefined, **kwds):
-        super(TimeUnitTransform, self).__init__(field=field, timeUnit=timeUnit, **kwds)
-
-
-class TypeForShape(VegaLiteSchema):
-    """TypeForShape schema wrapper
-
-    enum('nominal', 'ordinal', 'geojson')
-    """
-    _schema = {'$ref': '#/definitions/TypeForShape'}
-
-    def __init__(self, *args):
-        super(TypeForShape, self).__init__(*args)
-
-
-class TypedFieldDef(VegaLiteSchema):
-    """TypedFieldDef schema wrapper
-
-    Mapping(required=[type])
-    Definition object for a data field, its type and transformation of an encoding channel.
-
-    Attributes
-    ----------
-
-    type : :class:`StandardType`
-        The encoded field's type of measurement ( ``"quantitative"``, ``"temporal"``,
-        ``"ordinal"``, or ``"nominal"`` ).
-        It can also be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        **Note:**
-
-
-        * Data values for a temporal field can be either a date-time string (e.g.,
-          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
-          timestamp number (e.g., ``1552199579097`` ).
-        * Data ``type`` describes the semantics of the data rather than the primitive data
-          types ( ``number``, ``string``, etc.). The same primitive data type can have
-          different types of measurement. For example, numeric data can represent
-          quantitative, ordinal, or nominal data.
-        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
-          or `"ordinal" (for using an ordinal bin scale)
-          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `timeUnit
-          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
-          can be either ``"temporal"`` (for using a temporal scale) or `"ordinal" (for using
-          an ordinal scale) <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
-        * When using with `aggregate
-          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
-          refers to the post-aggregation data type. For example, we can calculate count
-          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
-          "field": "cat", "type": "quantitative"}``. The ``"type"`` of the aggregate output
-          is ``"quantitative"``.
-        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
-          ``type`` as they have exactly the same type as their primary channels (e.g.,
-          ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field
-        (e.g., ``mean``, ``sum``, ``median``, ``min``, ``max``, ``count`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    bin : anyOf(boolean, :class:`BinParams`, enum('binned'), None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value
-        or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:**
-        1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access nested
-        objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ).
-        If field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ).
-        See more details about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__.
-        2) ``field`` is not required if ``aggregate`` is ``count``.
-    timeUnit : :class:`TimeUnit`
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field.
-        or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(string, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ).  If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _schema = {'$ref': '#/definitions/TypedFieldDef'}
-
-    def __init__(self, type=Undefined, aggregate=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(TypedFieldDef, self).__init__(type=type, aggregate=aggregate, bin=bin, field=field,
-                                            timeUnit=timeUnit, title=title, **kwds)
-
-
-class UnitSpec(VegaLiteSchema):
-    """UnitSpec schema wrapper
-
-    Mapping(required=[mark])
-    Base interface for a unit (single-view) specification.
-
-    Attributes
-    ----------
-
-    mark : :class:`AnyMark`
-        A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``,
-        ``"tick"``, ``"line"``,
-        ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and ``"text"`` ) or a `mark
-        definition object <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    encoding : :class:`Encoding`
-        A key-value mapping between encoding channels and definition of fields.
-    height : float
-        The height of a visualization.
-
-        **Default value:**
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its y-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the height will
-          be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For y-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the height is `determined by the range step, paddings, and the
-          cardinality of the field mapped to y-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__. Otherwise, if the
-          ``rangeStep`` is ``null``, the height will be the value of `config.view.height
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``y`` channel, the ``height`` will be the value of
-          ``rangeStep``.
-
-        **Note** : For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        height of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    name : string
-        Name of the visualization for later reference.
-    projection : :class:`Projection`
-        An object defining properties of geographic projection, which will be applied to
-        ``shape`` path for ``"geoshape"`` marks
-        and to ``latitude`` and ``"longitude"`` channels for other marks.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    view : :class:`ViewBackground`
-        An object defining the view background's fill and stroke.
-
-        **Default value:** none (transparent)
-    width : float
-        The width of a visualization.
-
-        **Default value:** This will be determined by the following rules:
-
-
-        * If a view's `autosize
-          <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ type is ``"fit"`` or
-          its x-channel has a `continuous scale
-          <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__, the width will
-          be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * For x-axis with a band or point scale: if `rangeStep
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__ is a numeric value or
-          unspecified, the width is `determined by the range step, paddings, and the
-          cardinality of the field mapped to x-channel
-          <https://vega.github.io/vega-lite/docs/scale.html#band>`__.   Otherwise, if the
-          ``rangeStep`` is ``null``, the width will be the value of `config.view.width
-          <https://vega.github.io/vega-lite/docs/spec.html#config>`__.
-        * If no field is mapped to ``x`` channel, the ``width`` will be the value of
-          `config.scale.textXRangeStep
-          <https://vega.github.io/vega-lite/docs/size.html#default-width-and-height>`__ for
-          ``text`` mark and the value of ``rangeStep`` for other marks.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        width of a single view.
-
-        **See also:** The documentation for `width and height
-        <https://vega.github.io/vega-lite/docs/size.html>`__ contains more examples.
-    """
-    _schema = {'$ref': '#/definitions/UnitSpec'}
-
-    def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, projection=Undefined, selection=Undefined,
-                 title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds):
-        super(UnitSpec, self).__init__(mark=mark, data=data, description=description, encoding=encoding,
-                                       height=height, name=name, projection=projection,
-                                       selection=selection, title=title, transform=transform, view=view,
-                                       width=width, **kwds)
-
-
-class UrlData(DataSource):
-    """UrlData schema wrapper
-
-    Mapping(required=[url])
-
-    Attributes
-    ----------
-
-    url : string
-        An URL from which to load the data set. Use the ``format.type`` property
-        to ensure the loaded data is correctly parsed.
-    format : :class:`DataFormat`
-        An object that specifies the format for parsing the data.
-    name : string
-        Provide a placeholder name and bind data at runtime.
-    """
-    _schema = {'$ref': '#/definitions/UrlData'}
-
-    def __init__(self, url=Undefined, format=Undefined, name=Undefined, **kwds):
-        super(UrlData, self).__init__(url=url, format=format, name=name, **kwds)
-
-
-class UtcMultiTimeUnit(MultiTimeUnit):
-    """UtcMultiTimeUnit schema wrapper
-
-    enum('utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate',
-    'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes',
-    'utcyearmonthdatehoursminutesseconds', 'utcquartermonth', 'utcmonthdate',
-    'utcmonthdatehours', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds',
-    'utcsecondsmilliseconds')
-    """
-    _schema = {'$ref': '#/definitions/UtcMultiTimeUnit'}
-
-    def __init__(self, *args):
-        super(UtcMultiTimeUnit, self).__init__(*args)
-
-
-class UtcSingleTimeUnit(SingleTimeUnit):
-    """UtcSingleTimeUnit schema wrapper
-
-    enum('utcyear', 'utcquarter', 'utcmonth', 'utcday', 'utcdate', 'utchours', 'utcminutes',
-    'utcseconds', 'utcmilliseconds')
-    """
-    _schema = {'$ref': '#/definitions/UtcSingleTimeUnit'}
-
-    def __init__(self, *args):
-        super(UtcSingleTimeUnit, self).__init__(*args)
-
-
-class VConcatSpec(Spec):
-    """VConcatSpec schema wrapper
-
-    Mapping(required=[vconcat])
-    Base interface for a vertical concatenation specification.
-
-    Attributes
-    ----------
-
-    vconcat : List(:class:`Spec`)
-        A list of views to be concatenated and put into a column.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used.
-        * If set to ``flush``, only the specified width and height values for the sub-view
-          will be used. The ``flush`` setting can be useful when attempting to place
-          sub-plots without axes or legends into a uniform grid structure.
-
-        **Default value:** ``"full"``
-    center : boolean
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        **Default value:** ``false``
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : float
-        The spacing in pixels between sub-views of the concat operator.
-
-        **Default value** : ``10``
-    title : anyOf(string, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/VConcatSpec'}
-
-    def __init__(self, vconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined,
-                 description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined,
-                 title=Undefined, transform=Undefined, **kwds):
-        super(VConcatSpec, self).__init__(vconcat=vconcat, bounds=bounds, center=center, data=data,
-                                          description=description, name=name, resolve=resolve,
-                                          spacing=spacing, title=title, transform=transform, **kwds)
-
-
-class Value(VegaLiteSchema):
-    """Value schema wrapper
-
-    anyOf(float, string, boolean, None)
-    """
-    _schema = {'$ref': '#/definitions/Value'}
-
-    def __init__(self, *args):
-        super(Value, self).__init__(*args)
-
-
-class ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull(VegaLiteSchema):
-    """ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDefTypeForShape`,
-    :class:`ConditionalStringValueDef`, List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ValueDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(ValueDefWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(condition=condition,
-                                                                                          value=value,
-                                                                                          **kwds)
-
-
-class ValueDefWithConditionMarkPropFieldDefnumber(VegaLiteSchema):
-    """ValueDefWithConditionMarkPropFieldDefnumber schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalNumberValueDef`,
-    List(:class:`ConditionalNumberValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ValueDefWithCondition<MarkPropFieldDef,number>'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(ValueDefWithConditionMarkPropFieldDefnumber, self).__init__(condition=condition,
-                                                                          value=value, **kwds)
-
-
-class ValueDefWithConditionMarkPropFieldDefstringnull(VegaLiteSchema):
-    """ValueDefWithConditionMarkPropFieldDefstringnull schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldDef`, :class:`ConditionalStringValueDef`,
-    List(:class:`ConditionalStringValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None)
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ValueDefWithCondition<MarkPropFieldDef,(string|null)>'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(ValueDefWithConditionMarkPropFieldDefstringnull, self).__init__(condition=condition,
-                                                                              value=value, **kwds)
-
-
-class ValueDefWithConditionTextFieldDefValue(VegaLiteSchema):
-    """ValueDefWithConditionTextFieldDefValue schema wrapper
-
-    Mapping(required=[])
-    A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are
-    optional.
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalTextFieldDef`, :class:`ConditionalValueDef`,
-    List(:class:`ConditionalValueDef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : :class:`Value`
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/ValueDefWithCondition<TextFieldDef,Value>'}
-
-    def __init__(self, condition=Undefined, value=Undefined, **kwds):
-        super(ValueDefWithConditionTextFieldDefValue, self).__init__(condition=condition, value=value,
-                                                                     **kwds)
-
-
-class ViewBackground(VegaLiteSchema):
-    """ViewBackground schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    fill : anyOf(:class:`Color`, None)
-        The fill color.
-
-        **Default value:** ``undefined``
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    stroke : anyOf(:class:`Color`, None)
-        The stroke color.
-
-        **Default value:** ``"#ddd"``
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    style : anyOf(string, List(string))
-        A string or array of strings indicating the name of custom styles to apply to the
-        view background. A style is a named collection of mark property defaults defined
-        within the `style configuration
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. If style is an
-        array, later styles will override earlier styles.
-
-        **Default value:** ``"cell"``
-        **Note:** Any specified view background properties will augment the default style.
-    """
-    _schema = {'$ref': '#/definitions/ViewBackground'}
-
-    def __init__(self, cornerRadius=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined,
-                 stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                 strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                 strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, **kwds):
-        super(ViewBackground, self).__init__(cornerRadius=cornerRadius, fill=fill,
-                                             fillOpacity=fillOpacity, opacity=opacity, stroke=stroke,
-                                             strokeCap=strokeCap, strokeDash=strokeDash,
-                                             strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                                             strokeMiterLimit=strokeMiterLimit,
-                                             strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                             style=style, **kwds)
-
-
-class ViewConfig(VegaLiteSchema):
-    """ViewConfig schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    clip : boolean
-        Whether the view should be clipped.
-    cornerRadius : float
-        The radius in pixels of rounded rectangle corners.
-
-        **Default value:** ``0``
-    fill : anyOf(:class:`Color`, None)
-        The fill color.
-
-        **Default value:** ``undefined``
-    fillOpacity : float
-        The fill opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    height : float
-        The default height of the single plot or each plot in a trellis plot when the
-        visualization has a continuous (non-ordinal) y-scale with ``rangeStep`` = ``null``.
-
-        **Default value:** ``200``
-    opacity : float
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    stroke : anyOf(:class:`Color`, None)
-        The stroke color.
-
-        **Default value:** ``"#ddd"``
-    strokeCap : :class:`StrokeCap`
-        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
-        ``"square"``.
-
-        **Default value:** ``"square"``
-    strokeDash : List(float)
-        An array of alternating stroke, space lengths for creating dashed or dotted lines.
-    strokeDashOffset : float
-        The offset (in pixels) into which to begin drawing with the stroke dash array.
-    strokeJoin : :class:`StrokeJoin`
-        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
-
-        **Default value:** ``"miter"``
-    strokeMiterLimit : float
-        The miter limit at which to bevel a line join.
-    strokeOpacity : float
-        The stroke opacity (value between [0,1]).
-
-        **Default value:** ``1``
-    strokeWidth : float
-        The stroke width, in pixels.
-    width : float
-        The default width of the single plot or each plot in a trellis plot when the
-        visualization has a continuous (non-ordinal) x-scale or ordinal x-scale with
-        ``rangeStep`` = ``null``.
-
-        **Default value:** ``200``
-    """
-    _schema = {'$ref': '#/definitions/ViewConfig'}
-
-    def __init__(self, clip=Undefined, cornerRadius=Undefined, fill=Undefined, fillOpacity=Undefined,
-                 height=Undefined, opacity=Undefined, stroke=Undefined, strokeCap=Undefined,
-                 strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                 strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                 width=Undefined, **kwds):
-        super(ViewConfig, self).__init__(clip=clip, cornerRadius=cornerRadius, fill=fill,
-                                         fillOpacity=fillOpacity, height=height, opacity=opacity,
-                                         stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                                         strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                                         strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                                         strokeWidth=strokeWidth, width=width, **kwds)
-
-
-class WindowFieldDef(VegaLiteSchema):
-    """WindowFieldDef schema wrapper
-
-    Mapping(required=[op, as])
-
-    Attributes
-    ----------
-
-    op : anyOf(:class:`AggregateOp`, :class:`WindowOnlyOp`)
-        The window or aggregation operation to apply within a window (e.g., ``rank``,
-        ``lead``, ``sum``, ``average`` or ``count`` ). See the list of all supported
-        operations `here <https://vega.github.io/vega-lite/docs/window.html#ops>`__.
-    field : :class:`FieldName`
-        The data field for which to compute the aggregate or window function. This can be
-        omitted for window functions that do not operate over a field such as ``count``,
-        ``rank``, ``dense_rank``.
-    param : float
-        Parameter values for the window functions. Parameter values can be omitted for
-        operations that do not accept a parameter.
-
-        See the list of all supported operations and their parameters `here
-        <https://vega.github.io/vega-lite/docs/transforms/window.html>`__.
-    as : :class:`FieldName`
-        The output name for the window operation.
-    """
-    _schema = {'$ref': '#/definitions/WindowFieldDef'}
-
-    def __init__(self, op=Undefined, field=Undefined, param=Undefined, **kwds):
-        super(WindowFieldDef, self).__init__(op=op, field=field, param=param, **kwds)
-
-
-class WindowOnlyOp(VegaLiteSchema):
-    """WindowOnlyOp schema wrapper
-
-    enum('row_number', 'rank', 'dense_rank', 'percent_rank', 'cume_dist', 'ntile', 'lag',
-    'lead', 'first_value', 'last_value', 'nth_value')
-    """
-    _schema = {'$ref': '#/definitions/WindowOnlyOp'}
-
-    def __init__(self, *args):
-        super(WindowOnlyOp, self).__init__(*args)
-
-
-class WindowTransform(Transform):
-    """WindowTransform schema wrapper
-
-    Mapping(required=[window])
-
-    Attributes
-    ----------
-
-    window : List(:class:`WindowFieldDef`)
-        The definition of the fields in the window, and what calculations to use.
-    frame : List(anyOf(None, float))
-        A frame specification as a two-element array indicating how the sliding window
-        should proceed. The array entries should either be a number indicating the offset
-        from the current data object, or null to indicate unbounded rows preceding or
-        following the current data object. The default value is ``[null, 0]``, indicating
-        that the sliding window includes the current object and all preceding objects. The
-        value ``[-5, 5]`` indicates that the window should include five objects preceding
-        and five objects following the current object. Finally, ``[null, null]`` indicates
-        that the window frame should always include all data objects. If you this frame and
-        want to assign the same value to add objects, you can use the simpler `join
-        aggregate transform <https://vega.github.io/vega-lite/docs/joinaggregate.html>`__.
-        The only operators affected are the aggregation operations and the ``first_value``,
-        ``last_value``, and ``nth_value`` window operations. The other window operations are
-        not affected by this.
-
-        **Default value:** :  ``[null, 0]`` (includes the current object and all preceding
-        objects)
-    groupby : List(:class:`FieldName`)
-        The data fields for partitioning the data objects into separate windows. If
-        unspecified, all data points will be in a single window.
-    ignorePeers : boolean
-        Indicates if the sliding window frame should ignore peer values (data that are
-        considered identical by the sort criteria). The default is false, causing the window
-        frame to expand to include all peer values. If set to true, the window frame will be
-        defined by offset values only. This setting only affects those operations that
-        depend on the window frame, namely aggregation operations and the first_value,
-        last_value, and nth_value window operations.
-
-        **Default value:** ``false``
-    sort : List(:class:`SortField`)
-        A sort field definition for sorting data objects within a window. If two data
-        objects are considered equal by the comparator, they are considered “peer” values of
-        equal rank. If sort is not specified, the order is undefined: data objects are
-        processed in the order they are observed and none are considered peers (the
-        ignorePeers parameter is ignored and treated as if set to ``true`` ).
-    """
-    _schema = {'$ref': '#/definitions/WindowTransform'}
-
-    def __init__(self, window=Undefined, frame=Undefined, groupby=Undefined, ignorePeers=Undefined,
-                 sort=Undefined, **kwds):
-        super(WindowTransform, self).__init__(window=window, frame=frame, groupby=groupby,
-                                              ignorePeers=ignorePeers, sort=sort, **kwds)
-
-
-class XValueDef(VegaLiteSchema):
-    """XValueDef schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, enum('width'))
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/XValueDef'}
-
-    def __init__(self, value=Undefined, **kwds):
-        super(XValueDef, self).__init__(value=value, **kwds)
-
-
-class YValueDef(VegaLiteSchema):
-    """YValueDef schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value of an encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, enum('height'))
-        A constant value in visual domain (e.g., ``"red"`` / "#0099ff" for color, values
-        between ``0`` to ``1`` for opacity).
-    """
-    _schema = {'$ref': '#/definitions/YValueDef'}
-
-    def __init__(self, value=Undefined, **kwds):
-        super(YValueDef, self).__init__(value=value, **kwds)
-
diff --git a/altair/vegalite/v3/schema/mixins.py b/altair/vegalite/v3/schema/mixins.py
deleted file mode 100644
index 0278d40..0000000
--- a/altair/vegalite/v3/schema/mixins.py
+++ /dev/null
@@ -1,807 +0,0 @@
-# The contents of this file are automatically written by
-# tools/generate_schema_wrapper.py. Do not modify directly.
-from . import core
-from altair.utils import use_signature
-from altair.utils.schemapi import Undefined
-
-
-class MarkMethodMixin(object):
-    """A mixin class that defines mark methods"""
-
-    def mark_area(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                  clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                  dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                  fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                  fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                  interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                  order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined,
-                  size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                  strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined,
-                  text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined,
-                  width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined,
-                  y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'area'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="area", **kwds)
-        else:
-            copy.mark = "area"
-        return copy
-
-    def mark_bar(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                 clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                 dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                 fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                 fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                 interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                 order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined,
-                 size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                 strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                 strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined,
-                 text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined,
-                 width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined,
-                 y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'bar'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="bar", **kwds)
-        else:
-            copy.mark = "bar"
-        return copy
-
-    def mark_line(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                  clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                  dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                  fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                  fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                  interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                  order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined,
-                  size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                  strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined,
-                  text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined,
-                  width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined,
-                  y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'line'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="line", **kwds)
-        else:
-            copy.mark = "line"
-        return copy
-
-    def mark_trail(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                   clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                   dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                   fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                   fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                   interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                   order=Undefined, orient=Undefined, point=Undefined, radius=Undefined,
-                   shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined,
-                   strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                   strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                   style=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                   thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined,
-                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                   yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'trail'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="trail", **kwds)
-        else:
-            copy.mark = "trail"
-        return copy
-
-    def mark_point(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                   clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                   dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                   fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                   fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                   interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                   order=Undefined, orient=Undefined, point=Undefined, radius=Undefined,
-                   shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined,
-                   strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                   strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                   style=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                   thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined,
-                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                   yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'point'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="point", **kwds)
-        else:
-            copy.mark = "point"
-        return copy
-
-    def mark_text(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                  clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                  dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                  fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                  fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                  interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                  order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined,
-                  size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                  strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined,
-                  text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined,
-                  width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined,
-                  y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'text'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="text", **kwds)
-        else:
-            copy.mark = "text"
-        return copy
-
-    def mark_tick(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                  clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                  dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                  fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                  fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                  interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                  order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined,
-                  size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                  strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined,
-                  text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined,
-                  width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined,
-                  y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'tick'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="tick", **kwds)
-        else:
-            copy.mark = "tick"
-        return copy
-
-    def mark_rect(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                  clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                  dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                  fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                  fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                  interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                  order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined,
-                  size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                  strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined,
-                  text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined,
-                  width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined,
-                  y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'rect'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="rect", **kwds)
-        else:
-            copy.mark = "rect"
-        return copy
-
-    def mark_rule(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                  clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                  dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                  fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                  fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                  interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                  order=Undefined, orient=Undefined, point=Undefined, radius=Undefined, shape=Undefined,
-                  size=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                  strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined, tension=Undefined,
-                  text=Undefined, theta=Undefined, thickness=Undefined, tooltip=Undefined,
-                  width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined,
-                  y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'rule'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="rule", **kwds)
-        else:
-            copy.mark = "rule"
-        return copy
-
-    def mark_circle(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                    clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                    dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                    fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                    fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                    interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                    order=Undefined, orient=Undefined, point=Undefined, radius=Undefined,
-                    shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined,
-                    strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                    strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                    style=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                    thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined,
-                    x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
-                    y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'circle'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="circle", **kwds)
-        else:
-            copy.mark = "circle"
-        return copy
-
-    def mark_square(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                    clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                    dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                    fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                    fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                    interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                    order=Undefined, orient=Undefined, point=Undefined, radius=Undefined,
-                    shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined,
-                    strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                    strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                    style=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                    thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined, x2=Undefined,
-                    x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
-                    y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'square'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="square", **kwds)
-        else:
-            copy.mark = "square"
-        return copy
-
-    def mark_geoshape(self, align=Undefined, angle=Undefined, baseline=Undefined, binSpacing=Undefined,
-                      clip=Undefined, color=Undefined, cornerRadius=Undefined, cursor=Undefined,
-                      dir=Undefined, dx=Undefined, dy=Undefined, ellipsis=Undefined, fill=Undefined,
-                      fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                      fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                      interpolate=Undefined, limit=Undefined, line=Undefined, opacity=Undefined,
-                      order=Undefined, orient=Undefined, point=Undefined, radius=Undefined,
-                      shape=Undefined, size=Undefined, stroke=Undefined, strokeCap=Undefined,
-                      strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                      strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                      style=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                      thickness=Undefined, tooltip=Undefined, width=Undefined, x=Undefined,
-                      x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
-                      y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'geoshape'
-    
-        For information on additional arguments, see :class:`MarkDef`
-        """
-        kwds = dict(align=align, angle=angle, baseline=baseline, binSpacing=binSpacing, clip=clip,
-                    color=color, cornerRadius=cornerRadius, cursor=cursor, dir=dir, dx=dx, dy=dy,
-                    ellipsis=ellipsis, fill=fill, fillOpacity=fillOpacity, filled=filled, font=font,
-                    fontSize=fontSize, fontStyle=fontStyle, fontWeight=fontWeight, height=height,
-                    href=href, interpolate=interpolate, limit=limit, line=line, opacity=opacity,
-                    order=order, orient=orient, point=point, radius=radius, shape=shape, size=size,
-                    stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
-                    strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
-                    strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
-                    strokeWidth=strokeWidth, style=style, tension=tension, text=text, theta=theta,
-                    thickness=thickness, tooltip=tooltip, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.MarkDef(type="geoshape", **kwds)
-        else:
-            copy.mark = "geoshape"
-        return copy
-
-    def mark_boxplot(self, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined,
-                     median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined,
-                     rule=Undefined, size=Undefined, ticks=Undefined, **kwds):
-        """Set the chart's mark to 'boxplot'
-    
-        For information on additional arguments, see :class:`BoxPlotDef`
-        """
-        kwds = dict(box=box, clip=clip, color=color, extent=extent, median=median, opacity=opacity,
-                    orient=orient, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.BoxPlotDef(type="boxplot", **kwds)
-        else:
-            copy.mark = "boxplot"
-        return copy
-
-    def mark_errorbar(self, clip=Undefined, color=Undefined, extent=Undefined, opacity=Undefined,
-                      orient=Undefined, rule=Undefined, ticks=Undefined, **kwds):
-        """Set the chart's mark to 'errorbar'
-    
-        For information on additional arguments, see :class:`ErrorBarDef`
-        """
-        kwds = dict(clip=clip, color=color, extent=extent, opacity=opacity, orient=orient, rule=rule,
-                    ticks=ticks, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.ErrorBarDef(type="errorbar", **kwds)
-        else:
-            copy.mark = "errorbar"
-        return copy
-
-    def mark_errorband(self, band=Undefined, borders=Undefined, clip=Undefined, color=Undefined,
-                       extent=Undefined, interpolate=Undefined, opacity=Undefined, orient=Undefined,
-                       tension=Undefined, **kwds):
-        """Set the chart's mark to 'errorband'
-    
-        For information on additional arguments, see :class:`ErrorBandDef`
-        """
-        kwds = dict(band=band, borders=borders, clip=clip, color=color, extent=extent,
-                    interpolate=interpolate, opacity=opacity, orient=orient, tension=tension, **kwds)
-        copy = self.copy(deep=False)
-        if any(val is not Undefined for val in kwds.values()):
-            copy.mark = core.ErrorBandDef(type="errorband", **kwds)
-        else:
-            copy.mark = "errorband"
-        return copy
-
-
-class ConfigMethodMixin(object):
-    """A mixin class that defines config methods"""
-
-    @use_signature(core.Config)
-    def configure(self, *args, **kwargs):
-        copy = self.copy(deep=False)
-        copy.config = core.Config(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AreaConfig)
-    def configure_area(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["area"] = core.AreaConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axis(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axis"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axisBand(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axisBand"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axisBottom(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axisBottom"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axisLeft(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axisLeft"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axisRight(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axisRight"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axisTop(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axisTop"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axisX(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axisX"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.AxisConfig)
-    def configure_axisY(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["axisY"] = core.AxisConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.RectConfig)
-    def configure_bar(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["bar"] = core.RectConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.BoxPlotConfig)
-    def configure_boxplot(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["boxplot"] = core.BoxPlotConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.MarkConfig)
-    def configure_circle(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["circle"] = core.MarkConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.CompositionConfig)
-    def configure_concat(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["concat"] = core.CompositionConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.ErrorBandConfig)
-    def configure_errorband(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["errorband"] = core.ErrorBandConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.ErrorBarConfig)
-    def configure_errorbar(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["errorbar"] = core.ErrorBarConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.CompositionConfig)
-    def configure_facet(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["facet"] = core.CompositionConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.MarkConfig)
-    def configure_geoshape(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["geoshape"] = core.MarkConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.HeaderConfig)
-    def configure_header(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["header"] = core.HeaderConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.HeaderConfig)
-    def configure_headerColumn(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["headerColumn"] = core.HeaderConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.HeaderConfig)
-    def configure_headerFacet(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["headerFacet"] = core.HeaderConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.HeaderConfig)
-    def configure_headerRow(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["headerRow"] = core.HeaderConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.LegendConfig)
-    def configure_legend(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["legend"] = core.LegendConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.LineConfig)
-    def configure_line(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["line"] = core.LineConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.MarkConfig)
-    def configure_mark(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["mark"] = core.MarkConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.MarkConfig)
-    def configure_point(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["point"] = core.MarkConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.ProjectionConfig)
-    def configure_projection(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["projection"] = core.ProjectionConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.RangeConfig)
-    def configure_range(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["range"] = core.RangeConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.RectConfig)
-    def configure_rect(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["rect"] = core.RectConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.CompositionConfig)
-    def configure_repeat(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["repeat"] = core.CompositionConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.MarkConfig)
-    def configure_rule(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["rule"] = core.MarkConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.ScaleConfig)
-    def configure_scale(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["scale"] = core.ScaleConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.SelectionConfig)
-    def configure_selection(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["selection"] = core.SelectionConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.MarkConfig)
-    def configure_square(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["square"] = core.MarkConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.TextConfig)
-    def configure_text(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["text"] = core.TextConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.TickConfig)
-    def configure_tick(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["tick"] = core.TickConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.TitleConfig)
-    def configure_title(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["title"] = core.TitleConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.LineConfig)
-    def configure_trail(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["trail"] = core.LineConfig(*args, **kwargs)
-        return copy
-
-    @use_signature(core.ViewConfig)
-    def configure_view(self, *args, **kwargs):
-        copy = self.copy(deep=['config'])
-        if copy.config is Undefined:
-            copy.config = core.Config()
-        copy.config["view"] = core.ViewConfig(*args, **kwargs)
-        return copy
\ No newline at end of file
diff --git a/altair/vegalite/v3/schema/vega-lite-schema.json b/altair/vegalite/v3/schema/vega-lite-schema.json
deleted file mode 100644
index a5e60f8..0000000
--- a/altair/vegalite/v3/schema/vega-lite-schema.json
+++ /dev/null
@@ -1,13315 +0,0 @@
-{
-  "$ref": "#/definitions/TopLevelSpec",
-  "$schema": "http://json-schema.org/draft-07/schema#",
-  "definitions": {
-    "Aggregate": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/AggregateOp"
-        },
-        {
-          "$ref": "#/definitions/ArgmaxDef"
-        },
-        {
-          "$ref": "#/definitions/ArgminDef"
-        }
-      ]
-    },
-    "AggregateOp": {
-      "enum": [
-        "argmax",
-        "argmin",
-        "average",
-        "count",
-        "distinct",
-        "max",
-        "mean",
-        "median",
-        "min",
-        "missing",
-        "q1",
-        "q3",
-        "ci0",
-        "ci1",
-        "stderr",
-        "stdev",
-        "stdevp",
-        "sum",
-        "valid",
-        "values",
-        "variance",
-        "variancep"
-      ],
-      "type": "string"
-    },
-    "AggregateTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "description": "Array of objects that define fields to aggregate.",
-          "items": {
-            "$ref": "#/definitions/AggregatedFieldDef"
-          },
-          "type": "array"
-        },
-        "groupby": {
-          "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "aggregate"
-      ],
-      "type": "object"
-    },
-    "AggregatedFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The output field names to use for each aggregated field."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field for which to compute aggregate function. This is required for all aggregation operations except `\"count\"`."
-        },
-        "op": {
-          "$ref": "#/definitions/AggregateOp",
-          "description": "The aggregation operation to apply to the fields (e.g., sum, average or count).\nSee the [full list of supported aggregation operations](https://vega.github.io/vega-lite/docs/aggregate.html#ops)\nfor more information."
-        }
-      },
-      "required": [
-        "op",
-        "as"
-      ],
-      "type": "object"
-    },
-    "Align": {
-      "enum": [
-        "left",
-        "center",
-        "right"
-      ],
-      "type": "string"
-    },
-    "AnyMark": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/CompositeMark"
-        },
-        {
-          "$ref": "#/definitions/CompositeMarkDef"
-        },
-        {
-          "$ref": "#/definitions/Mark"
-        },
-        {
-          "$ref": "#/definitions/MarkDef"
-        }
-      ]
-    },
-    "AreaConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "line": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/OverlayMarkDef"
-            }
-          ],
-          "description": "A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n\n- If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n\n- If this value is `false`, no lines would be automatically added to area marks.\n\n__Default value:__ `false`."
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "point": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/OverlayMarkDef"
-            },
-            {
-              "enum": [
-                "transparent"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "ArgmaxDef": {
-      "additionalProperties": false,
-      "properties": {
-        "argmax": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "argmax"
-      ],
-      "type": "object"
-    },
-    "ArgminDef": {
-      "additionalProperties": false,
-      "properties": {
-        "argmin": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "argmin"
-      ],
-      "type": "object"
-    },
-    "AutoSizeParams": {
-      "additionalProperties": false,
-      "properties": {
-        "contains": {
-          "description": "Determines how size calculation should be performed, one of `\"content\"` or `\"padding\"`. The default setting (`\"content\"`) interprets the width and height settings as the data rectangle (plotting) dimensions, to which padding is then added. In contrast, the `\"padding\"` setting includes the padding within the view size calculations, such that the width and height settings indicate the **total** intended size of the view.\n\n__Default value__: `\"content\"`",
-          "enum": [
-            "content",
-            "padding"
-          ],
-          "type": "string"
-        },
-        "resize": {
-          "description": "A boolean flag indicating if autosize layout should be re-calculated on every view update.\n\n__Default value__: `false`",
-          "type": "boolean"
-        },
-        "type": {
-          "$ref": "#/definitions/AutosizeType",
-          "description": "The sizing format type. One of `\"pad\"`, `\"fit\"` or `\"none\"`. See the [autosize type](https://vega.github.io/vega-lite/docs/size.html#autosize) documentation for descriptions of each.\n\n__Default value__: `\"pad\"`"
-        }
-      },
-      "type": "object"
-    },
-    "AutosizeType": {
-      "enum": [
-        "pad",
-        "fit",
-        "none"
-      ],
-      "type": "string"
-    },
-    "Axis": {
-      "additionalProperties": false,
-      "properties": {
-        "bandPosition": {
-          "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n  __Default value:__ `0.5`",
-          "type": "number"
-        },
-        "domain": {
-          "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`",
-          "type": "boolean"
-        },
-        "domainColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`."
-        },
-        "domainDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed domain lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "domainDashOffset": {
-          "description": "The pixel offset at which to start drawing with the domain dash array.",
-          "type": "number"
-        },
-        "domainOpacity": {
-          "description": "Opacity of the axis domain line.",
-          "type": "number"
-        },
-        "domainWidth": {
-          "description": "Stroke width of axis domain line\n\n__Default value:__ `1`",
-          "type": "number"
-        },
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "grid": {
-          "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.",
-          "type": "boolean"
-        },
-        "gridColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`."
-        },
-        "gridDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed grid lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "gridDashOffset": {
-          "description": "The pixel offset at which to start drawing with the grid dash array.",
-          "type": "number"
-        },
-        "gridOpacity": {
-          "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "gridWidth": {
-          "description": "The grid width, in pixels.\n\n__Default value:__ `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation."
-        },
-        "labelAngle": {
-          "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
-        },
-        "labelBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`."
-        },
-        "labelBound": {
-          "description": "Indicates if labels should be hidden if they exceed the axis range. If `false` (the default) no bounds overlap analysis is performed. If `true`, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range.\n\n__Default value:__ `false`.",
-          "type": [
-            "number",
-            "boolean"
-          ]
-        },
-        "labelColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the tick label, can be in hex color code or regular color name."
-        },
-        "labelFlush": {
-          "description": "Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.",
-          "type": [
-            "boolean",
-            "number"
-          ]
-        },
-        "labelFlushOffset": {
-          "description": "Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of `2` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `0`.",
-          "type": "number"
-        },
-        "labelFont": {
-          "description": "The font of the tick label.",
-          "type": "string"
-        },
-        "labelFontSize": {
-          "description": "The font size of the label, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "Font style of the title."
-        },
-        "labelFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight of axis tick labels."
-        },
-        "labelLimit": {
-          "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`",
-          "type": "number"
-        },
-        "labelOpacity": {
-          "description": "The opacity of the labels.",
-          "type": "number"
-        },
-        "labelOverlap": {
-          "$ref": "#/definitions/LabelOverlap",
-          "description": "The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`."
-        },
-        "labelPadding": {
-          "description": "The padding, in pixels, between axis and text labels.\n\n__Default value:__ `2`",
-          "type": "number"
-        },
-        "labelSeparation": {
-          "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
-          "type": "number"
-        },
-        "labels": {
-          "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
-          "type": "boolean"
-        },
-        "maxExtent": {
-          "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.",
-          "type": "number"
-        },
-        "minExtent": {
-          "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30` for y-axis; `undefined` for x-axis.",
-          "type": "number"
-        },
-        "offset": {
-          "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/AxisOrient",
-          "description": "The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n\n__Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes."
-        },
-        "position": {
-          "description": "The anchor position of the axis in pixels. For x-axes with top or bottom orientation, this sets the axis group x coordinate. For y-axes with left or right orientation, this sets the axis group y coordinate.\n\n__Default value__: `0`",
-          "type": "number"
-        },
-        "tickColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`"
-        },
-        "tickCount": {
-          "description": "A desired number of ticks, for axes visualizing quantitative scales. The resulting number may be different so that values are \"nice\" (multiples of 2, 5, 10) and lie within the underlying scale's range.",
-          "type": "number"
-        },
-        "tickDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "tickDashOffset": {
-          "description": "The pixel offset at which to start drawing with the tick mark dash array.",
-          "type": "number"
-        },
-        "tickExtra": {
-          "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.",
-          "type": "boolean"
-        },
-        "tickMinStep": {
-          "description": "The minimum desired step between axis ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`",
-          "type": "number"
-        },
-        "tickOffset": {
-          "description": "Position offset in pixels to apply to ticks, labels, and gridlines.",
-          "type": "number"
-        },
-        "tickOpacity": {
-          "description": "Opacity of the ticks.",
-          "type": "number"
-        },
-        "tickRound": {
-          "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
-          "type": "boolean"
-        },
-        "tickSize": {
-          "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tickWidth": {
-          "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "ticks": {
-          "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
-          "type": "boolean"
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "titleAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment of axis titles."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "Text anchor position for placing axis titles."
-        },
-        "titleAngle": {
-          "description": "Angle in degrees of axis titles.",
-          "type": "number"
-        },
-        "titleBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for axis titles."
-        },
-        "titleColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of the title, can be in hex color code or regular color name."
-        },
-        "titleFont": {
-          "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "titleFontSize": {
-          "description": "Font size of the title.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "Font style of the title."
-        },
-        "titleFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight of the title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "titleLimit": {
-          "description": "Maximum allowed pixel width of axis titles.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleOpacity": {
-          "description": "Opacity of the axis title.",
-          "type": "number"
-        },
-        "titlePadding": {
-          "description": "The padding, in pixels, between title and axis.",
-          "type": "number"
-        },
-        "titleX": {
-          "description": "X-coordinate of the axis title relative to the axis group.",
-          "type": "number"
-        },
-        "titleY": {
-          "description": "Y-coordinate of the axis title relative to the axis group.",
-          "type": "number"
-        },
-        "values": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "boolean"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/DateTime"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Explicitly set the visible axis tick values."
-        },
-        "zindex": {
-          "description": "A non-negative integer indicating the z-index of the axis.\nIf zindex is 0, axes should be drawn behind all chart elements.\nTo put them in front, use `\"zindex = 1\"`.\n\n__Default value:__ `1` (in front of the marks) for actual axis and `0` (behind the marks) for grids.",
-          "minimum": 0,
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "AxisConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "bandPosition": {
-          "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n  __Default value:__ `0.5`",
-          "type": "number"
-        },
-        "domain": {
-          "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`",
-          "type": "boolean"
-        },
-        "domainColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of axis domain line.\n\n__Default value:__ `\"gray\"`."
-        },
-        "domainDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed domain lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "domainDashOffset": {
-          "description": "The pixel offset at which to start drawing with the domain dash array.",
-          "type": "number"
-        },
-        "domainOpacity": {
-          "description": "Opacity of the axis domain line.",
-          "type": "number"
-        },
-        "domainWidth": {
-          "description": "Stroke width of axis domain line\n\n__Default value:__ `1`",
-          "type": "number"
-        },
-        "grid": {
-          "description": "A boolean flag indicating if grid lines should be included as part of the axis\n\n__Default value:__ `true` for [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous) that are not binned; otherwise, `false`.",
-          "type": "boolean"
-        },
-        "gridColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of gridlines.\n\n__Default value:__ `\"lightGray\"`."
-        },
-        "gridDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed grid lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "gridDashOffset": {
-          "description": "The pixel offset at which to start drawing with the grid dash array.",
-          "type": "number"
-        },
-        "gridOpacity": {
-          "description": "The stroke opacity of grid (value between [0,1])\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "gridWidth": {
-          "description": "The grid width, in pixels.\n\n__Default value:__ `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment of axis tick labels, overriding the default setting for the current axis orientation."
-        },
-        "labelAngle": {
-          "description": "The rotation angle of the axis labels.\n\n__Default value:__ `-90` for nominal and ordinal fields; `0` otherwise.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
-        },
-        "labelBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline of axis tick labels, overriding the default setting for the current axis orientation. Can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`."
-        },
-        "labelBound": {
-          "description": "Indicates if labels should be hidden if they exceed the axis range. If `false` (the default) no bounds overlap analysis is performed. If `true`, labels will be hidden if they exceed the axis range by more than 1 pixel. If this property is a number, it specifies the pixel tolerance: the maximum amount by which a label bounding box may exceed the axis range.\n\n__Default value:__ `false`.",
-          "type": [
-            "number",
-            "boolean"
-          ]
-        },
-        "labelColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the tick label, can be in hex color code or regular color name."
-        },
-        "labelFlush": {
-          "description": "Indicates if the first and last axis labels should be aligned flush with the scale range. Flush alignment for a horizontal axis will left-align the first label and right-align the last label. For vertical axes, bottom and top text baselines are applied instead. If this property is a number, it also indicates the number of pixels by which to offset the first and last labels; for example, a value of 2 will flush-align the first and last labels and also push them 2 pixels outward from the center of the axis. The additional adjustment can sometimes help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `true` for axis of a continuous x-scale. Otherwise, `false`.",
-          "type": [
-            "boolean",
-            "number"
-          ]
-        },
-        "labelFlushOffset": {
-          "description": "Indicates the number of pixels by which to offset flush-adjusted labels. For example, a value of `2` will push flush-adjusted labels 2 pixels outward from the center of the axis. Offsets can help the labels better visually group with corresponding axis ticks.\n\n__Default value:__ `0`.",
-          "type": "number"
-        },
-        "labelFont": {
-          "description": "The font of the tick label.",
-          "type": "string"
-        },
-        "labelFontSize": {
-          "description": "The font size of the label, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "Font style of the title."
-        },
-        "labelFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight of axis tick labels."
-        },
-        "labelLimit": {
-          "description": "Maximum allowed pixel width of axis tick labels.\n\n__Default value:__ `180`",
-          "type": "number"
-        },
-        "labelOpacity": {
-          "description": "The opacity of the labels.",
-          "type": "number"
-        },
-        "labelOverlap": {
-          "$ref": "#/definitions/LabelOverlap",
-          "description": "The strategy to use for resolving overlap of axis labels. If `false` (the default), no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used (this works well for standard linear axes). If set to `\"greedy\"`, a linear scan of the labels is performed, removing any labels that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true` for non-nominal fields with non-log scales; `\"greedy\"` for log scales; otherwise `false`."
-        },
-        "labelPadding": {
-          "description": "The padding, in pixels, between axis and text labels.\n\n__Default value:__ `2`",
-          "type": "number"
-        },
-        "labelSeparation": {
-          "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
-          "type": "number"
-        },
-        "labels": {
-          "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
-          "type": "boolean"
-        },
-        "maxExtent": {
-          "description": "The maximum extent in pixels that axis ticks and labels should use. This determines a maximum offset value for axis titles.\n\n__Default value:__ `undefined`.",
-          "type": "number"
-        },
-        "minExtent": {
-          "description": "The minimum extent in pixels that axis ticks and labels should use. This determines a minimum offset value for axis titles.\n\n__Default value:__ `30` for y-axis; `undefined` for x-axis.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/AxisOrient",
-          "description": "The orientation of the axis. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`. The orientation can be used to further specialize the axis type (e.g., a y-axis oriented towards the right edge of the chart).\n\n__Default value:__ `\"bottom\"` for x-axes and `\"left\"` for y-axes."
-        },
-        "shortTimeLabels": {
-          "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__  `false`",
-          "type": "boolean"
-        },
-        "tickColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the axis's tick.\n\n__Default value:__ `\"gray\"`"
-        },
-        "tickDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed tick mark lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "tickDashOffset": {
-          "description": "The pixel offset at which to start drawing with the tick mark dash array.",
-          "type": "number"
-        },
-        "tickExtra": {
-          "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.",
-          "type": "boolean"
-        },
-        "tickOffset": {
-          "description": "Position offset in pixels to apply to ticks, labels, and gridlines.",
-          "type": "number"
-        },
-        "tickOpacity": {
-          "description": "Opacity of the ticks.",
-          "type": "number"
-        },
-        "tickRound": {
-          "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
-          "type": "boolean"
-        },
-        "tickSize": {
-          "description": "The size in pixels of axis ticks.\n\n__Default value:__ `5`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tickWidth": {
-          "description": "The width, in pixels, of ticks.\n\n__Default value:__ `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "ticks": {
-          "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
-          "type": "boolean"
-        },
-        "title": {
-          "description": "Set to null to disable title for the axis, legend, or header.",
-          "type": "null"
-        },
-        "titleAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment of axis titles."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "Text anchor position for placing axis titles."
-        },
-        "titleAngle": {
-          "description": "Angle in degrees of axis titles.",
-          "type": "number"
-        },
-        "titleBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for axis titles."
-        },
-        "titleColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of the title, can be in hex color code or regular color name."
-        },
-        "titleFont": {
-          "description": "Font of the title. (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "titleFontSize": {
-          "description": "Font size of the title.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "Font style of the title."
-        },
-        "titleFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight of the title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "titleLimit": {
-          "description": "Maximum allowed pixel width of axis titles.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleOpacity": {
-          "description": "Opacity of the axis title.",
-          "type": "number"
-        },
-        "titlePadding": {
-          "description": "The padding, in pixels, between title and axis.",
-          "type": "number"
-        },
-        "titleX": {
-          "description": "X-coordinate of the axis title relative to the axis group.",
-          "type": "number"
-        },
-        "titleY": {
-          "description": "Y-coordinate of the axis title relative to the axis group.",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "AxisOrient": {
-      "enum": [
-        "top",
-        "bottom",
-        "left",
-        "right"
-      ],
-      "type": "string"
-    },
-    "AxisResolveMap": {
-      "additionalProperties": false,
-      "properties": {
-        "x": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "y": {
-          "$ref": "#/definitions/ResolveMode"
-        }
-      },
-      "type": "object"
-    },
-    "BaseLegendLayout": {
-      "additionalProperties": false,
-      "properties": {
-        "anchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor point for legend orient group layout."
-        },
-        "bounds": {
-          "$ref": "#/definitions/LayoutBounds",
-          "description": "The bounds calculation to use for legend orient group layout."
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "A flag to center legends within a shared orient group."
-        },
-        "direction": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Orientation"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "The layout direction for legend orient group layout."
-        },
-        "margin": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "The pixel margin between legends within a orient group."
-        },
-        "offset": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "The pixel offset from the chart body for a legend orient group."
-        }
-      },
-      "type": "object"
-    },
-    "BaseMarkConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "The pixel area each the point/circle/square.\nFor example: in the case of circles, the radius is determined in part by the square root of the size value.\n\n__Default value:__ `30`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "tooltip": {
-          "description": "The tooltip text to show upon mouse hover."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "BaseTitleConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align"
-        },
-        "anchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
-        },
-        "angle": {
-          "description": "Angle in degrees of title text.",
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for title text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`."
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Text color for title text."
-        },
-        "dx": {
-          "description": "Delta offset for title text x-coordinate.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "Delta offset for title text y-coordinate.",
-          "type": "number"
-        },
-        "font": {
-          "description": "Font name for title text.",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "Font size in pixels for title text.\n\n__Default value:__ `10`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "Font style for title text."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight for title text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "frame": {
-          "$ref": "#/definitions/TitleFrame",
-          "description": "The reference frame for the anchor position, one of `\"bounds\"` (to anchor relative to the full bounding box) or `\"group\"` (to anchor relative to the group width or height)."
-        },
-        "limit": {
-          "description": "The maximum allowed length in pixels of legend labels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "offset": {
-          "description": "The orthogonal offset in pixels by which to displace the title from its position along the edge of the chart.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/TitleOrient",
-          "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)"
-        }
-      },
-      "type": "object"
-    },
-    "Baseline": {
-      "enum": [
-        "top",
-        "middle",
-        "bottom"
-      ],
-      "type": "string"
-    },
-    "BinParams": {
-      "additionalProperties": false,
-      "description": "Binning properties or boolean flag for determining whether to bin data or not.",
-      "properties": {
-        "anchor": {
-          "description": "A value in the binned domain at which to anchor the bins, shifting the bin boundaries if necessary to ensure that a boundary aligns with the anchor value.\n\n__Default Value:__ the minimum bin extent value",
-          "type": "number"
-        },
-        "base": {
-          "description": "The number base to use for automatic bin determination (default is base 10).\n\n__Default value:__ `10`",
-          "type": "number"
-        },
-        "binned": {
-          "description": "When set to true, Vega-Lite treats the input data as already binned.",
-          "type": "boolean"
-        },
-        "divide": {
-          "description": "Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n\n__Default value:__ `[5, 2]`",
-          "items": {
-            "type": "number"
-          },
-          "minItems": 1,
-          "type": "array"
-        },
-        "extent": {
-          "description": "A two-element (`[min, max]`) array indicating the range of desired bin values.",
-          "items": {
-            "type": "number"
-          },
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        "maxbins": {
-          "description": "Maximum number of bins.\n\n__Default value:__ `6` for `row`, `column` and `shape` channels; `10` for other channels",
-          "minimum": 2,
-          "type": "number"
-        },
-        "minstep": {
-          "description": "A minimum allowable step size (particularly useful for integer values).",
-          "type": "number"
-        },
-        "nice": {
-          "description": "If true (the default), attempts to make the bin boundaries use human-friendly boundaries, such as multiples of ten.",
-          "type": "boolean"
-        },
-        "step": {
-          "description": "An exact step size to use between bins.\n\n__Note:__ If provided, options such as maxbins will be ignored.",
-          "type": "number"
-        },
-        "steps": {
-          "description": "An array of allowable step sizes to choose from.",
-          "items": {
-            "type": "number"
-          },
-          "minItems": 1,
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "BinTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FieldName"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/FieldName"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "The output fields at which to write the start and end bin values."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "enum": [
-                true
-              ],
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            }
-          ],
-          "description": "An object indicating bin properties, or simply `true` for using default bin parameters."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field to bin."
-        }
-      },
-      "required": [
-        "bin",
-        "field",
-        "as"
-      ],
-      "type": "object"
-    },
-    "BindCheckbox": {
-      "additionalProperties": false,
-      "properties": {
-        "debounce": {
-          "type": "number"
-        },
-        "element": {
-          "$ref": "#/definitions/Element"
-        },
-        "input": {
-          "enum": [
-            "checkbox"
-          ],
-          "type": "string"
-        },
-        "name": {
-          "type": "string"
-        },
-        "type": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "input"
-      ],
-      "type": "object"
-    },
-    "BindRadioSelect": {
-      "additionalProperties": false,
-      "properties": {
-        "debounce": {
-          "type": "number"
-        },
-        "element": {
-          "$ref": "#/definitions/Element"
-        },
-        "input": {
-          "enum": [
-            "radio",
-            "select"
-          ],
-          "type": "string"
-        },
-        "name": {
-          "type": "string"
-        },
-        "options": {
-          "items": {
-          },
-          "type": "array"
-        },
-        "type": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "input",
-        "options"
-      ],
-      "type": "object"
-    },
-    "BindRange": {
-      "additionalProperties": false,
-      "properties": {
-        "debounce": {
-          "type": "number"
-        },
-        "element": {
-          "$ref": "#/definitions/Element"
-        },
-        "input": {
-          "enum": [
-            "range"
-          ],
-          "type": "string"
-        },
-        "max": {
-          "type": "number"
-        },
-        "min": {
-          "type": "number"
-        },
-        "name": {
-          "type": "string"
-        },
-        "step": {
-          "type": "number"
-        },
-        "type": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "input"
-      ],
-      "type": "object"
-    },
-    "Binding": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/BindCheckbox"
-        },
-        {
-          "$ref": "#/definitions/BindRadioSelect"
-        },
-        {
-          "$ref": "#/definitions/BindRange"
-        },
-        {
-          "$ref": "#/definitions/InputBinding"
-        }
-      ]
-    },
-    "BoxPlot": {
-      "enum": [
-        "boxplot"
-      ],
-      "type": "string"
-    },
-    "BoxPlotConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "box": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "extent": {
-          "anyOf": [
-            {
-              "enum": [
-                "min-max"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "number"
-            }
-          ],
-          "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range.  This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`."
-        },
-        "median": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "outliers": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "size": {
-          "description": "Size of the box and median tick of a box plot",
-          "type": "number"
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "BoxPlotDef": {
-      "additionalProperties": false,
-      "properties": {
-        "box": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "clip": {
-          "description": "Whether a composite mark be clipped to the enclosing group’s width and height.",
-          "type": "boolean"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "extent": {
-          "anyOf": [
-            {
-              "enum": [
-                "min-max"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "number"
-            }
-          ],
-          "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range.  This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`."
-        },
-        "median": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "opacity": {
-          "description": "The opacity (value between [0,1]) of the mark.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "Orientation of the box plot.  This is normally automatically determined based on types of fields on x and y channels. However, an explicit `orient` be specified when the orientation is ambiguous.\n\n__Default value:__ `\"vertical\"`."
-        },
-        "outliers": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "size": {
-          "description": "Size of the box and median tick of a box plot",
-          "type": "number"
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/BoxPlot",
-          "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "BrushConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "The fill color of the interval mark.\n\n__Default value:__ `#333333`"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity of the interval mark (a value between 0 and 1).\n\n__Default value:__ `0.125`",
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "The stroke color of the interval mark.\n\n__Default value:__ `#ffffff`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke and space lengths,\nfor creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) with which to begin drawing the stroke dash array.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity of the interval mark (a value between 0 and 1).",
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width of the interval mark.",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "CalculateTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The field for storing the computed formula value."
-        },
-        "calculate": {
-          "description": "A [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string. Use the variable `datum` to refer to the current data object.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "calculate",
-        "as"
-      ],
-      "type": "object"
-    },
-    "Color": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/ColorName"
-        },
-        {
-          "$ref": "#/definitions/HexColor"
-        },
-        {
-          "type": "string"
-        }
-      ]
-    },
-    "ColorName": {
-      "enum": [
-        "black",
-        "silver",
-        "gray",
-        "white",
-        "maroon",
-        "red",
-        "purple",
-        "fuchsia",
-        "green",
-        "lime",
-        "olive",
-        "yellow",
-        "navy",
-        "blue",
-        "teal",
-        "aqua",
-        "orange",
-        "aliceblue",
-        "antiquewhite",
-        "aquamarine",
-        "azure",
-        "beige",
-        "bisque",
-        "blanchedalmond",
-        "blueviolet",
-        "brown",
-        "burlywood",
-        "cadetblue",
-        "chartreuse",
-        "chocolate",
-        "coral",
-        "cornflowerblue",
-        "cornsilk",
-        "crimson",
-        "cyan",
-        "darkblue",
-        "darkcyan",
-        "darkgoldenrod",
-        "darkgray",
-        "darkgreen",
-        "darkgrey",
-        "darkkhaki",
-        "darkmagenta",
-        "darkolivegreen",
-        "darkorange",
-        "darkorchid",
-        "darkred",
-        "darksalmon",
-        "darkseagreen",
-        "darkslateblue",
-        "darkslategray",
-        "darkslategrey",
-        "darkturquoise",
-        "darkviolet",
-        "deeppink",
-        "deepskyblue",
-        "dimgray",
-        "dimgrey",
-        "dodgerblue",
-        "firebrick",
-        "floralwhite",
-        "forestgreen",
-        "gainsboro",
-        "ghostwhite",
-        "gold",
-        "goldenrod",
-        "greenyellow",
-        "grey",
-        "honeydew",
-        "hotpink",
-        "indianred",
-        "indigo",
-        "ivory",
-        "khaki",
-        "lavender",
-        "lavenderblush",
-        "lawngreen",
-        "lemonchiffon",
-        "lightblue",
-        "lightcoral",
-        "lightcyan",
-        "lightgoldenrodyellow",
-        "lightgray",
-        "lightgreen",
-        "lightgrey",
-        "lightpink",
-        "lightsalmon",
-        "lightseagreen",
-        "lightskyblue",
-        "lightslategray",
-        "lightslategrey",
-        "lightsteelblue",
-        "lightyellow",
-        "limegreen",
-        "linen",
-        "magenta",
-        "mediumaquamarine",
-        "mediumblue",
-        "mediumorchid",
-        "mediumpurple",
-        "mediumseagreen",
-        "mediumslateblue",
-        "mediumspringgreen",
-        "mediumturquoise",
-        "mediumvioletred",
-        "midnightblue",
-        "mintcream",
-        "mistyrose",
-        "moccasin",
-        "navajowhite",
-        "oldlace",
-        "olivedrab",
-        "orangered",
-        "orchid",
-        "palegoldenrod",
-        "palegreen",
-        "paleturquoise",
-        "palevioletred",
-        "papayawhip",
-        "peachpuff",
-        "peru",
-        "pink",
-        "plum",
-        "powderblue",
-        "rosybrown",
-        "royalblue",
-        "saddlebrown",
-        "salmon",
-        "sandybrown",
-        "seagreen",
-        "seashell",
-        "sienna",
-        "skyblue",
-        "slateblue",
-        "slategray",
-        "slategrey",
-        "snow",
-        "springgreen",
-        "steelblue",
-        "tan",
-        "thistle",
-        "tomato",
-        "turquoise",
-        "violet",
-        "wheat",
-        "whitesmoke",
-        "yellowgreen",
-        "rebeccapurple"
-      ],
-      "type": "string"
-    },
-    "Encoding": {
-      "additionalProperties": false,
-      "properties": {
-        "color": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "Color of the marks – either fill or stroke color based on  the `filled` property of mark definition.\nBy default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n`\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_\n1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels.  If either `fill` or `stroke` channel is specified, `color` channel will be ignored.\n2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)."
-        },
-        "detail": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FieldDefWithoutScale"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/FieldDefWithoutScale"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Additional levels of detail for grouping data in aggregate views and\nin line, trail, and area marks without mapping data to a specific visual channel."
-        },
-        "fill": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "Fill color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `fill` channel, `color ` channel will be ignored. To customize both fill and stroke, please use `fill` and `stroke` channels (not `fill` and `color`)."
-        },
-        "fillOpacity": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `fillOpacity` property."
-        },
-        "href": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TextFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/TextValueDefWithCondition"
-            }
-          ],
-          "description": "A URL to load upon mouse click."
-        },
-        "key": {
-          "$ref": "#/definitions/FieldDefWithoutScale",
-          "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data."
-        },
-        "latitude": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LatLongFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Latitude position of geographically projected marks."
-        },
-        "latitude2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
-        },
-        "longitude": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LatLongFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Longitude position of geographically projected marks."
-        },
-        "longitude2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
-        },
-        "opacity": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `opacity` property."
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/OrderFieldDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/OrderFieldDef"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html).  Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
-        },
-        "shape": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ShapeFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/ShapeValueDefWithCondition"
-            }
-          ],
-          "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:\n   - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n   - the line symbol `\"stroke\"`\n   - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n   - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)"
-        },
-        "size": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)"
-        },
-        "stroke": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "Stroke color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `stroke` channel, `color ` channel will be ignored. To customize both stroke and fill, please use `stroke` and `fill` channels (not `stroke` and `color`)."
-        },
-        "strokeOpacity": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeOpacity` property."
-        },
-        "strokeWidth": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeWidth` property."
-        },
-        "text": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TextFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/TextValueDefWithCondition"
-            }
-          ],
-          "description": "Text of the `text` mark."
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TextFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/TextValueDefWithCondition"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/TextFieldDef"
-              },
-              "type": "array"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text to show upon mouse hover."
-        },
-        "x": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PositionFieldDef"
-            },
-            {
-              "$ref": "#/definitions/XValueDef"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/XValueDef"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "xError": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "xError2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PositionFieldDef"
-            },
-            {
-              "$ref": "#/definitions/YValueDef"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/YValueDef"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "yError": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "yError2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        }
-      },
-      "type": "object"
-    },
-    "CompositeMark": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/BoxPlot"
-        },
-        {
-          "$ref": "#/definitions/ErrorBar"
-        },
-        {
-          "$ref": "#/definitions/ErrorBand"
-        }
-      ]
-    },
-    "CompositeMarkDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/BoxPlotDef"
-        },
-        {
-          "$ref": "#/definitions/ErrorBarDef"
-        },
-        {
-          "$ref": "#/definitions/ErrorBandDef"
-        }
-      ]
-    },
-    "CompositionConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "spacing": {
-          "description": "The default spacing in pixels between composed sub-views.\n\n__Default value__: `20`",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "ConditionalMarkPropFieldDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/ConditionalPredicate<MarkPropFieldDef>"
-        },
-        {
-          "$ref": "#/definitions/ConditionalSelection<MarkPropFieldDef>"
-        }
-      ]
-    },
-    "ConditionalMarkPropFieldDef<TypeForShape>": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/ConditionalPredicate<MarkPropFieldDef<TypeForShape>>"
-        },
-        {
-          "$ref": "#/definitions/ConditionalSelection<MarkPropFieldDef<TypeForShape>>"
-        }
-      ]
-    },
-    "ConditionalTextFieldDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/ConditionalPredicate<TextFieldDef>"
-        },
-        {
-          "$ref": "#/definitions/ConditionalSelection<TextFieldDef>"
-        }
-      ]
-    },
-    "ConditionalStringValueDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/ConditionalPredicate<StringValueDef>"
-        },
-        {
-          "$ref": "#/definitions/ConditionalSelection<StringValueDef>"
-        }
-      ]
-    },
-    "ConditionalValueDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/ConditionalPredicate<ValueDef>"
-        },
-        {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef>"
-        }
-      ]
-    },
-    "ConditionalNumberValueDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/ConditionalPredicate<NumberValueDef>"
-        },
-        {
-          "$ref": "#/definitions/ConditionalSelection<NumberValueDef>"
-        }
-      ]
-    },
-    "ConditionalPredicate<MarkPropFieldDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "test": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>",
-          "description": "Predicate for triggering the condition"
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "test",
-        "type"
-      ],
-      "type": "object"
-    },
-    "ConditionalPredicate<MarkPropFieldDef<TypeForShape>>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "test": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>",
-          "description": "Predicate for triggering the condition"
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/TypeForShape",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "test",
-        "type"
-      ],
-      "type": "object"
-    },
-    "ConditionalPredicate<TextFieldDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "enum": [
-                "binned"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "test": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>",
-          "description": "Predicate for triggering the condition"
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "test",
-        "type"
-      ],
-      "type": "object"
-    },
-    "ConditionalPredicate<StringValueDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "test": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>",
-          "description": "Predicate for triggering the condition"
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": [
-            "string",
-            "null"
-          ]
-        }
-      },
-      "required": [
-        "test",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalPredicate<ValueDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "test": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>",
-          "description": "Predicate for triggering the condition"
-        },
-        "value": {
-          "$ref": "#/definitions/Value",
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "test",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalPredicate<NumberValueDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "test": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>",
-          "description": "Predicate for triggering the condition"
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": "number"
-        }
-      },
-      "required": [
-        "test",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<MarkPropFieldDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "selection": {
-          "$ref": "#/definitions/SelectionOperand",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "selection",
-        "type"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<MarkPropFieldDef<TypeForShape>>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "selection": {
-          "$ref": "#/definitions/SelectionOperand",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/TypeForShape",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "selection",
-        "type"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<TextFieldDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "enum": [
-                "binned"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "selection": {
-          "$ref": "#/definitions/SelectionOperand",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "selection",
-        "type"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<StringValueDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionOperand",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": [
-            "string",
-            "null"
-          ]
-        }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<ValueDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionOperand",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "$ref": "#/definitions/Value",
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<NumberValueDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionOperand",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": "number"
-        }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
-    },
-    "Config": {
-      "additionalProperties": false,
-      "properties": {
-        "area": {
-          "$ref": "#/definitions/AreaConfig",
-          "description": "Area-Specific Config"
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "axis": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config)."
-        },
-        "axisBand": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Specific axis config for axes with \"band\" scales."
-        },
-        "axisBottom": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Specific axis config for x-axis along the bottom edge of the chart."
-        },
-        "axisLeft": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Specific axis config for y-axis along the left edge of the chart."
-        },
-        "axisRight": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Specific axis config for y-axis along the right edge of the chart."
-        },
-        "axisTop": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Specific axis config for x-axis along the top edge of the chart."
-        },
-        "axisX": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "X-axis specific config."
-        },
-        "axisY": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Y-axis specific config."
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the whole Vega-Lite view\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "bar": {
-          "$ref": "#/definitions/RectConfig",
-          "description": "Bar-Specific Config"
-        },
-        "boxplot": {
-          "$ref": "#/definitions/BoxPlotConfig",
-          "description": "Box Config"
-        },
-        "circle": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Circle-Specific Config"
-        },
-        "concat": {
-          "$ref": "#/definitions/CompositionConfig",
-          "description": "Default configuration for all concatenation view composition operators (`concat`, `hconcat`, and `vconcat`)"
-        },
-        "countTitle": {
-          "description": "Default axis and legend title for count fields.\n\n__Default value:__ `'Count of Records`.",
-          "type": "string"
-        },
-        "errorband": {
-          "$ref": "#/definitions/ErrorBandConfig",
-          "description": "ErrorBand Config"
-        },
-        "errorbar": {
-          "$ref": "#/definitions/ErrorBarConfig",
-          "description": "ErrorBar Config"
-        },
-        "facet": {
-          "$ref": "#/definitions/CompositionConfig",
-          "description": "Default configuration for the `facet` view composition operator"
-        },
-        "fieldTitle": {
-          "description": "Defines how Vega-Lite generates title for fields.  There are three possible styles:\n- `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n- `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n- `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").",
-          "enum": [
-            "verbal",
-            "functional",
-            "plain"
-          ],
-          "type": "string"
-        },
-        "geoshape": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Geoshape-Specific Config"
-        },
-        "header": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "headerColumn": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "headerFacet": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "headerRow": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "invalidValues": {
-          "description": "Defines how Vega-Lite should handle invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
-          "enum": [
-            "filter",
-            null
-          ],
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "legend": {
-          "$ref": "#/definitions/LegendConfig",
-          "description": "Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config)."
-        },
-        "line": {
-          "$ref": "#/definitions/LineConfig",
-          "description": "Line-Specific Config"
-        },
-        "mark": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Mark Config"
-        },
-        "numberFormat": {
-          "description": "D3 Number format for guide labels and text marks. For example \"s\" for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "point": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Point-Specific Config"
-        },
-        "projection": {
-          "$ref": "#/definitions/ProjectionConfig",
-          "description": "Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config)."
-        },
-        "range": {
-          "$ref": "#/definitions/RangeConfig",
-          "description": "An object hash that defines default range arrays or schemes for using with scales.\nFor a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)."
-        },
-        "rect": {
-          "$ref": "#/definitions/RectConfig",
-          "description": "Rect-Specific Config"
-        },
-        "repeat": {
-          "$ref": "#/definitions/CompositionConfig",
-          "description": "Default configuration for the `repeat` view composition operator"
-        },
-        "rule": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Rule-Specific Config"
-        },
-        "scale": {
-          "$ref": "#/definitions/ScaleConfig",
-          "description": "Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)."
-        },
-        "selection": {
-          "$ref": "#/definitions/SelectionConfig",
-          "description": "An object hash for defining default properties for each type of selections."
-        },
-        "square": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Square-Specific Config"
-        },
-        "stack": {
-          "$ref": "#/definitions/StackOffset",
-          "description": "Default stack offset for stackable mark."
-        },
-        "style": {
-          "$ref": "#/definitions/StyleConfigIndex",
-          "description": "An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def).  The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config)."
-        },
-        "text": {
-          "$ref": "#/definitions/TextConfig",
-          "description": "Text-Specific Config"
-        },
-        "tick": {
-          "$ref": "#/definitions/TickConfig",
-          "description": "Tick-Specific Config"
-        },
-        "timeFormat": {
-          "description": "Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n\n__Default value:__ `\"%b %d, %Y\"`\n__Note:__ Axes automatically determine format each label automatically so this config would not affect axes.",
-          "type": "string"
-        },
-        "title": {
-          "$ref": "#/definitions/TitleConfig",
-          "description": "Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config)."
-        },
-        "trail": {
-          "$ref": "#/definitions/LineConfig",
-          "description": "Trail-Specific Config"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewConfig",
-          "description": "Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single)."
-        }
-      },
-      "type": "object"
-    },
-    "CsvDataFormat": {
-      "additionalProperties": false,
-      "properties": {
-        "parse": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Parse"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
-        },
-        "type": {
-          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.",
-          "enum": [
-            "csv",
-            "tsv"
-          ],
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Cursor": {
-      "enum": [
-        "auto",
-        "default",
-        "none",
-        "context-menu",
-        "help",
-        "pointer",
-        "progress",
-        "wait",
-        "cell",
-        "crosshair",
-        "text",
-        "vertical-text",
-        "alias",
-        "copy",
-        "move",
-        "no-drop",
-        "not-allowed",
-        "e-resize",
-        "n-resize",
-        "ne-resize",
-        "nw-resize",
-        "s-resize",
-        "se-resize",
-        "sw-resize",
-        "w-resize",
-        "ew-resize",
-        "ns-resize",
-        "nesw-resize",
-        "nwse-resize",
-        "col-resize",
-        "row-resize",
-        "all-scroll",
-        "zoom-in",
-        "zoom-out",
-        "grab",
-        "grabbing"
-      ],
-      "type": "string"
-    },
-    "Data": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/DataSource"
-        },
-        {
-          "$ref": "#/definitions/Generator"
-        }
-      ]
-    },
-    "DataFormat": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/CsvDataFormat"
-        },
-        {
-          "$ref": "#/definitions/DsvDataFormat"
-        },
-        {
-          "$ref": "#/definitions/JsonDataFormat"
-        },
-        {
-          "$ref": "#/definitions/TopoDataFormat"
-        }
-      ]
-    },
-    "DataSource": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/UrlData"
-        },
-        {
-          "$ref": "#/definitions/InlineData"
-        },
-        {
-          "$ref": "#/definitions/NamedData"
-        }
-      ]
-    },
-    "Datasets": {
-      "$ref": "#/definitions/Dict<InlineDataset>"
-    },
-    "DateTime": {
-      "additionalProperties": false,
-      "description": "Object for defining datetime in Vega-Lite Filter.\nIf both month and quarter are provided, month has higher precedence.\n`day` cannot be combined with other date.\nWe accept string for month and day names.",
-      "properties": {
-        "date": {
-          "description": "Integer value representing the date from 1-31.",
-          "maximum": 31,
-          "minimum": 1,
-          "type": "number"
-        },
-        "day": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Day"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "Value representing the day of a week.  This can be one of: (1) integer value -- `1` represents Monday; (2) case-insensitive day name (e.g., `\"Monday\"`);  (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).   <br/> **Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`."
-        },
-        "hours": {
-          "description": "Integer value representing the hour of a day from 0-23.",
-          "maximum": 23,
-          "minimum": 0,
-          "type": "number"
-        },
-        "milliseconds": {
-          "description": "Integer value representing the millisecond segment of time.",
-          "maximum": 999,
-          "minimum": 0,
-          "type": "number"
-        },
-        "minutes": {
-          "description": "Integer value representing the minute segment of time from 0-59.",
-          "maximum": 59,
-          "minimum": 0,
-          "type": "number"
-        },
-        "month": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Month"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "One of: (1) integer value representing the month from `1`-`12`. `1` represents January;  (2) case-insensitive month name (e.g., `\"January\"`);  (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`)."
-        },
-        "quarter": {
-          "description": "Integer value representing the quarter of the year (from 1-4).",
-          "maximum": 4,
-          "minimum": 1,
-          "type": "number"
-        },
-        "seconds": {
-          "description": "Integer value representing the second segment (0-59) of a time value",
-          "maximum": 59,
-          "minimum": 0,
-          "type": "number"
-        },
-        "utc": {
-          "description": "A boolean flag indicating if date time is in utc time. If false, the date time is in local time",
-          "type": "boolean"
-        },
-        "year": {
-          "description": "Integer value representing the year.",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "Day": {
-      "maximum": 7,
-      "minimum": 1,
-      "type": "number"
-    },
-    "Dict<InlineDataset>": {
-      "additionalProperties": {
-        "$ref": "#/definitions/InlineDataset"
-      },
-      "type": "object"
-    },
-    "Dir": {
-      "enum": [
-        "ltr",
-        "rtl"
-      ],
-      "type": "string"
-    },
-    "DsvDataFormat": {
-      "additionalProperties": false,
-      "properties": {
-        "delimiter": {
-          "description": "The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.",
-          "maxLength": 1,
-          "minLength": 1,
-          "type": "string"
-        },
-        "parse": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Parse"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
-        },
-        "type": {
-          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.",
-          "enum": [
-            "dsv"
-          ],
-          "type": "string"
-        }
-      },
-      "required": [
-        "delimiter"
-      ],
-      "type": "object"
-    },
-    "Element": {
-      "type": "string"
-    },
-    "EncodingSortField": {
-      "additionalProperties": false,
-      "description": "A sort definition for sorting a discrete scale in an encoding field definition.",
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n\n__Default value:__ If unspecified, defaults to the field specified in the outer data reference."
-        },
-        "op": {
-          "$ref": "#/definitions/AggregateOp",
-          "description": "An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`).\nAn aggregation is required when there are multiple values of the sort field for each encoded data field.\nThe input data objects will be aggregated, grouped by the encoded data field.\n\nFor a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n\n__Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"mean\"`."
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)."
-        }
-      },
-      "type": "object"
-    },
-    "ErrorBand": {
-      "enum": [
-        "errorband"
-      ],
-      "type": "string"
-    },
-    "ErrorBandConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "band": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "borders": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "tension": {
-          "description": "The tension parameter for the interpolation type of the error band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "ErrorBandDef": {
-      "additionalProperties": false,
-      "properties": {
-        "band": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "borders": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "clip": {
-          "description": "Whether a composite mark be clipped to the enclosing group’s width and height.",
-          "type": "boolean"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "opacity": {
-          "description": "The opacity (value between [0,1]) of the mark.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined."
-        },
-        "tension": {
-          "description": "The tension parameter for the interpolation type of the error band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "type": {
-          "$ref": "#/definitions/ErrorBand",
-          "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "ErrorBar": {
-      "enum": [
-        "errorbar"
-      ],
-      "type": "string"
-    },
-    "ErrorBarConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "ErrorBarDef": {
-      "additionalProperties": false,
-      "properties": {
-        "clip": {
-          "description": "Whether a composite mark be clipped to the enclosing group’s width and height.",
-          "type": "boolean"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "opacity": {
-          "description": "The opacity (value between [0,1]) of the mark.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "Orientation of the error bar.  This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined."
-        },
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/ErrorBar",
-          "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "ErrorBarExtent": {
-      "enum": [
-        "ci",
-        "iqr",
-        "stderr",
-        "stdev"
-      ],
-      "type": "string"
-    },
-    "EventStream": {
-    },
-    "FacetFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "header": {
-          "$ref": "#/definitions/Header",
-          "description": "An object defining properties of a facet's header."
-        },
-        "sort": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortArray"
-            },
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "$ref": "#/definitions/EncodingSortField"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "FacetMapping": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "$ref": "#/definitions/FacetFieldDef",
-          "description": "A field definition for the horizontal facet of trellis plots."
-        },
-        "row": {
-          "$ref": "#/definitions/FacetFieldDef",
-          "description": "A field definition for the vertical facet of trellis plots."
-        }
-      },
-      "type": "object"
-    },
-    "FacetedEncoding": {
-      "additionalProperties": false,
-      "properties": {
-        "color": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "Color of the marks – either fill or stroke color based on  the `filled` property of mark definition.\nBy default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`,\n`\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_\n1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels.  If either `fill` or `stroke` channel is specified, `color` channel will be ignored.\n2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)."
-        },
-        "column": {
-          "$ref": "#/definitions/FacetFieldDef",
-          "description": "A field definition for the horizontal facet of trellis plots."
-        },
-        "detail": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FieldDefWithoutScale"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/FieldDefWithoutScale"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Additional levels of detail for grouping data in aggregate views and\nin line, trail, and area marks without mapping data to a specific visual channel."
-        },
-        "facet": {
-          "$ref": "#/definitions/FacetFieldDef",
-          "description": "A field definition for the (flexible) facet of trellis plots.\n\nIf either `row` or `column` is specified, this channel will be ignored."
-        },
-        "fill": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "Fill color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `fill` channel, `color ` channel will be ignored. To customize both fill and stroke, please use `fill` and `stroke` channels (not `fill` and `color`)."
-        },
-        "fillOpacity": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `fillOpacity` property."
-        },
-        "href": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TextFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/TextValueDefWithCondition"
-            }
-          ],
-          "description": "A URL to load upon mouse click."
-        },
-        "key": {
-          "$ref": "#/definitions/FieldDefWithoutScale",
-          "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data."
-        },
-        "latitude": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LatLongFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Latitude position of geographically projected marks."
-        },
-        "latitude2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
-        },
-        "longitude": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LatLongFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Longitude position of geographically projected marks."
-        },
-        "longitude2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
-        },
-        "opacity": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `opacity` property."
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/OrderFieldDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/OrderFieldDef"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html).  Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
-        },
-        "row": {
-          "$ref": "#/definitions/FacetFieldDef",
-          "description": "A field definition for the vertical facet of trellis plots."
-        },
-        "shape": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ShapeFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/ShapeValueDefWithCondition"
-            }
-          ],
-          "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:\n   - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n   - the line symbol `\"stroke\"`\n   - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n   - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)"
-        },
-        "size": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)"
-        },
-        "stroke": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "Stroke color of the marks.\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `color` property.\n\n_Note:_ When using `stroke` channel, `color ` channel will be ignored. To customize both stroke and fill, please use `stroke` and `fill` channels (not `stroke` and `color`)."
-        },
-        "strokeOpacity": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeOpacity` property."
-        },
-        "strokeWidth": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/NumericFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/NumericValueDefWithCondition"
-            }
-          ],
-          "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark)'s `strokeWidth` property."
-        },
-        "text": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TextFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/TextValueDefWithCondition"
-            }
-          ],
-          "description": "Text of the `text` mark."
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TextFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/TextValueDefWithCondition"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/TextFieldDef"
-              },
-              "type": "array"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text to show upon mouse hover."
-        },
-        "x": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PositionFieldDef"
-            },
-            {
-              "$ref": "#/definitions/XValueDef"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/XValueDef"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "xError": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "xError2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PositionFieldDef"
-            },
-            {
-              "$ref": "#/definitions/YValueDef"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/YValueDef"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "yError": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "yError2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/NumberValueDef"
-            }
-          ],
-          "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        }
-      },
-      "type": "object"
-    },
-    "FacetedUnitSpec": {
-      "additionalProperties": false,
-      "description": "Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).",
-      "properties": {
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "encoding": {
-          "$ref": "#/definitions/FacetedEncoding",
-          "description": "A key-value mapping between encoding channels and definition of fields."
-        },
-        "height": {
-          "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        },
-        "mark": {
-          "$ref": "#/definitions/AnyMark",
-          "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)."
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks."
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "selection": {
-          "additionalProperties": {
-            "$ref": "#/definitions/SelectionDef"
-          },
-          "description": "A key-value mapping between selection names and definitions.",
-          "type": "object"
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
-        },
-        "width": {
-          "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band).   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "mark"
-      ],
-      "type": "object"
-    },
-    "Field": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/FieldName"
-        },
-        {
-          "$ref": "#/definitions/RepeatRef"
-        }
-      ]
-    },
-    "FieldDefWithCondition<MarkPropFieldDef,(string|null)>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef>\n{\n   condition: {value: ...},\n   field: ...,\n   ...\n}",
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalStringValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalStringValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "FieldDefWithCondition<MarkPropFieldDef,number>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef>\n{\n   condition: {value: ...},\n   field: ...,\n   ...\n}",
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalNumberValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalNumberValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "FieldDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef>\n{\n   condition: {value: ...},\n   field: ...,\n   ...\n}",
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalStringValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalStringValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend.\nIf `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/TypeForShape",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "FieldDefWithCondition<TextFieldDef,Value>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef>\n{\n   condition: {value: ...},\n   field: ...,\n   ...\n}",
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "enum": [
-                "binned"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value)\nsince Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "FieldDefWithoutScale": {
-      "$ref": "#/definitions/TypedFieldDef",
-      "description": "Field Def without scale (and without bin: \"binned\" support)."
-    },
-    "FieldEqualPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "equal": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            }
-          ],
-          "description": "The value that the field should be equal to."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        }
-      },
-      "required": [
-        "equal",
-        "field"
-      ],
-      "type": "object"
-    },
-    "FieldGTEPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "gte": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            }
-          ],
-          "description": "The value that the field should be greater than or equals to."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        }
-      },
-      "required": [
-        "field",
-        "gte"
-      ],
-      "type": "object"
-    },
-    "FieldGTPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "gt": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            }
-          ],
-          "description": "The value that the field should be greater than."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        }
-      },
-      "required": [
-        "field",
-        "gt"
-      ],
-      "type": "object"
-    },
-    "FieldLTEPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "lte": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            }
-          ],
-          "description": "The value that the field should be less than or equals to."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        }
-      },
-      "required": [
-        "field",
-        "lte"
-      ],
-      "type": "object"
-    },
-    "FieldLTPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "lt": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            }
-          ],
-          "description": "The value that the field should be less than."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        }
-      },
-      "required": [
-        "field",
-        "lt"
-      ],
-      "type": "object"
-    },
-    "FieldName": {
-      "type": "string"
-    },
-    "FieldOneOfPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "oneOf": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "boolean"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/DateTime"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A set of values that the `field`'s value should be a member of,\nfor a data item included in the filtered data."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        }
-      },
-      "required": [
-        "field",
-        "oneOf"
-      ],
-      "type": "object"
-    },
-    "FieldRangePredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "range": {
-          "description": "An array of inclusive minimum and maximum values\nfor a field value of a data item to be included in the filtered data.",
-          "items": {
-            "anyOf": [
-              {
-                "type": "number"
-              },
-              {
-                "$ref": "#/definitions/DateTime"
-              },
-              {
-                "type": "null"
-              }
-            ]
-          },
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        }
-      },
-      "required": [
-        "field",
-        "range"
-      ],
-      "type": "object"
-    },
-    "FieldValidPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be filtered."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit for the field to be filtered."
-        },
-        "valid": {
-          "description": "If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).",
-          "type": "boolean"
-        }
-      },
-      "required": [
-        "field",
-        "valid"
-      ],
-      "type": "object"
-    },
-    "FilterTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "filter": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>",
-          "description": "The `filter` property must be one of the predicate definitions:\n\n1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string,\nwhere `datum` can be used to refer to the current data object\n\n2) one of the field predicates: [`equal`](https://vega.github.io/vega-lite/docs/filter.html#equal-predicate),\n[`lt`](https://vega.github.io/vega-lite/docs/filter.html#lt-predicate),\n[`lte`](https://vega.github.io/vega-lite/docs/filter.html#lte-predicate),\n[`gt`](https://vega.github.io/vega-lite/docs/filter.html#gt-predicate),\n[`gte`](https://vega.github.io/vega-lite/docs/filter.html#gte-predicate),\n[`range`](https://vega.github.io/vega-lite/docs/filter.html#range-predicate),\n[`oneOf`](https://vega.github.io/vega-lite/docs/filter.html#one-of-predicate),\nor [`valid`](https://vega.github.io/vega-lite/docs/filter.html#valid-predicate),\n\n3) a [selection predicate](https://vega.github.io/vega-lite/docs/filter.html#selection-predicate)\n\n4) a logical operand that combines (1), (2), or (3)."
-        }
-      },
-      "required": [
-        "filter"
-      ],
-      "type": "object"
-    },
-    "FlattenTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "description": "The output field names for extracted array values.\n\n__Default value:__ The field name of the corresponding array field",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "flatten": {
-          "description": "An array of one or more data fields containing arrays to flatten.\nIf multiple fields are specified, their array values should have a parallel structure, ideally with the same length.\nIf the lengths of parallel arrays do not match,\nthe longest array will be used with `null` values added for missing entries.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "flatten"
-      ],
-      "type": "object"
-    },
-    "FoldTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "description": "The output field names for the key and value properties produced by the fold transform.\n__Default value:__ `[\"key\", \"value\"]`",
-          "items": [
-            {
-              "$ref": "#/definitions/FieldName"
-            },
-            {
-              "$ref": "#/definitions/FieldName"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        "fold": {
-          "description": "An array of data fields indicating the properties to fold.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "fold"
-      ],
-      "type": "object"
-    },
-    "FontStyle": {
-      "type": "string"
-    },
-    "FontWeight": {
-      "enum": [
-        "normal",
-        "bold",
-        "lighter",
-        "bolder",
-        100,
-        200,
-        300,
-        400,
-        500,
-        600,
-        700,
-        800,
-        900
-      ],
-      "type": [
-        "string",
-        "number"
-      ]
-    },
-    "Generator": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SequenceGenerator"
-        },
-        {
-          "$ref": "#/definitions/SphereGenerator"
-        },
-        {
-          "$ref": "#/definitions/GraticuleGenerator"
-        }
-      ]
-    },
-    "ConcatSpec": {
-      "additionalProperties": false,
-      "description": "Base interface for a generalized concatenation specification.",
-      "properties": {
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "concat": {
-          "description": "A list of views to be concatenated.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "concat"
-      ],
-      "type": "object"
-    },
-    "FacetSpec": {
-      "additionalProperties": false,
-      "description": "Base interface for a facet specification.",
-      "properties": {
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "facet": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FacetFieldDef"
-            },
-            {
-              "$ref": "#/definitions/FacetMapping"
-            }
-          ],
-          "description": "Definition for how to facet the data.  One of:\n1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "spec": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayerSpec"
-            },
-            {
-              "$ref": "#/definitions/FacetedUnitSpec"
-            }
-          ],
-          "description": "A specification of the view that gets faceted."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "facet",
-        "spec"
-      ],
-      "type": "object"
-    },
-    "HConcatSpec": {
-      "additionalProperties": false,
-      "description": "Base interface for a horizontal concatenation specification.",
-      "properties": {
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "hconcat": {
-          "description": "A list of views to be concatenated and put into a row.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "hconcat"
-      ],
-      "type": "object"
-    },
-    "RepeatSpec": {
-      "additionalProperties": false,
-      "description": "Base interface for a repeat specification.",
-      "properties": {
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "repeat": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/RepeatMapping"
-            }
-          ],
-          "description": "Definition for fields to be repeated.  One of:\n1) An array of fields to be repeated.  If `\"repeat\"` is an array, the field can be referred using `{\"repeat\": \"repeat\"}`\n2) An object that mapped `\"row\"` and/or `\"column\"` to the listed of fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively."
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "spec": {
-          "$ref": "#/definitions/Spec",
-          "description": "A specification of the view that gets repeated."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "repeat",
-        "spec"
-      ],
-      "type": "object"
-    },
-    "Spec": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/FacetedUnitSpec"
-        },
-        {
-          "$ref": "#/definitions/LayerSpec"
-        },
-        {
-          "$ref": "#/definitions/FacetSpec"
-        },
-        {
-          "$ref": "#/definitions/RepeatSpec"
-        },
-        {
-          "$ref": "#/definitions/ConcatSpec"
-        },
-        {
-          "$ref": "#/definitions/VConcatSpec"
-        },
-        {
-          "$ref": "#/definitions/HConcatSpec"
-        }
-      ],
-      "description": "Any specification in Vega-Lite."
-    },
-    "GenericUnitSpec<Encoding,AnyMark>": {
-      "additionalProperties": false,
-      "description": "Base interface for a unit (single-view) specification.",
-      "properties": {
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "encoding": {
-          "$ref": "#/definitions/Encoding",
-          "description": "A key-value mapping between encoding channels and definition of fields."
-        },
-        "height": {
-          "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        },
-        "mark": {
-          "$ref": "#/definitions/AnyMark",
-          "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)."
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks."
-        },
-        "selection": {
-          "additionalProperties": {
-            "$ref": "#/definitions/SelectionDef"
-          },
-          "description": "A key-value mapping between selection names and definitions.",
-          "type": "object"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
-        },
-        "width": {
-          "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band).   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "mark"
-      ],
-      "type": "object"
-    },
-    "VConcatSpec": {
-      "additionalProperties": false,
-      "description": "Base interface for a vertical concatenation specification.",
-      "properties": {
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "vconcat": {
-          "description": "A list of views to be concatenated and put into a column.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "vconcat"
-      ],
-      "type": "object"
-    },
-    "GraticuleGenerator": {
-      "additionalProperties": false,
-      "properties": {
-        "graticule": {
-          "anyOf": [
-            {
-              "enum": [
-                true
-              ],
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/GraticuleParams"
-            }
-          ],
-          "description": "Generate graticule GeoJSON data for geographic reference lines."
-        },
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "graticule"
-      ],
-      "type": "object"
-    },
-    "GraticuleParams": {
-      "additionalProperties": false,
-      "properties": {
-        "extent": {
-          "description": "Sets both the major and minor extents to the same values.",
-          "items": {
-            "items": {
-              "type": "number"
-            },
-            "type": "array"
-          },
-          "type": "array"
-        },
-        "extentMajor": {
-          "description": "The major extent of the graticule as a two-element array of coordinates.",
-          "items": {
-            "items": {
-              "type": "number"
-            },
-            "type": "array"
-          },
-          "type": "array"
-        },
-        "extentMinor": {
-          "description": "The minor extent of the graticule as a two-element array of coordinates.",
-          "items": {
-            "items": {
-              "type": "number"
-            },
-            "type": "array"
-          },
-          "type": "array"
-        },
-        "precision": {
-          "description": "The precision of the graticule in degrees.\n\n__Default value:__ `2.5`",
-          "type": "number"
-        },
-        "step": {
-          "description": "Sets both the major and minor step angles to the same values.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "stepMajor": {
-          "description": "The major step angles of the graticule.\n\n\n__Default value:__ `[90, 360]`",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "stepMinor": {
-          "description": "The minor step angles of the graticule.\n\n__Default value:__ `[10, 10]`",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "Header": {
-      "additionalProperties": false,
-      "description": "Headers of row / column channels for faceted plots.",
-      "properties": {
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "labelAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment of header labels."
-        },
-        "labelAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label."
-        },
-        "labelAngle": {
-          "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
-        },
-        "labelColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the header label, can be in hex color code or regular color name."
-        },
-        "labelFont": {
-          "description": "The font of the header label.",
-          "type": "string"
-        },
-        "labelFontSize": {
-          "description": "The font size of the header label, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of the header label."
-        },
-        "labelLimit": {
-          "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "labelOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
-        },
-        "labelPadding": {
-          "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`",
-          "type": "number"
-        },
-        "labels": {
-          "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.",
-          "type": "boolean"
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "titleAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment (to the anchor) of header titles."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
-        },
-        "titleAngle": {
-          "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
-        },
-        "titleBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for the header title. One of `\"top\"`, `\"bottom\"`, `\"middle\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "titleColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of the header title, can be in hex color code or regular color name."
-        },
-        "titleFont": {
-          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "titleFontSize": {
-          "description": "Font size of the header title.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of the header title."
-        },
-        "titleFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight of the header title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "titleLimit": {
-          "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "titleOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
-        },
-        "titlePadding": {
-          "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "HeaderConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "labelAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment of header labels."
-        },
-        "labelAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label."
-        },
-        "labelAngle": {
-          "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
-        },
-        "labelColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the header label, can be in hex color code or regular color name."
-        },
-        "labelFont": {
-          "description": "The font of the header label.",
-          "type": "string"
-        },
-        "labelFontSize": {
-          "description": "The font size of the header label, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of the header label."
-        },
-        "labelLimit": {
-          "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "labelOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
-        },
-        "labelPadding": {
-          "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`",
-          "type": "number"
-        },
-        "labels": {
-          "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.",
-          "type": "boolean"
-        },
-        "shortTimeLabels": {
-          "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__  `false`",
-          "type": "boolean"
-        },
-        "title": {
-          "description": "Set to null to disable title for the axis, legend, or header.",
-          "type": "null"
-        },
-        "titleAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment (to the anchor) of header titles."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
-        },
-        "titleAngle": {
-          "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
-        },
-        "titleBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for the header title. One of `\"top\"`, `\"bottom\"`, `\"middle\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "titleColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Color of the header title, can be in hex color code or regular color name."
-        },
-        "titleFont": {
-          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "titleFontSize": {
-          "description": "Font size of the header title.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of the header title."
-        },
-        "titleFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight of the header title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "titleLimit": {
-          "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "titleOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
-        },
-        "titlePadding": {
-          "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "HexColor": {
-      "format": "color-hex",
-      "type": "string"
-    },
-    "ImputeMethod": {
-      "enum": [
-        "value",
-        "median",
-        "max",
-        "min",
-        "mean"
-      ],
-      "type": "string"
-    },
-    "ImputeParams": {
-      "additionalProperties": false,
-      "properties": {
-        "frame": {
-          "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object.  For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__:  `[null, null]` indicating that the window includes all objects.",
-          "items": {
-            "type": [
-              "null",
-              "number"
-            ]
-          },
-          "type": "array"
-        },
-        "keyvals": {
-          "anyOf": [
-            {
-              "items": {
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/ImputeSequence"
-            }
-          ],
-          "description": "Defines the key values that should be considered for imputation.\nAn array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data.  If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified."
-        },
-        "method": {
-          "$ref": "#/definitions/ImputeMethod",
-          "description": "The imputation method to use for the field value of imputed data objects.\nOne of `value`, `mean`, `median`, `max` or `min`.\n\n__Default value:__  `\"value\"`"
-        },
-        "value": {
-          "description": "The field value to use when the imputation `method` is `\"value\"`."
-        }
-      },
-      "type": "object"
-    },
-    "ImputeSequence": {
-      "additionalProperties": false,
-      "properties": {
-        "start": {
-          "description": "The starting value of the sequence.\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "step": {
-          "description": "The step value between sequence entries.\n__Default value:__ `1` or `-1` if `stop < start`",
-          "type": "number"
-        },
-        "stop": {
-          "description": "The ending value(exclusive) of the sequence.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "stop"
-      ],
-      "type": "object"
-    },
-    "ImputeTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "frame": {
-          "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object.  For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__:  `[null, null]` indicating that the window includes all objects.",
-          "items": {
-            "type": [
-              "null",
-              "number"
-            ]
-          },
-          "type": "array"
-        },
-        "groupby": {
-          "description": "An optional array of fields by which to group the values.\nImputation will then be performed on a per-group basis.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "impute": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field for which the missing values should be imputed."
-        },
-        "key": {
-          "$ref": "#/definitions/FieldName",
-          "description": "A key field that uniquely identifies data objects within a group.\nMissing key values (those occurring in the data but not in the current group) will be imputed."
-        },
-        "keyvals": {
-          "anyOf": [
-            {
-              "items": {
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/ImputeSequence"
-            }
-          ],
-          "description": "Defines the key values that should be considered for imputation.\nAn array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data.  If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified."
-        },
-        "method": {
-          "$ref": "#/definitions/ImputeMethod",
-          "description": "The imputation method to use for the field value of imputed data objects.\nOne of `value`, `mean`, `median`, `max` or `min`.\n\n__Default value:__  `\"value\"`"
-        },
-        "value": {
-          "description": "The field value to use when the imputation `method` is `\"value\"`."
-        }
-      },
-      "required": [
-        "impute",
-        "key"
-      ],
-      "type": "object"
-    },
-    "InlineData": {
-      "additionalProperties": false,
-      "properties": {
-        "format": {
-          "$ref": "#/definitions/DataFormat",
-          "description": "An object that specifies the format for parsing the data."
-        },
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
-        },
-        "values": {
-          "$ref": "#/definitions/InlineDataset",
-          "description": "The full data set, included inline. This can be an array of objects or primitive values, an object, or a string.\nArrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type."
-        }
-      },
-      "required": [
-        "values"
-      ],
-      "type": "object"
-    },
-    "InlineDataset": {
-      "anyOf": [
-        {
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "boolean"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "object"
-          },
-          "type": "array"
-        },
-        {
-          "type": "string"
-        },
-        {
-          "type": "object"
-        }
-      ]
-    },
-    "InputBinding": {
-      "additionalProperties": false,
-      "properties": {
-        "autocomplete": {
-          "type": "string"
-        },
-        "debounce": {
-          "type": "number"
-        },
-        "element": {
-          "$ref": "#/definitions/Element"
-        },
-        "input": {
-          "type": "string"
-        },
-        "name": {
-          "type": "string"
-        },
-        "placeholder": {
-          "type": "string"
-        },
-        "type": {
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Interpolate": {
-      "enum": [
-        "linear",
-        "linear-closed",
-        "step",
-        "step-before",
-        "step-after",
-        "basis",
-        "basis-open",
-        "basis-closed",
-        "cardinal",
-        "cardinal-open",
-        "cardinal-closed",
-        "bundle",
-        "monotone"
-      ],
-      "type": "string"
-    },
-    "IntervalSelection": {
-      "additionalProperties": false,
-      "properties": {
-        "bind": {
-          "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.",
-          "enum": [
-            "scales"
-          ],
-          "type": "string"
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/EventStream"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "$ref": "#/definitions/SelectionInitIntervalMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of\ninitial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "mark": {
-          "$ref": "#/definitions/BrushConfig",
-          "description": "An interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation."
-        },
-        "on": {
-          "$ref": "#/definitions/EventStream",
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "translate": {
-          "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
-        },
-        "type": {
-          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `single` -- to select a single discrete data value on `click`.\n- `multi` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `interval` -- to select a continuous range of data values on `drag`.",
-          "enum": [
-            "interval"
-          ],
-          "type": "string"
-        },
-        "zoom": {
-          "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "IntervalSelectionConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "bind": {
-          "description": "Establishes a two-way binding between the interval selection and the scales\nused within the same view. This allows a user to interactively pan and\nzoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.",
-          "enum": [
-            "scales"
-          ],
-          "type": "string"
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/EventStream"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "$ref": "#/definitions/SelectionInitIntervalMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of\ninitial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "mark": {
-          "$ref": "#/definitions/BrushConfig",
-          "description": "An interval selection also adds a rectangle mark to depict the\nextents of the interval. The `mark` property can be used to customize the\nappearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation."
-        },
-        "on": {
-          "$ref": "#/definitions/EventStream",
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "translate": {
-          "description": "When truthy, allows a user to interactively move an interval selection\nback-and-forth. Can be `true`, `false` (to disable panning), or a\n[Vega event stream definition](https://vega.github.io/vega/docs/event-streams/)\nwhich must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to\n`[mousedown, window:mouseup] > window:mousemove!` which corresponds to\nclicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
-        },
-        "zoom": {
-          "description": "When truthy, allows a user to interactively resize an interval selection.\nCan be `true`, `false` (to disable zooming), or a [Vega event stream\ndefinition](https://vega.github.io/vega/docs/event-streams/). Currently,\nonly `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "JoinAggregateFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The output name for the join aggregate operation."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `count`."
-        },
-        "op": {
-          "$ref": "#/definitions/AggregateOp",
-          "description": "The aggregation operation to apply (e.g., sum, average or count). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops)."
-        }
-      },
-      "required": [
-        "op",
-        "as"
-      ],
-      "type": "object"
-    },
-    "JoinAggregateTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "groupby": {
-          "description": "The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "joinaggregate": {
-          "description": "The definition of the fields in the join aggregate, and what calculations to use.",
-          "items": {
-            "$ref": "#/definitions/JoinAggregateFieldDef"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "joinaggregate"
-      ],
-      "type": "object"
-    },
-    "JsonDataFormat": {
-      "additionalProperties": false,
-      "properties": {
-        "parse": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Parse"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
-        },
-        "property": {
-          "description": "The JSON property containing the desired data.\nThis parameter can be used when the loaded JSON file may have surrounding structure or meta-data.\nFor example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features`\nfrom the loaded JSON object.",
-          "type": "string"
-        },
-        "type": {
-          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.",
-          "enum": [
-            "json"
-          ],
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "LabelOverlap": {
-      "anyOf": [
-        {
-          "type": "boolean"
-        },
-        {
-          "enum": [
-            "parity"
-          ],
-          "type": "string"
-        },
-        {
-          "enum": [
-            "greedy"
-          ],
-          "type": "string"
-        }
-      ]
-    },
-    "LatLongFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
-          "type": "null"
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.",
-          "enum": [
-            "quantitative"
-          ],
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "LayerSpec": {
-      "additionalProperties": false,
-      "description": "A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.",
-      "properties": {
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "encoding": {
-          "$ref": "#/definitions/Encoding",
-          "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers."
-        },
-        "height": {
-          "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        },
-        "layer": {
-          "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.",
-          "items": {
-            "anyOf": [
-              {
-                "$ref": "#/definitions/LayerSpec"
-              },
-              {
-                "$ref": "#/definitions/UnitSpec"
-              }
-            ]
-          },
-          "type": "array"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of the geographic projection shared by underlying layers."
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
-        },
-        "width": {
-          "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band).   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "layer"
-      ],
-      "type": "object"
-    },
-    "LayoutAlign": {
-      "enum": [
-        "all",
-        "each",
-        "none"
-      ],
-      "type": "string"
-    },
-    "LayoutBounds": {
-      "anyOf": [
-        {
-          "enum": [
-            "full"
-          ],
-          "type": "string"
-        },
-        {
-          "enum": [
-            "flush"
-          ],
-          "type": "string"
-        },
-        {
-          "$ref": "#/definitions/SignalRef"
-        }
-      ]
-    },
-    "Legend": {
-      "additionalProperties": false,
-      "description": "Properties of a legend or boolean flag for determining whether to show it.",
-      "properties": {
-        "clipHeight": {
-          "description": "The height in pixels to clip symbol legend entries and limit their size.",
-          "type": "number"
-        },
-        "columnPadding": {
-          "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
-          "type": "number"
-        },
-        "columns": {
-          "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.",
-          "type": "number"
-        },
-        "cornerRadius": {
-          "description": "Corner radius for the full legend.",
-          "type": "number"
-        },
-        "direction": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__\n- For top-/bottom-`orient`ed legends, `\"horizontal\"`\n- For left-/right-`orient`ed legends, `\"vertical\"`\n- For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends."
-        },
-        "fillColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Background fill color for the full legend."
-        },
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "gradientLength": {
-          "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "gradientOpacity": {
-          "description": "Opacity of the color gradient.",
-          "type": "number"
-        },
-        "gradientStrokeColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`."
-        },
-        "gradientStrokeWidth": {
-          "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "gradientThickness": {
-          "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "gridAlign": {
-          "$ref": "#/definitions/LayoutAlign",
-          "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`."
-        },
-        "labelAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "The alignment of the legend label, can be left, center, or right."
-        },
-        "labelBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`."
-        },
-        "labelColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the legend label, can be in hex color code or regular color name."
-        },
-        "labelFont": {
-          "description": "The font of the legend label.",
-          "type": "string"
-        },
-        "labelFontSize": {
-          "description": "The font size of legend label.\n\n__Default value:__ `10`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of legend label."
-        },
-        "labelFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight of legend label."
-        },
-        "labelLimit": {
-          "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.",
-          "type": "number"
-        },
-        "labelOffset": {
-          "description": "The offset of the legend label.",
-          "type": "number"
-        },
-        "labelOpacity": {
-          "description": "Opacity of labels.",
-          "type": "number"
-        },
-        "labelOverlap": {
-          "$ref": "#/definitions/LabelOverlap",
-          "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` (default) or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true`."
-        },
-        "labelPadding": {
-          "description": "Padding in pixels between the legend and legend labels.",
-          "type": "number"
-        },
-        "labelSeparation": {
-          "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
-          "type": "number"
-        },
-        "legendX": {
-          "description": "Custom x-position for legend with orient \"none\".",
-          "type": "number"
-        },
-        "legendY": {
-          "description": "Custom y-position for legend with orient \"none\".",
-          "type": "number"
-        },
-        "offset": {
-          "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/LegendOrient",
-          "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`"
-        },
-        "padding": {
-          "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.",
-          "type": "number"
-        },
-        "rowPadding": {
-          "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.",
-          "type": "number"
-        },
-        "strokeColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Border stroke color for the full legend."
-        },
-        "symbolDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "symbolDashOffset": {
-          "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
-          "type": "number"
-        },
-        "symbolFillColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the legend symbol,"
-        },
-        "symbolOffset": {
-          "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
-          "type": "number"
-        },
-        "symbolOpacity": {
-          "description": "Opacity of the legend symbols.",
-          "type": "number"
-        },
-        "symbolSize": {
-          "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "symbolStrokeColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Stroke color for legend symbols."
-        },
-        "symbolStrokeWidth": {
-          "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "symbolType": {
-          "$ref": "#/definitions/SymbolShape",
-          "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`."
-        },
-        "tickCount": {
-          "description": "The desired number of tick values for quantitative legends.",
-          "type": "number"
-        },
-        "tickMinStep": {
-          "description": "The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`",
-          "type": "number"
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "titleAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "Text anchor position for placing legend titles."
-        },
-        "titleBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for legend titles.\n\n__Default value:__ `\"top\"`."
-        },
-        "titleColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the legend title, can be in hex color code or regular color name."
-        },
-        "titleFont": {
-          "description": "The font of the legend title.",
-          "type": "string"
-        },
-        "titleFontSize": {
-          "description": "The font size of the legend title.",
-          "type": "number"
-        },
-        "titleFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of the legend title."
-        },
-        "titleFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight of the legend title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "titleLimit": {
-          "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleOpacity": {
-          "description": "Opacity of the legend title.",
-          "type": "number"
-        },
-        "titleOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "Orientation of the legend title."
-        },
-        "titlePadding": {
-          "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
-          "type": "number"
-        },
-        "type": {
-          "description": "The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n\n__Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.",
-          "enum": [
-            "symbol",
-            "gradient"
-          ],
-          "type": "string"
-        },
-        "values": {
-          "description": "Explicitly set the visible legend values.",
-          "items": {
-            "anyOf": [
-              {
-                "type": "number"
-              },
-              {
-                "type": "string"
-              },
-              {
-                "type": "boolean"
-              },
-              {
-                "$ref": "#/definitions/DateTime"
-              }
-            ]
-          },
-          "type": "array"
-        },
-        "zindex": {
-          "description": "A non-negative integer indicating the z-index of the legend.\nIf zindex is 0, legend should be drawn behind all chart elements.\nTo put them in front, use zindex = 1.",
-          "minimum": 0,
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "LegendConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "clipHeight": {
-          "description": "The height in pixels to clip symbol legend entries and limit their size.",
-          "type": "number"
-        },
-        "columnPadding": {
-          "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
-          "type": "number"
-        },
-        "columns": {
-          "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.",
-          "type": "number"
-        },
-        "cornerRadius": {
-          "description": "Corner radius for the full legend.",
-          "type": "number"
-        },
-        "fillColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Background fill color for the full legend."
-        },
-        "gradientDirection": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for gradient legends.\n\n__Default value:__ `\"vertical\"`."
-        },
-        "gradientHorizontalMaxLength": {
-          "description": "Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`",
-          "type": "number"
-        },
-        "gradientHorizontalMinLength": {
-          "description": "Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`",
-          "type": "number"
-        },
-        "gradientLabelLimit": {
-          "description": "The maximum allowed length in pixels of color ramp gradient labels.",
-          "type": "number"
-        },
-        "gradientLabelOffset": {
-          "description": "Vertical offset in pixels for color ramp gradient labels.\n\n__Default value:__ `2`.",
-          "type": "number"
-        },
-        "gradientLength": {
-          "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "gradientOpacity": {
-          "description": "Opacity of the color gradient.",
-          "type": "number"
-        },
-        "gradientStrokeColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`."
-        },
-        "gradientStrokeWidth": {
-          "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "gradientThickness": {
-          "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "gradientVerticalMaxLength": {
-          "description": "Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`",
-          "type": "number"
-        },
-        "gradientVerticalMinLength": {
-          "description": "Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`",
-          "type": "number"
-        },
-        "gridAlign": {
-          "$ref": "#/definitions/LayoutAlign",
-          "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`."
-        },
-        "labelAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "The alignment of the legend label, can be left, center, or right."
-        },
-        "labelBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`."
-        },
-        "labelColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the legend label, can be in hex color code or regular color name."
-        },
-        "labelFont": {
-          "description": "The font of the legend label.",
-          "type": "string"
-        },
-        "labelFontSize": {
-          "description": "The font size of legend label.\n\n__Default value:__ `10`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "labelFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of legend label."
-        },
-        "labelFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight of legend label."
-        },
-        "labelLimit": {
-          "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.",
-          "type": "number"
-        },
-        "labelOffset": {
-          "description": "The offset of the legend label.",
-          "type": "number"
-        },
-        "labelOpacity": {
-          "description": "Opacity of labels.",
-          "type": "number"
-        },
-        "labelOverlap": {
-          "$ref": "#/definitions/LabelOverlap",
-          "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `\"greedy\"` for `log scales otherwise `true`."
-        },
-        "labelPadding": {
-          "description": "Padding in pixels between the legend and legend labels.",
-          "type": "number"
-        },
-        "labelSeparation": {
-          "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
-          "type": "number"
-        },
-        "layout": {
-          "$ref": "#/definitions/LegendLayout",
-          "description": "Legend orient group layout parameters."
-        },
-        "legendX": {
-          "description": "Custom x-position for legend with orient \"none\".",
-          "type": "number"
-        },
-        "legendY": {
-          "description": "Custom y-position for legend with orient \"none\".",
-          "type": "number"
-        },
-        "offset": {
-          "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/LegendOrient",
-          "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of \"left\", \"right\", \"top-left\", \"top-right\", \"bottom-left\", \"bottom-right\", \"none\".\n\n__Default value:__ `\"right\"`"
-        },
-        "padding": {
-          "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.",
-          "type": "number"
-        },
-        "rowPadding": {
-          "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.",
-          "type": "number"
-        },
-        "shortTimeLabels": {
-          "description": "Whether month names and weekday names should be abbreviated.\n\n__Default value:__  `false`",
-          "type": "boolean"
-        },
-        "strokeColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Border stroke color for the full legend."
-        },
-        "strokeDash": {
-          "description": "Border stroke dash pattern for the full legend.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeWidth": {
-          "description": "Border stroke width for the full legend.",
-          "type": "number"
-        },
-        "symbolBaseFillColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Default fill color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"transparent\"`."
-        },
-        "symbolBaseStrokeColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Default stroke color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"gray\"`."
-        },
-        "symbolDash": {
-          "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "symbolDashOffset": {
-          "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
-          "type": "number"
-        },
-        "symbolDirection": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for symbol legends.\n\n__Default value:__ `\"vertical\"`."
-        },
-        "symbolFillColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the legend symbol,"
-        },
-        "symbolOffset": {
-          "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
-          "type": "number"
-        },
-        "symbolOpacity": {
-          "description": "Opacity of the legend symbols.",
-          "type": "number"
-        },
-        "symbolSize": {
-          "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "symbolStrokeColor": {
-          "$ref": "#/definitions/Color",
-          "description": "Stroke color for legend symbols."
-        },
-        "symbolStrokeWidth": {
-          "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "symbolType": {
-          "$ref": "#/definitions/SymbolShape",
-          "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`."
-        },
-        "title": {
-          "description": "Set to null to disable title for the axis, legend, or header.",
-          "type": "null"
-        },
-        "titleAlign": {
-          "$ref": "#/definitions/Align",
-          "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "Text anchor position for placing legend titles."
-        },
-        "titleBaseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for legend titles.\n\n__Default value:__ `\"top\"`."
-        },
-        "titleColor": {
-          "$ref": "#/definitions/Color",
-          "description": "The color of the legend title, can be in hex color code or regular color name."
-        },
-        "titleFont": {
-          "description": "The font of the legend title.",
-          "type": "string"
-        },
-        "titleFontSize": {
-          "description": "The font size of the legend title.",
-          "type": "number"
-        },
-        "titleFontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style of the legend title."
-        },
-        "titleFontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight of the legend title.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "titleLimit": {
-          "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "titleOpacity": {
-          "description": "Opacity of the legend title.",
-          "type": "number"
-        },
-        "titleOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "Orientation of the legend title."
-        },
-        "titlePadding": {
-          "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "LegendLayout": {
-      "additionalProperties": false,
-      "properties": {
-        "anchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor point for legend orient group layout."
-        },
-        "bottom": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        },
-        "bottom-left": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        },
-        "bottom-right": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        },
-        "bounds": {
-          "$ref": "#/definitions/LayoutBounds",
-          "description": "The bounds calculation to use for legend orient group layout."
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "A flag to center legends within a shared orient group."
-        },
-        "direction": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Orientation"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "The layout direction for legend orient group layout."
-        },
-        "left": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        },
-        "margin": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "The pixel margin between legends within a orient group."
-        },
-        "offset": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/SignalRef"
-            }
-          ],
-          "description": "The pixel offset from the chart body for a legend orient group."
-        },
-        "right": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        },
-        "top": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        },
-        "top-left": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        },
-        "top-right": {
-          "$ref": "#/definitions/BaseLegendLayout"
-        }
-      },
-      "type": "object"
-    },
-    "LegendOrient": {
-      "enum": [
-        "none",
-        "left",
-        "right",
-        "top",
-        "bottom",
-        "top-left",
-        "top-right",
-        "bottom-left",
-        "bottom-right"
-      ],
-      "type": "string"
-    },
-    "LegendResolveMap": {
-      "additionalProperties": false,
-      "properties": {
-        "color": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "fill": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "fillOpacity": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "opacity": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "shape": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "size": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "stroke": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "strokeOpacity": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "strokeWidth": {
-          "$ref": "#/definitions/ResolveMode"
-        }
-      },
-      "type": "object"
-    },
-    "LineConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "point": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/OverlayMarkDef"
-            },
-            {
-              "enum": [
-                "transparent"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "LocalMultiTimeUnit": {
-      "enum": [
-        "yearquarter",
-        "yearquartermonth",
-        "yearmonth",
-        "yearmonthdate",
-        "yearmonthdatehours",
-        "yearmonthdatehoursminutes",
-        "yearmonthdatehoursminutesseconds",
-        "quartermonth",
-        "monthdate",
-        "monthdatehours",
-        "hoursminutes",
-        "hoursminutesseconds",
-        "minutesseconds",
-        "secondsmilliseconds"
-      ],
-      "type": "string"
-    },
-    "LocalSingleTimeUnit": {
-      "enum": [
-        "year",
-        "quarter",
-        "month",
-        "day",
-        "date",
-        "hours",
-        "minutes",
-        "seconds",
-        "milliseconds"
-      ],
-      "type": "string"
-    },
-    "LogicalAnd<Predicate>": {
-      "additionalProperties": false,
-      "properties": {
-        "and": {
-          "items": {
-            "$ref": "#/definitions/LogicalOperand<Predicate>"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "and"
-      ],
-      "type": "object"
-    },
-    "SelectionAnd": {
-      "additionalProperties": false,
-      "properties": {
-        "and": {
-          "items": {
-            "$ref": "#/definitions/SelectionOperand"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "and"
-      ],
-      "type": "object"
-    },
-    "LogicalNot<Predicate>": {
-      "additionalProperties": false,
-      "properties": {
-        "not": {
-          "$ref": "#/definitions/LogicalOperand<Predicate>"
-        }
-      },
-      "required": [
-        "not"
-      ],
-      "type": "object"
-    },
-    "SelectionNot": {
-      "additionalProperties": false,
-      "properties": {
-        "not": {
-          "$ref": "#/definitions/SelectionOperand"
-        }
-      },
-      "required": [
-        "not"
-      ],
-      "type": "object"
-    },
-    "LogicalOperand<Predicate>": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/LogicalNot<Predicate>"
-        },
-        {
-          "$ref": "#/definitions/LogicalAnd<Predicate>"
-        },
-        {
-          "$ref": "#/definitions/LogicalOr<Predicate>"
-        },
-        {
-          "$ref": "#/definitions/Predicate"
-        }
-      ]
-    },
-    "SelectionOperand": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SelectionNot"
-        },
-        {
-          "$ref": "#/definitions/SelectionAnd"
-        },
-        {
-          "$ref": "#/definitions/SelectionOr"
-        },
-        {
-          "type": "string"
-        }
-      ]
-    },
-    "LogicalOr<Predicate>": {
-      "additionalProperties": false,
-      "properties": {
-        "or": {
-          "items": {
-            "$ref": "#/definitions/LogicalOperand<Predicate>"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "or"
-      ],
-      "type": "object"
-    },
-    "SelectionOr": {
-      "additionalProperties": false,
-      "properties": {
-        "or": {
-          "items": {
-            "$ref": "#/definitions/SelectionOperand"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "or"
-      ],
-      "type": "object"
-    },
-    "LookupData": {
-      "additionalProperties": false,
-      "properties": {
-        "data": {
-          "$ref": "#/definitions/Data",
-          "description": "Secondary data source to lookup in."
-        },
-        "fields": {
-          "description": "Fields in foreign data to lookup.\nIf not specified, the entire object is queried.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "key": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Key in data to lookup."
-        }
-      },
-      "required": [
-        "data",
-        "key"
-      ],
-      "type": "object"
-    },
-    "LookupTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FieldName"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/FieldName"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "The field or fields for storing the computed formula value.\nIf `from.fields` is specified, the transform will use the same names for `as`.\nIf `from.fields` is not specified, `as` has to be a string and we put the whole object into the data under the specified name."
-        },
-        "default": {
-          "description": "The default value to use if lookup fails.\n\n__Default value:__ `null`",
-          "type": "string"
-        },
-        "from": {
-          "$ref": "#/definitions/LookupData",
-          "description": "Secondary data reference."
-        },
-        "lookup": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Key in primary data source."
-        }
-      },
-      "required": [
-        "lookup",
-        "from"
-      ],
-      "type": "object"
-    },
-    "Mark": {
-      "description": "All types of primitive marks.",
-      "enum": [
-        "area",
-        "bar",
-        "line",
-        "trail",
-        "point",
-        "text",
-        "tick",
-        "rect",
-        "rule",
-        "circle",
-        "square",
-        "geoshape"
-      ],
-      "type": "string"
-    },
-    "MarkConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "MarkDef": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "binSpacing": {
-          "description": "Offset between bars for binned field.  Ideal value for this is either 0 (Preferred by statisticians) or 1 (Vega-Lite Default, D3 example style).\n\n__Default value:__ `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "clip": {
-          "description": "Whether a mark be clipped to the enclosing group’s width and height.",
-          "type": "boolean"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "line": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/OverlayMarkDef"
-            }
-          ],
-          "description": "A flag for overlaying line on top of area marks, or an object defining the properties of the overlayed lines.\n\n- If this value is an empty object (`{}`) or `true`, lines with default properties will be used.\n\n- If this value is `false`, no lines would be automatically added to area marks.\n\n__Default value:__ `false`."
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "point": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/OverlayMarkDef"
-            },
-            {
-              "enum": [
-                "transparent"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "style": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n\n__Default value:__ The mark's name.  For example, a bar mark will have style `\"bar\"` by default.\n__Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)."
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "thickness": {
-          "description": "Thickness of the tick mark.\n\n__Default value:__  `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "type": {
-          "$ref": "#/definitions/Mark",
-          "description": "The mark type. This could a primitive mark type\n(one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`)\nor a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2Offset": {
-          "description": "Offset for x2-position.",
-          "type": "number"
-        },
-        "xOffset": {
-          "description": "Offset for x-position.",
-          "type": "number"
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2Offset": {
-          "description": "Offset for y2-position.",
-          "type": "number"
-        },
-        "yOffset": {
-          "description": "Offset for y-position.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "Month": {
-      "maximum": 12,
-      "minimum": 1,
-      "type": "number"
-    },
-    "MultiSelection": {
-      "additionalProperties": false,
-      "properties": {
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/EventStream"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SelectionInitMapping"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/SelectionInitMapping"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial\nvalue (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "$ref": "#/definitions/EventStream",
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "toggle": {
-          "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
-        },
-        "type": {
-          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `single` -- to select a single discrete data value on `click`.\n- `multi` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `interval` -- to select a continuous range of data values on `drag`.",
-          "enum": [
-            "multi"
-          ],
-          "type": "string"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "MultiSelectionConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/EventStream"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SelectionInitMapping"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/SelectionInitMapping"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial\nvalue (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "$ref": "#/definitions/EventStream",
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "toggle": {
-          "description": "Controls whether data values should be toggled or only ever inserted into\nmulti selections. Can be `true`, `false` (for insertion only), or a\n[Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e.,\ndata values are toggled when a user interacts with the shift-key pressed).\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "MultiTimeUnit": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/LocalMultiTimeUnit"
-        },
-        {
-          "$ref": "#/definitions/UtcMultiTimeUnit"
-        }
-      ]
-    },
-    "NamedData": {
-      "additionalProperties": false,
-      "properties": {
-        "format": {
-          "$ref": "#/definitions/DataFormat",
-          "description": "An object that specifies the format for parsing the data."
-        },
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "name"
-      ],
-      "type": "object"
-    },
-    "NiceTime": {
-      "enum": [
-        "second",
-        "minute",
-        "hour",
-        "day",
-        "week",
-        "month",
-        "year"
-      ],
-      "type": "string"
-    },
-    "NumericFieldDefWithCondition": {
-      "$ref": "#/definitions/FieldDefWithCondition<MarkPropFieldDef,number>"
-    },
-    "NumericValueDefWithCondition": {
-      "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldDef,number>"
-    },
-    "OrderFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "enum": [
-                "binned"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "sort": {
-          "$ref": "#/definitions/SortOrder",
-          "description": "The sort order. One of `\"ascending\"` (default) or `\"descending\"`."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "Orient": {
-      "enum": [
-        "left",
-        "right",
-        "top",
-        "bottom"
-      ],
-      "type": "string"
-    },
-    "Orientation": {
-      "enum": [
-        "horizontal",
-        "vertical"
-      ],
-      "type": "string"
-    },
-    "OverlayMarkDef": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "clip": {
-          "description": "Whether a mark be clipped to the enclosing group’s width and height.",
-          "type": "boolean"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "style": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A string or array of strings indicating the name of custom styles to apply to the mark. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles. Any [mark properties](https://vega.github.io/vega-lite/docs/encoding.html#mark-prop) explicitly defined within the `encoding` will override a style default.\n\n__Default value:__ The mark's name.  For example, a bar mark will have style `\"bar\"` by default.\n__Note:__ Any specified style will augment the default style. For example, a bar mark with `\"style\": \"foo\"` will receive from `config.style.bar` and `config.style.foo` (the specified style `\"foo\"` has higher precedence)."
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2Offset": {
-          "description": "Offset for x2-position.",
-          "type": "number"
-        },
-        "xOffset": {
-          "description": "Offset for x-position.",
-          "type": "number"
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2Offset": {
-          "description": "Offset for y2-position.",
-          "type": "number"
-        },
-        "yOffset": {
-          "description": "Offset for y-position.",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "Padding": {
-      "anyOf": [
-        {
-          "type": "number"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "bottom": {
-              "type": "number"
-            },
-            "left": {
-              "type": "number"
-            },
-            "right": {
-              "type": "number"
-            },
-            "top": {
-              "type": "number"
-            }
-          },
-          "type": "object"
-        }
-      ],
-      "minimum": 0
-    },
-    "Parse": {
-      "additionalProperties": {
-        "$ref": "#/definitions/ParseValue"
-      },
-      "type": "object"
-    },
-    "ParseValue": {
-      "anyOf": [
-        {
-          "type": "null"
-        },
-        {
-          "type": "string"
-        },
-        {
-          "enum": [
-            "string"
-          ],
-          "type": "string"
-        },
-        {
-          "enum": [
-            "boolean"
-          ],
-          "type": "string"
-        },
-        {
-          "enum": [
-            "date"
-          ],
-          "type": "string"
-        },
-        {
-          "enum": [
-            "number"
-          ],
-          "type": "string"
-        }
-      ]
-    },
-    "PartsMixins<BoxPlotPart>": {
-      "additionalProperties": false,
-      "properties": {
-        "box": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "median": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "outliers": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "PartsMixins<ErrorBandPart>": {
-      "additionalProperties": false,
-      "properties": {
-        "band": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "borders": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "PartsMixins<ErrorBarPart>": {
-      "additionalProperties": false,
-      "properties": {
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig"
-            }
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "PositionFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "axis": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Axis"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of axis's gridlines, ticks and labels.\nIf `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "enum": [
-                "binned"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "impute": {
-          "$ref": "#/definitions/ImputeParams",
-          "description": "An object defining the properties of the Impute Operation to be applied.\nThe field value of the other positional channel is taken as `key` of the `Impute` Operation.\nThe field of the `color` channel if specified is used as `groupby` of the `Impute` Operation.\n\n__See also:__ [`impute`](https://vega.github.io/vega-lite/docs/impute.html) documentation."
-        },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in Javascript.\n- [A sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) for sorting by another encoding channel. (This type of sort definition is not available for `row` and `column` channels.)\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order.  For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-        },
-        "stack": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StackOffset"
-            },
-            {
-              "type": "null"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Type of stacking offset if the field should be stacked.\n`stack` is only applicable for `x` and `y` channels with continuous domains.\nFor example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true:\n(1) the mark is `bar` or `area`;\n(2) the stacked measure channel (x or y) has a linear scale;\n(3) At least one of non-position channels mapped to an unaggregated field that is different from x and y.  Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "Predicate": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/FieldEqualPredicate"
-        },
-        {
-          "$ref": "#/definitions/FieldRangePredicate"
-        },
-        {
-          "$ref": "#/definitions/FieldOneOfPredicate"
-        },
-        {
-          "$ref": "#/definitions/FieldLTPredicate"
-        },
-        {
-          "$ref": "#/definitions/FieldGTPredicate"
-        },
-        {
-          "$ref": "#/definitions/FieldLTEPredicate"
-        },
-        {
-          "$ref": "#/definitions/FieldGTEPredicate"
-        },
-        {
-          "$ref": "#/definitions/FieldValidPredicate"
-        },
-        {
-          "$ref": "#/definitions/SelectionPredicate"
-        },
-        {
-          "type": "string"
-        }
-      ]
-    },
-    "Projection": {
-      "additionalProperties": false,
-      "properties": {
-        "center": {
-          "description": "Sets the projection’s center to the specified center, a two-element array of longitude and latitude in degrees.\n\n__Default value:__ `[0, 0]`",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "clipAngle": {
-          "description": "Sets the projection’s clipping circle radius to the specified angle in degrees. If `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather than small-circle clipping.",
-          "type": "number"
-        },
-        "clipExtent": {
-          "description": "Sets the projection’s viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no viewport clipping is performed.",
-          "items": {
-            "items": {
-              "type": "number"
-            },
-            "type": "array"
-          },
-          "type": "array"
-        },
-        "coefficient": {
-          "type": "number"
-        },
-        "distance": {
-          "type": "number"
-        },
-        "fraction": {
-          "type": "number"
-        },
-        "lobes": {
-          "type": "number"
-        },
-        "parallel": {
-          "type": "number"
-        },
-        "precision": {
-          "description": "Sets the threshold for the projection’s [adaptive resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This value corresponds to the [Douglas–Peucker distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm). If precision is not specified, returns the projection’s current resampling precision which defaults to `√0.5 ≅ 0.70710…`.",
-          "type": "number"
-        },
-        "radius": {
-          "type": "number"
-        },
-        "ratio": {
-          "type": "number"
-        },
-        "reflectX": {
-          "type": "boolean"
-        },
-        "reflectY": {
-          "type": "boolean"
-        },
-        "rotate": {
-          "description": "Sets the projection’s three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.)\n\n__Default value:__ `[0, 0, 0]`",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "scale": {
-          "description": "Sets the projection's scale (zoom) value, overriding automatic fitting.",
-          "type": "number"
-        },
-        "spacing": {
-          "type": "number"
-        },
-        "tilt": {
-          "type": "number"
-        },
-        "translate": {
-          "description": "Sets the projection's translation (pan) value, overriding automatic fitting.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "type": {
-          "$ref": "#/definitions/ProjectionType",
-          "description": "The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n\n__Default value:__ `mercator`"
-        }
-      },
-      "type": "object"
-    },
-    "ProjectionConfig": {
-      "$ref": "#/definitions/Projection",
-      "description": "Any property of Projection can be in config"
-    },
-    "ProjectionType": {
-      "enum": [
-        "albers",
-        "albersUsa",
-        "azimuthalEqualArea",
-        "azimuthalEquidistant",
-        "conicConformal",
-        "conicEqualArea",
-        "conicEquidistant",
-        "equirectangular",
-        "gnomonic",
-        "identity",
-        "mercator",
-        "naturalEarth1",
-        "orthographic",
-        "stereographic",
-        "transverseMercator"
-      ],
-      "type": "string"
-    },
-    "RangeConfig": {
-      "additionalProperties": {
-        "$ref": "#/definitions/RangeConfigValue"
-      },
-      "properties": {
-        "category": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/SchemeConfig"
-            }
-          ],
-          "description": "Default range for _nominal_ (categorical) fields."
-        },
-        "diverging": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/SchemeConfig"
-            }
-          ],
-          "description": "Default range for diverging _quantitative_ fields."
-        },
-        "heatmap": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/SchemeConfig"
-            }
-          ],
-          "description": "Default range for _quantitative_ heatmaps."
-        },
-        "ordinal": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/SchemeConfig"
-            }
-          ],
-          "description": "Default range for _ordinal_ fields."
-        },
-        "ramp": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/SchemeConfig"
-            }
-          ],
-          "description": "Default range for _quantitative_ and _temporal_ fields."
-        },
-        "symbol": {
-          "description": "Default range palette for the `shape` channel.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "RangeConfigValue": {
-      "anyOf": [
-        {
-          "items": {
-            "type": [
-              "number",
-              "string"
-            ]
-          },
-          "type": "array"
-        },
-        {
-          "$ref": "#/definitions/SchemeConfig"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "step": {
-              "type": "number"
-            }
-          },
-          "required": [
-            "step"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "RectConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "binSpacing": {
-          "description": "Offset between bars for binned field.  Ideal value for this is either 0 (Preferred by statisticians) or 1 (Vega-Lite Default, D3 example style).\n\n__Default value:__ `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "continuousBandSize": {
-          "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "discreteBandSize": {
-          "description": "The default size of the bars with discrete dimensions.  If unspecified, the default size is  `bandSize-1`,\nwhich provides 1 pixel offset between bars.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "RepeatMapping": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "description": "An array of fields to be repeated horizontally.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "row": {
-          "description": "An array of fields to be repeated vertically.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        }
-      },
-      "type": "object"
-    },
-    "RepeatRef": {
-      "additionalProperties": false,
-      "description": "A ValueDef with optional Condition<ValueDef | FieldDef>\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n} \n Reference to a repeated value.",
-      "properties": {
-        "repeat": {
-          "enum": [
-            "row",
-            "column",
-            "repeat"
-          ],
-          "type": "string"
-        }
-      },
-      "required": [
-        "repeat"
-      ],
-      "type": "object"
-    },
-    "Resolve": {
-      "additionalProperties": false,
-      "description": "Defines how scales, axes, and legends from different specs should be combined. Resolve is a mapping from `scale`, `axis`, and `legend` to a mapping from channels to resolutions.",
-      "properties": {
-        "axis": {
-          "$ref": "#/definitions/AxisResolveMap"
-        },
-        "legend": {
-          "$ref": "#/definitions/LegendResolveMap"
-        },
-        "scale": {
-          "$ref": "#/definitions/ScaleResolveMap"
-        }
-      },
-      "type": "object"
-    },
-    "ResolveMode": {
-      "enum": [
-        "independent",
-        "shared"
-      ],
-      "type": "string"
-    },
-    "RowCol<LayoutAlign>": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "$ref": "#/definitions/LayoutAlign"
-        },
-        "row": {
-          "$ref": "#/definitions/LayoutAlign"
-        }
-      },
-      "type": "object"
-    },
-    "RowCol<boolean>": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "type": "boolean"
-        },
-        "row": {
-          "type": "boolean"
-        }
-      },
-      "type": "object"
-    },
-    "RowCol<number>": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "type": "number"
-        },
-        "row": {
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "SampleTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "sample": {
-          "description": "The maximum number of data objects to include in the sample.\n\n__Default value:__ `1000`",
-          "type": "number"
-        }
-      },
-      "required": [
-        "sample"
-      ],
-      "type": "object"
-    },
-    "Scale": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "description": "The alignment of the steps within the scale range.\n\nThis value must lie in the range `[0,1]`. A value of `0.5` indicates that the steps should be centered within the range. A value of `0` or `1` may be used to shift the bands to one side, say to position them adjacent to an axis.\n\n__Default value:__ `0.5`",
-          "type": "number"
-        },
-        "base": {
-          "description": "The logarithm base of the `log` scale (default `10`).",
-          "type": "number"
-        },
-        "bins": {
-          "description": "An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "clamp": {
-          "description": "If `true`, values that exceed the data domain are clamped to either the minimum or maximum range value\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `clamp` (`true` by default).",
-          "type": "boolean"
-        },
-        "constant": {
-          "description": "A constant determining the slope of the symlog function around zero. Only used for `symlog` scales.\n\n__Default value:__ `1`",
-          "type": "number"
-        },
-        "domain": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "boolean"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/DateTime"
-              },
-              "type": "array"
-            },
-            {
-              "enum": [
-                "unaggregated"
-              ],
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/SelectionDomain"
-            }
-          ],
-          "description": "Customized domain values.\n\nFor _quantitative_ fields, `domain` can take the form of a two-element array with minimum and maximum values.  [Piecewise scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise) can be created by providing a `domain` with more than two entries.\nIf the input field is aggregated, `domain` can also be a string value `\"unaggregated\"`, indicating that the domain should include the raw data values prior to the aggregation.\n\nFor _temporal_ fields, `domain` can be a two-element array minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n\nFor _ordinal_ and _nominal_ fields, `domain` can be an array that lists valid input values.\n\nThe `selection` property can be used to [interactively determine](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain."
-        },
-        "exponent": {
-          "description": "The exponent of the `pow` scale.",
-          "type": "number"
-        },
-        "interpolate": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ScaleInterpolate"
-            },
-            {
-              "$ref": "#/definitions/ScaleInterpolateParams"
-            }
-          ],
-          "description": "The interpolation method for range values. By default, a general interpolator for numbers, dates, strings and colors (in HCL space) is used. For color ranges, this property allows interpolation in alternative color spaces. Legal values include `rgb`, `hsl`, `hsl-long`, `lab`, `hcl`, `hcl-long`, `cubehelix` and `cubehelix-long` ('-long' variants use longer paths in polar coordinate spaces). If object-valued, this property accepts an object with a string-valued _type_ property and an optional numeric _gamma_ property applicable to rgb and cubehelix interpolators. For more, see the [d3-interpolate documentation](https://github.com/d3/d3-interpolate).\n\n* __Default value:__ `hcl`"
-        },
-        "nice": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/NiceTime"
-            },
-            {
-              "additionalProperties": false,
-              "properties": {
-                "interval": {
-                  "type": "string"
-                },
-                "step": {
-                  "type": "number"
-                }
-              },
-              "required": [
-                "interval",
-                "step"
-              ],
-              "type": "object"
-            }
-          ],
-          "description": "Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n\nFor quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n\nFor temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n\n__Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise."
-        },
-        "padding": {
-          "description": "For _[continuous](https://vega.github.io/vega-lite/docs/scale.html#continuous)_ scales, expands the scale domain to accommodate the specified number of pixels on each of the scale range. The scale range must represent pixels for this parameter to function as intended. Padding adjustment is performed prior to all other adjustments, including the effects of the `zero`, `nice`, `domainMin`, and `domainMax` properties.\n\nFor _[band](https://vega.github.io/vega-lite/docs/scale.html#band)_ scales, shortcut for setting `paddingInner` and `paddingOuter` to the same value.\n\nFor _[point](https://vega.github.io/vega-lite/docs/scale.html#point)_ scales, alias for `paddingOuter`.\n\n__Default value:__ For _continuous_ scales, derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `continuousPadding`.\nFor _band and point_ scales, see `paddingInner` and `paddingOuter`.  By default, Vega-Lite sets padding such that _width/height = number of unique values * step_.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "paddingInner": {
-          "description": "The inner padding (spacing) within each band step of band scales, as a fraction of the step size. This value must lie in the range [0,1].\n\nFor point scale, this property is invalid as point scales do not have internal band widths (only step sizes between bands).\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingInner`.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "paddingOuter": {
-          "description": "The outer padding (spacing) at the ends of the range of band and point scales,\nas a fraction of the step size. This value must lie in the range [0,1].\n\n__Default value:__ derived from the [scale config](https://vega.github.io/vega-lite/docs/scale.html#config)'s `bandPaddingOuter` for band scales and `pointPadding` for point scales.\nBy default, Vega-Lite sets outer padding such that _width/height = number of unique values * step_.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "range": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "The range of the scale. One of:\n\n- A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n\n- For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating  minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n\n- For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values.\n\n__Notes:__\n\n1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n\n2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`) or via [range steps and paddings properties](#range-step) for [band](#band) and [point](#point) scales."
-        },
-        "rangeStep": {
-          "description": "The distance between the starts of adjacent bands or points in [band](https://vega.github.io/vega-lite/docs/scale.html#band) and [point](https://vega.github.io/vega-lite/docs/scale.html#point) scales.\n\nIf `rangeStep` is `null` or if the view contains the scale's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` for `x` scales and `height` for `y` scales), `rangeStep` will be automatically determined to fit the size of the view.\n\n__Default value:__  derived the [scale config](https://vega.github.io/vega-lite/docs/config.html#scale-config)'s `textXRangeStep` (`90` by default) for x-scales of `text` marks and `rangeStep` (`21` by default) for x-scales of other marks and y-scales.\n\n__Warning__: If `rangeStep` is `null` and the cardinality of the scale's domain is higher than `width` or `height`, the rangeStep might become less than one pixel and the mark might not appear correctly.",
-          "minimum": 0,
-          "type": [
-            "number",
-            "null"
-          ]
-        },
-        "round": {
-          "description": "If `true`, rounds numeric output values to integers. This can be helpful for snapping to the pixel grid.\n\n__Default value:__ `false`.",
-          "type": "boolean"
-        },
-        "scheme": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/SchemeParams"
-            }
-          ],
-          "description": "A string indicating a color [scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme) name (e.g., `\"category10\"` or `\"blues\"`) or a [scheme parameter object](https://vega.github.io/vega-lite/docs/scale.html#scheme-params).\n\nDiscrete color schemes may be used with [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) or [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales. Continuous color schemes are intended for use with color scales.\n\nFor the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference."
-        },
-        "type": {
-          "$ref": "#/definitions/ScaleType",
-          "description": "The type of scale.  Vega-Lite supports the following categories of scale types:\n\n1) [**Continuous Scales**](https://vega.github.io/vega-lite/docs/scale.html#continuous) -- mapping continuous domains to continuous output ranges ([`\"linear\"`](https://vega.github.io/vega-lite/docs/scale.html#linear), [`\"pow\"`](https://vega.github.io/vega-lite/docs/scale.html#pow), [`\"sqrt\"`](https://vega.github.io/vega-lite/docs/scale.html#sqrt), [`\"symlog\"`](https://vega.github.io/vega-lite/docs/scale.html#symlog), [`\"log\"`](https://vega.github.io/vega-lite/docs/scale.html#log), [`\"time\"`](https://vega.github.io/vega-lite/docs/scale.html#time), [`\"utc\"`](https://vega.github.io/vega-lite/docs/scale.html#utc).\n\n2) [**Discrete Scales**](https://vega.github.io/vega-lite/docs/scale.html#discrete) -- mapping discrete domains to discrete ([`\"ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#ordinal)) or continuous ([`\"band\"`](https://vega.github.io/vega-lite/docs/scale.html#band) and [`\"point\"`](https://vega.github.io/vega-lite/docs/scale.html#point)) output ranges.\n\n3) [**Discretizing Scales**](https://vega.github.io/vega-lite/docs/scale.html#discretizing) -- mapping continuous domains to discrete output ranges [`\"bin-ordinal\"`](https://vega.github.io/vega-lite/docs/scale.html#bin-ordinal), [`\"quantile\"`](https://vega.github.io/vega-lite/docs/scale.html#quantile), [`\"quantize\"`](https://vega.github.io/vega-lite/docs/scale.html#quantize) and [`\"threshold\"`](https://vega.github.io/vega-lite/docs/scale.html#threshold).\n\n__Default value:__ please see the [scale type table](https://vega.github.io/vega-lite/docs/scale.html#type)."
-        },
-        "zero": {
-          "description": "If `true`, ensures that a zero baseline value is included in the scale domain.\n\n__Default value:__ `true` for x and y channels if the quantitative field is not binned and no custom `domain` is provided; `false` otherwise.\n\n__Note:__ Log, time, and utc scales do not support `zero`.",
-          "type": "boolean"
-        }
-      },
-      "type": "object"
-    },
-    "ScaleConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "bandPaddingInner": {
-          "description": "Default inner padding for `x` and `y` band-ordinal scales.\n\n__Default value:__\n- `barBandPaddingInner` for bar marks (`0.1` by default)\n- `rectBandPaddingInner` for rect and other marks (`0` by default)",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "bandPaddingOuter": {
-          "description": "Default outer padding for `x` and `y` band-ordinal scales.\n\n__Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "barBandPaddingInner": {
-          "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\n\n__Default value:__ `0.1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "barBandPaddingOuter": {
-          "description": "Default outer padding for `x` and `y` band-ordinal scales of `\"bar\"` marks.\nIf not specified, by default, band scale's paddingOuter is paddingInner/2.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "clamp": {
-          "description": "If true, values that exceed the data domain are clamped to either the minimum or maximum range value",
-          "type": "boolean"
-        },
-        "continuousPadding": {
-          "description": "Default padding for continuous scales.\n\n__Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "maxBandSize": {
-          "description": "The default max value for mapping quantitative fields to bar's size/bandSize.\n\nIf undefined (default), we will use the scale's `rangeStep` - 1.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "maxFontSize": {
-          "description": "The default max value for mapping quantitative fields to text's size/fontSize.\n\n__Default value:__ `40`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "maxOpacity": {
-          "description": "Default max opacity for mapping a field to opacity.\n\n__Default value:__ `0.8`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "maxSize": {
-          "description": "Default max value for point size scale.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "maxStrokeWidth": {
-          "description": "Default max strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks.\n\n__Default value:__ `4`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "minBandSize": {
-          "description": "The default min value for mapping quantitative fields to bar and tick's size/bandSize scale with zero=false.\n\n__Default value:__ `2`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "minFontSize": {
-          "description": "The default min value for mapping quantitative fields to tick's size/fontSize scale with zero=false\n\n__Default value:__ `8`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "minOpacity": {
-          "description": "Default minimum opacity for mapping a field to opacity.\n\n__Default value:__ `0.3`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "minSize": {
-          "description": "Default minimum value for point size scale with zero=false.\n\n__Default value:__ `9`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "minStrokeWidth": {
-          "description": "Default minimum strokeWidth for the scale of strokeWidth for rule and line marks and of size for trail marks with zero=false.\n\n__Default value:__ `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "pointPadding": {
-          "description": "Default outer padding for `x` and `y` point-ordinal scales.\n\n__Default value:__ `0.5` (which makes _width/height = number of unique values * step_)",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "quantileCount": {
-          "description": "Default range cardinality for [`quantile`](https://vega.github.io/vega-lite/docs/scale.html#quantile) scale.\n\n__Default value:__ `4`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "quantizeCount": {
-          "description": "Default range cardinality for [`quantize`](https://vega.github.io/vega-lite/docs/scale.html#quantize) scale.\n\n__Default value:__ `4`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "rangeStep": {
-          "description": "Default range step for band and point scales of (1) the `y` channel\nand (2) the `x` channel when the mark is not `text`.\n\n__Default value:__ `20`",
-          "minimum": 0,
-          "type": [
-            "number",
-            "null"
-          ]
-        },
-        "rectBandPaddingInner": {
-          "description": "Default inner padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\n\n__Default value:__ `0`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "rectBandPaddingOuter": {
-          "description": "Default outer padding for `x` and `y` band-ordinal scales of `\"rect\"` marks.\nIf not specified, by default, band scale's paddingOuter is paddingInner/2.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "round": {
-          "description": "If true, rounds numeric output values to integers.\nThis can be helpful for snapping to the pixel grid.\n(Only available for `x`, `y`, and `size` scales.)",
-          "type": "boolean"
-        },
-        "textXRangeStep": {
-          "description": "Default range step for `x` band and point scales of text marks.\n\n__Default value:__ `90`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "useUnaggregatedDomain": {
-          "description": "Use the source data range before aggregation as scale domain instead of aggregated data for aggregate axis.\n\nThis is equivalent to setting `domain` to `\"unaggregate\"` for aggregated _quantitative_ fields by default.\n\nThis property only works with aggregate functions that produce values within the raw data domain (`\"mean\"`, `\"average\"`, `\"median\"`, `\"q1\"`, `\"q3\"`, `\"min\"`, `\"max\"`). For other aggregations that produce values outside of the raw data domain (e.g. `\"count\"`, `\"sum\"`), this property is ignored.\n\n__Default value:__ `false`",
-          "type": "boolean"
-        }
-      },
-      "type": "object"
-    },
-    "ScaleInterpolate": {
-      "enum": [
-        "rgb",
-        "lab",
-        "hcl",
-        "hsl",
-        "hsl-long",
-        "hcl-long",
-        "cubehelix",
-        "cubehelix-long"
-      ],
-      "type": "string"
-    },
-    "ScaleInterpolateParams": {
-      "additionalProperties": false,
-      "properties": {
-        "gamma": {
-          "type": "number"
-        },
-        "type": {
-          "enum": [
-            "rgb",
-            "cubehelix",
-            "cubehelix-long"
-          ],
-          "type": "string"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "ScaleResolveMap": {
-      "additionalProperties": false,
-      "properties": {
-        "color": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "fill": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "fillOpacity": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "opacity": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "shape": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "size": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "stroke": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "strokeOpacity": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "strokeWidth": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "x": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "y": {
-          "$ref": "#/definitions/ResolveMode"
-        }
-      },
-      "type": "object"
-    },
-    "ScaleType": {
-      "enum": [
-        "linear",
-        "log",
-        "pow",
-        "sqrt",
-        "symlog",
-        "time",
-        "utc",
-        "quantile",
-        "quantize",
-        "threshold",
-        "bin-ordinal",
-        "ordinal",
-        "point",
-        "band"
-      ],
-      "type": "string"
-    },
-    "SchemeConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "count": {
-          "type": "number"
-        },
-        "extent": {
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "scheme": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "scheme"
-      ],
-      "type": "object"
-    },
-    "SchemeParams": {
-      "additionalProperties": false,
-      "properties": {
-        "count": {
-          "description": "The number of colors to use in the scheme. This can be useful for scale types such as `\"quantize\"`, which use the length of the scale range to determine the number of discrete bins for the scale domain.",
-          "type": "number"
-        },
-        "extent": {
-          "description": "The extent of the color range to use. For example `[0.2, 1]` will rescale the color scheme such that color values in the range _[0, 0.2)_ are excluded from the scheme.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "name": {
-          "description": "A color scheme name for ordinal scales (e.g., `\"category10\"` or `\"blues\"`).\n\nFor the full list of supported schemes, please refer to the [Vega Scheme](https://vega.github.io/vega/docs/schemes/#reference) reference.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "name"
-      ],
-      "type": "object"
-    },
-    "SecondaryFieldDef": {
-      "additionalProperties": false,
-      "description": "A field definition of a secondary channel that shares a scale with another primary channel.  For example, `x2`, `xError` and `xError2` share the same scale with `x`.",
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
-          "type": "null"
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "SelectionConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "interval": {
-          "$ref": "#/definitions/IntervalSelectionConfig",
-          "description": "The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\nfor an interval selection definition (except `type`) may be specified here.\n\nFor instance, setting `interval` to `{\"translate\": false}` disables the ability to move\ninterval selections by default."
-        },
-        "multi": {
-          "$ref": "#/definitions/MultiSelectionConfig",
-          "description": "The default definition for a [`multi`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\nfor a multi selection definition (except `type`) may be specified here.\n\nFor instance, setting `multi` to `{\"toggle\": \"event.altKey\"}` adds additional values to\nmulti selections when clicking with the alt-key pressed by default."
-        },
-        "single": {
-          "$ref": "#/definitions/SingleSelectionConfig",
-          "description": "The default definition for a [`single`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations\n  for a single selection definition (except `type`) may be specified here.\n\nFor instance, setting `single` to `{\"on\": \"dblclick\"}` populates single selections on double-click by default."
-        }
-      },
-      "type": "object"
-    },
-    "SelectionDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SingleSelection"
-        },
-        {
-          "$ref": "#/definitions/MultiSelection"
-        },
-        {
-          "$ref": "#/definitions/IntervalSelection"
-        }
-      ]
-    },
-    "SelectionDomain": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "field": {
-              "$ref": "#/definitions/FieldName",
-              "description": "The field name to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\nover multiple fields or encodings."
-            },
-            "selection": {
-              "description": "The name of a selection.",
-              "type": "string"
-            }
-          },
-          "required": [
-            "selection"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "encoding": {
-              "description": "The encoding channel to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html)\nover multiple fields or encodings.",
-              "type": "string"
-            },
-            "selection": {
-              "description": "The name of a selection.",
-              "type": "string"
-            }
-          },
-          "required": [
-            "selection"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "SelectionInit": {
-      "anyOf": [
-        {
-          "type": "boolean"
-        },
-        {
-          "type": "number"
-        },
-        {
-          "type": "string"
-        },
-        {
-          "$ref": "#/definitions/DateTime"
-        }
-      ]
-    },
-    "SelectionInitInterval": {
-      "anyOf": [
-        {
-          "items": [
-            {
-              "type": "boolean"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        {
-          "items": [
-            {
-              "type": "number"
-            },
-            {
-              "type": "number"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        {
-          "items": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        {
-          "items": [
-            {
-              "$ref": "#/definitions/DateTime"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        }
-      ]
-    },
-    "SelectionInitIntervalMapping": {
-      "additionalProperties": {
-        "$ref": "#/definitions/SelectionInitInterval"
-      },
-      "type": "object"
-    },
-    "SelectionInitMapping": {
-      "additionalProperties": {
-        "$ref": "#/definitions/SelectionInit"
-      },
-      "type": "object"
-    },
-    "SelectionPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionOperand",
-          "description": "Filter using a selection name."
-        }
-      },
-      "required": [
-        "selection"
-      ],
-      "type": "object"
-    },
-    "SelectionResolution": {
-      "enum": [
-        "global",
-        "union",
-        "intersect"
-      ],
-      "type": "string"
-    },
-    "SequenceGenerator": {
-      "additionalProperties": false,
-      "properties": {
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
-        },
-        "sequence": {
-          "$ref": "#/definitions/SequenceParams",
-          "description": "Generate a sequence of numbers."
-        }
-      },
-      "required": [
-        "sequence"
-      ],
-      "type": "object"
-    },
-    "SequenceParams": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The name of the generated sequence field.\n\n__Default value:__ `\"data\"`"
-        },
-        "start": {
-          "description": "The starting value of the sequence (inclusive).",
-          "type": "number"
-        },
-        "step": {
-          "description": "The step value between sequence entries.\n\n__Default value:__ `1`",
-          "type": "number"
-        },
-        "stop": {
-          "description": "The ending value of the sequence (exclusive).",
-          "type": "number"
-        }
-      },
-      "required": [
-        "start",
-        "stop"
-      ],
-      "type": "object"
-    },
-    "ShapeFieldDefWithCondition": {
-      "$ref": "#/definitions/StringFieldDefWithCondition<TypeForShape>"
-    },
-    "ShapeValueDefWithCondition": {
-      "$ref": "#/definitions/StringValueDefWithCondition<TypeForShape>"
-    },
-    "SignalRef": {
-      "additionalProperties": false,
-      "properties": {
-        "signal": {
-          "type": "string"
-        }
-      },
-      "required": [
-        "signal"
-      ],
-      "type": "object"
-    },
-    "SingleDefUnitChannel": {
-      "enum": [
-        "x",
-        "y",
-        "x2",
-        "y2",
-        "longitude",
-        "latitude",
-        "longitude2",
-        "latitude2",
-        "color",
-        "fill",
-        "stroke",
-        "opacity",
-        "fillOpacity",
-        "strokeOpacity",
-        "strokeWidth",
-        "size",
-        "shape",
-        "key",
-        "text",
-        "tooltip",
-        "href"
-      ],
-      "type": "string"
-    },
-    "SingleSelection": {
-      "additionalProperties": false,
-      "properties": {
-        "bind": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Binding"
-            },
-            {
-              "additionalProperties": {
-                "$ref": "#/definitions/Binding"
-              },
-              "type": "object"
-            }
-          ],
-          "description": "Establish a two-way binding between a single selection and input elements\n(also known as dynamic query widgets). A binding takes the form of\nVega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation."
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/EventStream"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "$ref": "#/definitions/SelectionInitMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "$ref": "#/definitions/EventStream",
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "type": {
-          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `single` -- to select a single discrete data value on `click`.\n- `multi` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`.\n- `interval` -- to select a continuous range of data values on `drag`.",
-          "enum": [
-            "single"
-          ],
-          "type": "string"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "SingleSelectionConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "bind": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Binding"
-            },
-            {
-              "additionalProperties": {
-                "$ref": "#/definitions/Binding"
-              },
-              "type": "object"
-            }
-          ],
-          "description": "Establish a two-way binding between a single selection and input elements\n(also known as dynamic query widgets). A binding takes the form of\nVega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind)\nor can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation."
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/EventStream"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be an\n[EventStream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection.\nWhen set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values\nmust match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to\nfall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "$ref": "#/definitions/SelectionInitMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete\nselection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "$ref": "#/definitions/EventStream",
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection.\nFor interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how\nselections' data queries are resolved when applied in a filter transform,\nconditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "SingleTimeUnit": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/LocalSingleTimeUnit"
-        },
-        {
-          "$ref": "#/definitions/UtcSingleTimeUnit"
-        }
-      ]
-    },
-    "Sort": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SortArray"
-        },
-        {
-          "$ref": "#/definitions/SortOrder"
-        },
-        {
-          "$ref": "#/definitions/EncodingSortField"
-        },
-        {
-          "$ref": "#/definitions/SortByEncoding"
-        },
-        {
-          "type": "null"
-        }
-      ]
-    },
-    "SortArray": {
-      "anyOf": [
-        {
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "boolean"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "$ref": "#/definitions/DateTime"
-          },
-          "type": "array"
-        }
-      ]
-    },
-    "SortByEncoding": {
-      "additionalProperties": false,
-      "properties": {
-        "encoding": {
-          "$ref": "#/definitions/SingleDefUnitChannel",
-          "description": "The [encoding channel](https://vega.github.io/vega-lite/docs/encoding.html#channels) to sort by (e.g., `\"x\"`, `\"y\"`)"
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)."
-        }
-      },
-      "required": [
-        "encoding"
-      ],
-      "type": "object"
-    },
-    "SortField": {
-      "additionalProperties": false,
-      "description": "A sort definition for transform",
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The name of the field to sort."
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "Whether to sort the field in ascending or descending order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)."
-        }
-      },
-      "required": [
-        "field"
-      ],
-      "type": "object"
-    },
-    "SortOrder": {
-      "enum": [
-        "ascending",
-        "descending"
-      ],
-      "type": "string"
-    },
-    "SphereGenerator": {
-      "additionalProperties": false,
-      "properties": {
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
-        },
-        "sphere": {
-          "anyOf": [
-            {
-              "enum": [
-                true
-              ],
-              "type": "boolean"
-            },
-            {
-              "additionalProperties": false,
-              "type": "object"
-            }
-          ],
-          "description": "Generate sphere GeoJSON data for the full globe."
-        }
-      },
-      "required": [
-        "sphere"
-      ],
-      "type": "object"
-    },
-    "StackOffset": {
-      "enum": [
-        "zero",
-        "center",
-        "normalize"
-      ],
-      "type": "string"
-    },
-    "StackTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FieldName"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/FieldName"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Output field names. This can be either a string or an array of strings with\ntwo elements denoting the name for the fields for stack start and stack end\nrespectively.\nIf a single string(eg.\"val\") is provided, the end field will be \"val_end\"."
-        },
-        "groupby": {
-          "description": "The data fields to group by.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "offset": {
-          "description": "Mode for stacking marks.\n__Default value:__ `\"zero\"`",
-          "enum": [
-            "zero",
-            "center",
-            "normalize"
-          ],
-          "type": "string"
-        },
-        "sort": {
-          "description": "Field that determines the order of leaves in the stacked charts.",
-          "items": {
-            "$ref": "#/definitions/SortField"
-          },
-          "type": "array"
-        },
-        "stack": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The field which is stacked."
-        }
-      },
-      "required": [
-        "stack",
-        "groupby",
-        "as"
-      ],
-      "type": "object"
-    },
-    "StandardType": {
-      "enum": [
-        "quantitative",
-        "ordinal",
-        "temporal",
-        "nominal"
-      ],
-      "type": "string"
-    },
-    "StringFieldDefWithCondition<TypeForShape>": {
-      "$ref": "#/definitions/FieldDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>"
-    },
-    "StringFieldDefWithCondition": {
-      "$ref": "#/definitions/FieldDefWithCondition<MarkPropFieldDef,(string|null)>"
-    },
-    "StringValueDefWithCondition<TypeForShape>": {
-      "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>"
-    },
-    "StringValueDefWithCondition": {
-      "$ref": "#/definitions/ValueDefWithCondition<MarkPropFieldDef,(string|null)>"
-    },
-    "StrokeCap": {
-      "enum": [
-        "butt",
-        "round",
-        "square"
-      ],
-      "type": "string"
-    },
-    "StrokeJoin": {
-      "enum": [
-        "miter",
-        "round",
-        "bevel"
-      ],
-      "type": "string"
-    },
-    "StyleConfigIndex": {
-      "additionalProperties": {
-        "$ref": "#/definitions/BaseMarkConfig"
-      },
-      "type": "object"
-    },
-    "SymbolShape": {
-      "type": "string"
-    },
-    "TextBaseline": {
-      "anyOf": [
-        {
-          "enum": [
-            "alphabetic"
-          ],
-          "type": "string"
-        },
-        {
-          "$ref": "#/definitions/Baseline"
-        }
-      ]
-    },
-    "TextConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "shortTimeLabels": {
-          "description": "Whether month names and weekday names should be abbreviated.",
-          "type": "boolean"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "TextFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "enum": [
-                "binned"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "format": {
-          "description": "The text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format.",
-          "type": "string"
-        },
-        "formatType": {
-          "description": "The format type for labels (`\"number\"` or `\"time\"`).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nomimal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nomimal fields without `timeUnit`.",
-          "enum": [
-            "number",
-            "time"
-          ],
-          "type": "string"
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "TextFieldDefWithCondition": {
-      "$ref": "#/definitions/FieldDefWithCondition<TextFieldDef,Value>"
-    },
-    "TextValueDefWithCondition": {
-      "$ref": "#/definitions/ValueDefWithCondition<TextFieldDef,Value>"
-    },
-    "TickConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text. One of `\"left\"`, `\"right\"`, `\"center\"`."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "bandSize": {
-          "description": "The width of the ticks.\n\n__Default value:__  3/4 of rangeStep.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "The vertical alignment of the text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Default value:__ `\"middle\"`"
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Default color.  Note that `fill` and `stroke` have higher precedence than `color` and will override `color`.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config)."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "dir": {
-          "$ref": "#/definitions/Dir",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "fill": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Fill Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for `point`, `line` and `rule`; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.",
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink.",
-          "format": "uri",
-          "type": "string"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts.\nThe value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick\nshould be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line\nif `config.sortLineBy` is not specified.\nFor stacked charts, this is always determined by the orientation of the stack;\ntherefore explicitly specified value will be ignored."
-        },
-        "radius": {
-          "description": "Polar coordinate radial offset, in pixels, of the text label from the origin determined by the `x` and `y` properties.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "shape": {
-          "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`",
-          "type": "string"
-        },
-        "size": {
-          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. For example: in the case of circles, the radius is determined in part by the square root of the size value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__ `30` for point, circle, square marks; `rangeStep` - 1 for bar marks with discrete dimensions; `5` for bar marks with continuous dimensions; `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "$ref": "#/definitions/Color",
-          "description": "Default Stroke Color.  This has higher precedence than `config.color`\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "text": {
-          "description": "Placeholder text if the `text` channel is not specified",
-          "type": "string"
-        },
-        "theta": {
-          "description": "Polar coordinate angle, in radians, of the text label from the origin determined by the `x` and `y` properties. Values for `theta` follow the same convention of `arc` mark `startAngle` and `endAngle` properties: angles are measured in radians, with `0` indicating \"north\".",
-          "type": "number"
-        },
-        "thickness": {
-          "description": "Thickness of the tick mark.\n\n__Default value:__  `1`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Value"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null`, then no tooltip will be used."
-        },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
-        },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "TimeUnit": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SingleTimeUnit"
-        },
-        {
-          "$ref": "#/definitions/MultiTimeUnit"
-        }
-      ]
-    },
-    "TimeUnitTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The output field to write the timeUnit value."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field to apply time unit."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "The timeUnit."
-        }
-      },
-      "required": [
-        "timeUnit",
-        "field",
-        "as"
-      ],
-      "type": "object"
-    },
-    "TitleAnchor": {
-      "enum": [
-        null,
-        "start",
-        "middle",
-        "end"
-      ],
-      "type": [
-        "null",
-        "string"
-      ]
-    },
-    "TitleConfig": {
-      "$ref": "#/definitions/BaseTitleConfig"
-    },
-    "TitleFrame": {
-      "enum": [
-        "bounds",
-        "group"
-      ],
-      "type": "string"
-    },
-    "TitleOrient": {
-      "enum": [
-        "none",
-        "left",
-        "right",
-        "top",
-        "bottom"
-      ],
-      "type": "string"
-    },
-    "TitleParams": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align"
-        },
-        "anchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title.\n\n__Default value:__ `\"middle\"` for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.\n`\"start\"` for other composite views.\n\n__Note:__ [For now](https://github.com/vega/vega-lite/issues/2875), `anchor` is only customizable only for [single](https://vega.github.io/vega-lite/docs/spec.html) and [layered](https://vega.github.io/vega-lite/docs/layer.html) views.  For other composite views, `anchor` is always `\"start\"`."
-        },
-        "angle": {
-          "description": "Angle in degrees of title text.",
-          "type": "number"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "Vertical text baseline for title text. One of `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`."
-        },
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "Text color for title text."
-        },
-        "dx": {
-          "description": "Delta offset for title text x-coordinate.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "Delta offset for title text y-coordinate.",
-          "type": "number"
-        },
-        "font": {
-          "description": "Font name for title text.",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "Font size in pixels for title text.\n\n__Default value:__ `10`.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "Font style for title text."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "Font weight for title text.\nThis can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "frame": {
-          "$ref": "#/definitions/TitleFrame",
-          "description": "The reference frame for the anchor position, one of `\"bounds\"` (to anchor relative to the full bounding box) or `\"group\"` (to anchor relative to the group width or height)."
-        },
-        "limit": {
-          "description": "The maximum allowed length in pixels of legend labels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "offset": {
-          "description": "The orthogonal offset in pixels by which to displace the title from its position along the edge of the chart.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/TitleOrient",
-          "description": "Default title orientation (`\"top\"`, `\"bottom\"`, `\"left\"`, or `\"right\"`)"
-        },
-        "style": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A [mark style property](https://vega.github.io/vega-lite/docs/config.html#style) to apply to the title text mark.\n\n__Default value:__ `\"group-title\"`."
-        },
-        "text": {
-          "description": "The title text.",
-          "type": "string"
-        },
-        "zindex": {
-          "description": "The integer z-index indicating the layering of the title group relative to other axis, mark and legend groups.\n\n__Default value:__ `0`.",
-          "minimum": 0,
-          "type": "number"
-        }
-      },
-      "required": [
-        "text"
-      ],
-      "type": "object"
-    },
-    "TooltipContent": {
-      "additionalProperties": false,
-      "properties": {
-        "content": {
-          "enum": [
-            "encoding",
-            "data"
-          ],
-          "type": "string"
-        }
-      },
-      "required": [
-        "content"
-      ],
-      "type": "object"
-    },
-    "TopLevelConcatSpec": {
-      "additionalProperties": false,
-      "properties": {
-        "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
-          "format": "uri",
-          "type": "string"
-        },
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "concat": {
-          "description": "A list of views to be concatenated.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
-        },
-        "config": {
-          "$ref": "#/definitions/Config",
-          "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "datasets": {
-          "$ref": "#/definitions/Datasets",
-          "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "usermeta": {
-          "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.",
-          "type": "object"
-        }
-      },
-      "required": [
-        "concat"
-      ],
-      "type": "object"
-    },
-    "TopLevelHConcatSpec": {
-      "additionalProperties": false,
-      "properties": {
-        "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
-          "format": "uri",
-          "type": "string"
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
-        },
-        "config": {
-          "$ref": "#/definitions/Config",
-          "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "datasets": {
-          "$ref": "#/definitions/Datasets",
-          "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "hconcat": {
-          "description": "A list of views to be concatenated and put into a row.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "usermeta": {
-          "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.",
-          "type": "object"
-        }
-      },
-      "required": [
-        "hconcat"
-      ],
-      "type": "object"
-    },
-    "TopLevelRepeatSpec": {
-      "additionalProperties": false,
-      "properties": {
-        "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
-          "format": "uri",
-          "type": "string"
-        },
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "config": {
-          "$ref": "#/definitions/Config",
-          "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "datasets": {
-          "$ref": "#/definitions/Datasets",
-          "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "repeat": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/RepeatMapping"
-            }
-          ],
-          "description": "Definition for fields to be repeated.  One of:\n1) An array of fields to be repeated.  If `\"repeat\"` is an array, the field can be referred using `{\"repeat\": \"repeat\"}`\n2) An object that mapped `\"row\"` and/or `\"column\"` to the listed of fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively."
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "spec": {
-          "$ref": "#/definitions/Spec",
-          "description": "A specification of the view that gets repeated."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "usermeta": {
-          "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.",
-          "type": "object"
-        }
-      },
-      "required": [
-        "repeat",
-        "spec"
-      ],
-      "type": "object"
-    },
-    "TopLevelVConcatSpec": {
-      "additionalProperties": false,
-      "properties": {
-        "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
-          "format": "uri",
-          "type": "string"
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
-        },
-        "config": {
-          "$ref": "#/definitions/Config",
-          "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "datasets": {
-          "$ref": "#/definitions/Datasets",
-          "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "usermeta": {
-          "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.",
-          "type": "object"
-        },
-        "vconcat": {
-          "description": "A list of views to be concatenated and put into a column.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "vconcat"
-      ],
-      "type": "object"
-    },
-    "TopLevelLayerSpec": {
-      "additionalProperties": false,
-      "properties": {
-        "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
-          "format": "uri",
-          "type": "string"
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "config": {
-          "$ref": "#/definitions/Config",
-          "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "datasets": {
-          "$ref": "#/definitions/Datasets",
-          "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "encoding": {
-          "$ref": "#/definitions/Encoding",
-          "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers."
-        },
-        "height": {
-          "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        },
-        "layer": {
-          "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.",
-          "items": {
-            "anyOf": [
-              {
-                "$ref": "#/definitions/LayerSpec"
-              },
-              {
-                "$ref": "#/definitions/UnitSpec"
-              }
-            ]
-          },
-          "type": "array"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of the geographic projection shared by underlying layers."
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "usermeta": {
-          "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.",
-          "type": "object"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
-        },
-        "width": {
-          "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band).   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "layer"
-      ],
-      "type": "object"
-    },
-    "TopLevelFacetSpec": {
-      "additionalProperties": false,
-      "properties": {
-        "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
-          "format": "uri",
-          "type": "string"
-        },
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "config": {
-          "$ref": "#/definitions/Config",
-          "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "datasets": {
-          "$ref": "#/definitions/Datasets",
-          "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "facet": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FacetFieldDef"
-            },
-            {
-              "$ref": "#/definitions/FacetMapping"
-            }
-          ],
-          "description": "Definition for how to facet the data.  One of:\n1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def)\n2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "spec": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayerSpec"
-            },
-            {
-              "$ref": "#/definitions/FacetedUnitSpec"
-            }
-          ],
-          "description": "A specification of the view that gets faceted."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "usermeta": {
-          "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.",
-          "type": "object"
-        }
-      },
-      "required": [
-        "data",
-        "facet",
-        "spec"
-      ],
-      "type": "object"
-    },
-    "TopLevelSpec": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/TopLevelUnitSpec"
-        },
-        {
-          "$ref": "#/definitions/TopLevelFacetSpec"
-        },
-        {
-          "$ref": "#/definitions/TopLevelLayerSpec"
-        },
-        {
-          "$ref": "#/definitions/TopLevelRepeatSpec"
-        },
-        {
-          "$ref": "#/definitions/TopLevelConcatSpec"
-        },
-        {
-          "$ref": "#/definitions/TopLevelVConcatSpec"
-        },
-        {
-          "$ref": "#/definitions/TopLevelHConcatSpec"
-        }
-      ],
-      "description": "A Vega-Lite top-level specification.\nThis is the root class for all Vega-Lite specifications.\n(The json schema is generated from this type.)"
-    },
-    "TopLevelUnitSpec": {
-      "additionalProperties": false,
-      "properties": {
-        "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v3.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
-          "format": "uri",
-          "type": "string"
-        },
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns.\nThe supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "Sets how the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`.\nObject values can additionally specify parameters for content sizing and automatic resizing.\n`\"fit\"` is only supported for single and layered views that don't use `rangeStep`.\n\n__Default value__: `pad`"
-        },
-        "background": {
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ none (transparent)",
-          "type": "string"
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to\n`hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "config": {
-          "$ref": "#/definitions/Config",
-          "description": "Vega-Lite configuration object.  This property can only be defined at the top-level of a specification."
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "datasets": {
-          "$ref": "#/definitions/Datasets",
-          "description": "A global data store for named datasets. This is a mapping from names to inline datasets.\nThis can be an array of objects or primitive values or a string. Arrays of primitive values are ingested as objects with a `data` property."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "encoding": {
-          "$ref": "#/definitions/FacetedEncoding",
-          "description": "A key-value mapping between encoding channels and definition of fields."
-        },
-        "height": {
-          "description": "The height of a visualization.\n\n__Default value:__\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its y-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For y-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the height is [determined by the range step, paddings, and the cardinality of the field mapped to y-channel](https://vega.github.io/vega-lite/docs/scale.html#band). Otherwise, if the `rangeStep` is `null`, the height will be the value of [`config.view.height`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `y` channel, the `height` will be the value of `rangeStep`.\n\n__Note__: For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        },
-        "mark": {
-          "$ref": "#/definitions/AnyMark",
-          "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`,\n`\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)."
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "padding": {
-          "$ref": "#/definitions/Padding",
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle.  If a number, specifies padding for all sides.\nIf an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks\nand to `latitude` and `\"longitude\"` channels for other marks."
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "selection": {
-          "additionalProperties": {
-            "$ref": "#/definitions/SelectionDef"
-          },
-          "description": "A key-value mapping between selection names and definitions.",
-          "type": "object"
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator.\nAn object of the form `{\"row\": number, \"column\": number}` can be used to set\ndifferent spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "usermeta": {
-          "description": "Optional metadata that will be passed to Vega.\nThis object is completely ignored by Vega and Vega-Lite and can be used for custom metadata.",
-          "type": "object"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
-        },
-        "width": {
-          "description": "The width of a visualization.\n\n__Default value:__ This will be determined by the following rules:\n\n- If a view's [`autosize`](https://vega.github.io/vega-lite/docs/size.html#autosize) type is `\"fit\"` or its x-channel has a [continuous scale](https://vega.github.io/vega-lite/docs/scale.html#continuous), the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- For x-axis with a band or point scale: if [`rangeStep`](https://vega.github.io/vega-lite/docs/scale.html#band) is a numeric value or unspecified, the width is [determined by the range step, paddings, and the cardinality of the field mapped to x-channel](https://vega.github.io/vega-lite/docs/scale.html#band).   Otherwise, if the `rangeStep` is `null`, the width will be the value of [`config.view.width`](https://vega.github.io/vega-lite/docs/spec.html#config).\n- If no field is mapped to `x` channel, the `width` will be the value of [`config.scale.textXRangeStep`](https://vega.github.io/vega-lite/docs/size.html#default-width-and-height) for `text` mark and the value of `rangeStep` for other marks.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view.\n\n__See also:__ The documentation for [width and height](https://vega.github.io/vega-lite/docs/size.html) contains more examples.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "data",
-        "mark"
-      ],
-      "type": "object"
-    },
-    "TopoDataFormat": {
-      "additionalProperties": false,
-      "properties": {
-        "feature": {
-          "description": "The name of the TopoJSON object set to convert to a GeoJSON feature collection.\nFor example, in a map of the world, there may be an object set named `\"countries\"`.\nUsing the feature property, we can extract this set and generate a GeoJSON feature object for each country.",
-          "type": "string"
-        },
-        "mesh": {
-          "description": "The name of the TopoJSON object set to convert to mesh.\nSimilar to the `feature` option, `mesh` extracts a named TopoJSON object set.\n  Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features.\nExtracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.",
-          "type": "string"
-        },
-        "parse": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Parse"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data.\nAlternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)).\nFor example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse).\nFor Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
-        },
-        "type": {
-          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL.\nIf no extension is detected, `\"json\"` will be used by default.",
-          "enum": [
-            "topojson"
-          ],
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Transform": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/AggregateTransform"
-        },
-        {
-          "$ref": "#/definitions/BinTransform"
-        },
-        {
-          "$ref": "#/definitions/CalculateTransform"
-        },
-        {
-          "$ref": "#/definitions/FilterTransform"
-        },
-        {
-          "$ref": "#/definitions/FlattenTransform"
-        },
-        {
-          "$ref": "#/definitions/FoldTransform"
-        },
-        {
-          "$ref": "#/definitions/ImputeTransform"
-        },
-        {
-          "$ref": "#/definitions/JoinAggregateTransform"
-        },
-        {
-          "$ref": "#/definitions/LookupTransform"
-        },
-        {
-          "$ref": "#/definitions/TimeUnitTransform"
-        },
-        {
-          "$ref": "#/definitions/SampleTransform"
-        },
-        {
-          "$ref": "#/definitions/StackTransform"
-        },
-        {
-          "$ref": "#/definitions/WindowTransform"
-        }
-      ]
-    },
-    "TypeForShape": {
-      "enum": [
-        "nominal",
-        "ordinal",
-        "geojson"
-      ],
-      "type": "string"
-    },
-    "TypedFieldDef": {
-      "additionalProperties": false,
-      "description": "Definition object for a data field, its type and transformation of an encoding channel.",
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field\n(e.g., `mean`, `sum`, `median`, `min`, `max`, `count`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "enum": [
-                "binned"
-              ],
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value\nor an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__\n1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`).\nIf field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`).\nSee more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html).\n2) `field` is not required if `aggregate` is `count`."
-        },
-        "timeUnit": {
-          "$ref": "#/definitions/TimeUnit",
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field.\nor [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`).  If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`).  Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used.",
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The encoded field's type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`).\nIt can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\n\n__Note:__\n\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- Data `type` describes the semantics of the data rather than the primitive data types (`number`, `string`, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\", \"type\": \"quantitative\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "UnitSpec": {
-      "$ref": "#/definitions/GenericUnitSpec<Encoding,AnyMark>",
-      "description": "A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types)."
-    },
-    "UrlData": {
-      "additionalProperties": false,
-      "properties": {
-        "format": {
-          "$ref": "#/definitions/DataFormat",
-          "description": "An object that specifies the format for parsing the data."
-        },
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
-        },
-        "url": {
-          "description": "An URL from which to load the data set. Use the `format.type` property\nto ensure the loaded data is correctly parsed.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "url"
-      ],
-      "type": "object"
-    },
-    "UtcMultiTimeUnit": {
-      "enum": [
-        "utcyearquarter",
-        "utcyearquartermonth",
-        "utcyearmonth",
-        "utcyearmonthdate",
-        "utcyearmonthdatehours",
-        "utcyearmonthdatehoursminutes",
-        "utcyearmonthdatehoursminutesseconds",
-        "utcquartermonth",
-        "utcmonthdate",
-        "utcmonthdatehours",
-        "utchoursminutes",
-        "utchoursminutesseconds",
-        "utcminutesseconds",
-        "utcsecondsmilliseconds"
-      ],
-      "type": "string"
-    },
-    "UtcSingleTimeUnit": {
-      "enum": [
-        "utcyear",
-        "utcquarter",
-        "utcmonth",
-        "utcday",
-        "utcdate",
-        "utchours",
-        "utcminutes",
-        "utcseconds",
-        "utcmilliseconds"
-      ],
-      "type": "string"
-    },
-    "Value": {
-      "type": [
-        "number",
-        "string",
-        "boolean",
-        "null"
-      ]
-    },
-    "YValueDef": {
-      "additionalProperties": false,
-      "description": "Definition object for a constant value of an encoding channel.",
-      "properties": {
-        "value": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "height"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "value"
-      ],
-      "type": "object"
-    },
-    "XValueDef": {
-      "additionalProperties": false,
-      "description": "Definition object for a constant value of an encoding channel.",
-      "properties": {
-        "value": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "enum": [
-                "width"
-              ],
-              "type": "string"
-            }
-          ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "value"
-      ],
-      "type": "object"
-    },
-    "NumberValueDef": {
-      "additionalProperties": false,
-      "description": "Definition object for a constant value of an encoding channel.",
-      "properties": {
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": "number"
-        }
-      },
-      "required": [
-        "value"
-      ],
-      "type": "object"
-    },
-    "ValueDefWithCondition<MarkPropFieldDef,(string|null)>": {
-      "additionalProperties": false,
-      "description": "A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are optional.\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n}",
-      "minProperties": 1,
-      "properties": {
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalMarkPropFieldDef"
-            },
-            {
-              "$ref": "#/definitions/ConditionalStringValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalStringValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": [
-            "string",
-            "null"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "ValueDefWithCondition<MarkPropFieldDef,number>": {
-      "additionalProperties": false,
-      "description": "A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are optional.\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n}",
-      "minProperties": 1,
-      "properties": {
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalMarkPropFieldDef"
-            },
-            {
-              "$ref": "#/definitions/ConditionalNumberValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalNumberValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "ValueDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>": {
-      "additionalProperties": false,
-      "description": "A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are optional.\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n}",
-      "minProperties": 1,
-      "properties": {
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalMarkPropFieldDef<TypeForShape>"
-            },
-            {
-              "$ref": "#/definitions/ConditionalStringValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalStringValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity).",
-          "type": [
-            "string",
-            "null"
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "ValueDefWithCondition<TextFieldDef,Value>": {
-      "additionalProperties": false,
-      "description": "A ValueDef with Condition<ValueDef | FieldDef> where either the condition or the value are optional.\n{\n   condition: {field: ...} | {value: ...},\n   value: ...,\n}",
-      "minProperties": 1,
-      "properties": {
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalTextFieldDef"
-            },
-            {
-              "$ref": "#/definitions/ConditionalValueDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
-        },
-        "value": {
-          "$ref": "#/definitions/Value",
-          "description": "A constant value in visual domain (e.g., `\"red\"` / \"#0099ff\" for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "type": "object"
-    },
-    "ViewBackground": {
-      "additionalProperties": false,
-      "properties": {
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "fill": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The fill color.\n\n__Default value:__ `undefined`"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "style": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A string or array of strings indicating the name of custom styles to apply to the view background. A style is a named collection of mark property defaults defined within the [style configuration](https://vega.github.io/vega-lite/docs/mark.html#style-config). If style is an array, later styles will override earlier styles.\n\n__Default value:__ `\"cell\"`\n__Note:__ Any specified view background properties will augment the default style."
-        }
-      },
-      "type": "object"
-    },
-    "ViewConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "clip": {
-          "description": "Whether the view should be clipped.",
-          "type": "boolean"
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangle corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "fill": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The fill color.\n\n__Default value:__ `undefined`"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "height": {
-          "description": "The default height of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) y-scale with `rangeStep` = `null`.\n\n__Default value:__ `200`",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "stroke": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The stroke color.\n\n__Default value:__ `\"#ddd\"`"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"square\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "width": {
-          "description": "The default width of the single plot or each plot in a trellis plot when the visualization has a continuous (non-ordinal) x-scale or ordinal x-scale with `rangeStep` = `null`.\n\n__Default value:__ `200`",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "WindowFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The output name for the window operation."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field for which to compute the aggregate or window function. This can be omitted for window functions that do not operate over a field such as `count`, `rank`, `dense_rank`."
-        },
-        "op": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AggregateOp"
-            },
-            {
-              "$ref": "#/definitions/WindowOnlyOp"
-            }
-          ],
-          "description": "The window or aggregation operation to apply within a window (e.g.,`rank`, `lead`, `sum`, `average` or `count`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/window.html#ops)."
-        },
-        "param": {
-          "description": "Parameter values for the window functions. Parameter values can be omitted for operations that do not accept a parameter.\n\nSee the list of all supported operations and their parameters [here](https://vega.github.io/vega-lite/docs/transforms/window.html).",
-          "type": "number"
-        }
-      },
-      "required": [
-        "op",
-        "as"
-      ],
-      "type": "object"
-    },
-    "WindowOnlyOp": {
-      "enum": [
-        "row_number",
-        "rank",
-        "dense_rank",
-        "percent_rank",
-        "cume_dist",
-        "ntile",
-        "lag",
-        "lead",
-        "first_value",
-        "last_value",
-        "nth_value"
-      ],
-      "type": "string"
-    },
-    "WindowTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "frame": {
-          "description": "A frame specification as a two-element array indicating how the sliding window should proceed. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. The default value is `[null, 0]`, indicating that the sliding window includes the current object and all preceding objects. The value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object. Finally, `[null, null]` indicates that the window frame should always include all data objects. If you this frame and want to assign the same value to add objects, you can use the simpler [join aggregate transform](https://vega.github.io/vega-lite/docs/joinaggregate.html). The only operators affected are the aggregation operations and the `first_value`, `last_value`, and `nth_value` window operations. The other window operations are not affected by this.\n\n__Default value:__:  `[null, 0]` (includes the current object and all preceding objects)",
-          "items": {
-            "type": [
-              "null",
-              "number"
-            ]
-          },
-          "type": "array"
-        },
-        "groupby": {
-          "description": "The data fields for partitioning the data objects into separate windows. If unspecified, all data points will be in a single window.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "ignorePeers": {
-          "description": "Indicates if the sliding window frame should ignore peer values (data that are considered identical by the sort criteria). The default is false, causing the window frame to expand to include all peer values. If set to true, the window frame will be defined by offset values only. This setting only affects those operations that depend on the window frame, namely aggregation operations and the first_value, last_value, and nth_value window operations.\n\n__Default value:__ `false`",
-          "type": "boolean"
-        },
-        "sort": {
-          "description": "A sort field definition for sorting data objects within a window. If two data objects are considered equal by the comparator, they are considered “peer” values of equal rank. If sort is not specified, the order is undefined: data objects are processed in the order they are observed and none are considered peers (the ignorePeers parameter is ignored and treated as if set to `true`).",
-          "items": {
-            "$ref": "#/definitions/SortField"
-          },
-          "type": "array"
-        },
-        "window": {
-          "description": "The definition of the fields in the window, and what calculations to use.",
-          "items": {
-            "$ref": "#/definitions/WindowFieldDef"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "window"
-      ],
-      "type": "object"
-    }
-  }
-}
\ No newline at end of file
diff --git a/altair/vegalite/v3/tests/__init__.py b/altair/vegalite/v3/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/altair/vegalite/v3/tests/test_api.py b/altair/vegalite/v3/tests/test_api.py
deleted file mode 100644
index 489d8cf..0000000
--- a/altair/vegalite/v3/tests/test_api.py
+++ /dev/null
@@ -1,937 +0,0 @@
-"""Unit tests for altair API"""
-
-import io
-import json
-import operator
-import os
-import tempfile
-
-import jsonschema
-import pytest
-import pandas as pd
-
-import altair.vegalite.v3 as alt
-from altair.utils import AltairDeprecationWarning
-
-try:
-    import altair_saver  # noqa: F401
-except ImportError:
-    altair_saver = None
-
-
-def getargs(*args, **kwargs):
-    return args, kwargs
-
-
-OP_DICT = {
-    "layer": operator.add,
-    "hconcat": operator.or_,
-    "vconcat": operator.and_,
-}
-
-
-def _make_chart_type(chart_type):
-    data = pd.DataFrame(
-        {
-            "x": [28, 55, 43, 91, 81, 53, 19, 87],
-            "y": [43, 91, 81, 53, 19, 87, 52, 28],
-            "color": list("AAAABBBB"),
-        }
-    )
-    base = (
-        alt.Chart(data)
-        .mark_point()
-        .encode(
-            x="x",
-            y="y",
-            color="color",
-        )
-    )
-
-    if chart_type in ["layer", "hconcat", "vconcat", "concat"]:
-        func = getattr(alt, chart_type)
-        return func(base.mark_square(), base.mark_circle())
-    elif chart_type == "facet":
-        return base.facet("color")
-    elif chart_type == "facet_encoding":
-        return base.encode(facet="color")
-    elif chart_type == "repeat":
-        return base.encode(alt.X(alt.repeat(), type="quantitative")).repeat(["x", "y"])
-    elif chart_type == "chart":
-        return base
-    else:
-        raise ValueError("chart_type='{}' is not recognized".format(chart_type))
-
-
-@pytest.fixture
-def basic_chart():
-    data = pd.DataFrame(
-        {
-            "a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"],
-            "b": [28, 55, 43, 91, 81, 53, 19, 87, 52],
-        }
-    )
-
-    return alt.Chart(data).mark_bar().encode(x="a", y="b")
-
-
-def test_chart_data_types():
-    def Chart(data):
-        return alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q")
-
-    # Url Data
-    data = "/path/to/my/data.csv"
-    dct = Chart(data).to_dict()
-    assert dct["data"] == {"url": data}
-
-    # Dict Data
-    data = {"values": [{"x": 1, "y": 2}, {"x": 2, "y": 3}]}
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        dct = Chart(data).to_dict()
-    assert dct["data"] == data
-
-    with alt.data_transformers.enable(consolidate_datasets=True):
-        dct = Chart(data).to_dict()
-    name = dct["data"]["name"]
-    assert dct["datasets"][name] == data["values"]
-
-    # DataFrame data
-    data = pd.DataFrame({"x": range(5), "y": range(5)})
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        dct = Chart(data).to_dict()
-    assert dct["data"]["values"] == data.to_dict(orient="records")
-
-    with alt.data_transformers.enable(consolidate_datasets=True):
-        dct = Chart(data).to_dict()
-    name = dct["data"]["name"]
-    assert dct["datasets"][name] == data.to_dict(orient="records")
-
-    # Named data object
-    data = alt.NamedData(name="Foo")
-    dct = Chart(data).to_dict()
-    assert dct["data"] == {"name": "Foo"}
-
-
-def test_chart_infer_types():
-    data = pd.DataFrame(
-        {
-            "x": pd.date_range("2012", periods=10, freq="Y"),
-            "y": range(10),
-            "c": list("abcabcabca"),
-        }
-    )
-
-    def _check_encodings(chart):
-        dct = chart.to_dict()
-        assert dct["encoding"]["x"]["type"] == "temporal"
-        assert dct["encoding"]["x"]["field"] == "x"
-        assert dct["encoding"]["y"]["type"] == "quantitative"
-        assert dct["encoding"]["y"]["field"] == "y"
-        assert dct["encoding"]["color"]["type"] == "nominal"
-        assert dct["encoding"]["color"]["field"] == "c"
-
-    # Pass field names by keyword
-    chart = alt.Chart(data).mark_point().encode(x="x", y="y", color="c")
-    _check_encodings(chart)
-
-    # pass Channel objects by keyword
-    chart = (
-        alt.Chart(data)
-        .mark_point()
-        .encode(x=alt.X("x"), y=alt.Y("y"), color=alt.Color("c"))
-    )
-    _check_encodings(chart)
-
-    # pass Channel objects by value
-    chart = alt.Chart(data).mark_point().encode(alt.X("x"), alt.Y("y"), alt.Color("c"))
-    _check_encodings(chart)
-
-    # override default types
-    chart = (
-        alt.Chart(data)
-        .mark_point()
-        .encode(alt.X("x", type="nominal"), alt.Y("y", type="ordinal"))
-    )
-    dct = chart.to_dict()
-    assert dct["encoding"]["x"]["type"] == "nominal"
-    assert dct["encoding"]["y"]["type"] == "ordinal"
-
-
-@pytest.mark.parametrize(
-    "args, kwargs",
-    [
-        getargs(detail=["value:Q", "name:N"], tooltip=["value:Q", "name:N"]),
-        getargs(detail=["value", "name"], tooltip=["value", "name"]),
-        getargs(alt.Detail(["value:Q", "name:N"]), alt.Tooltip(["value:Q", "name:N"])),
-        getargs(alt.Detail(["value", "name"]), alt.Tooltip(["value", "name"])),
-        getargs(
-            [alt.Detail("value:Q"), alt.Detail("name:N")],
-            [alt.Tooltip("value:Q"), alt.Tooltip("name:N")],
-        ),
-        getargs(
-            [alt.Detail("value"), alt.Detail("name")],
-            [alt.Tooltip("value"), alt.Tooltip("name")],
-        ),
-    ],
-)
-def test_multiple_encodings(args, kwargs):
-    df = pd.DataFrame({"value": [1, 2, 3], "name": ["A", "B", "C"]})
-    encoding_dct = [
-        {"field": "value", "type": "quantitative"},
-        {"field": "name", "type": "nominal"},
-    ]
-    chart = alt.Chart(df).mark_point().encode(*args, **kwargs)
-    dct = chart.to_dict()
-    assert dct["encoding"]["detail"] == encoding_dct
-    assert dct["encoding"]["tooltip"] == encoding_dct
-
-
-def test_chart_operations():
-    data = pd.DataFrame(
-        {
-            "x": pd.date_range("2012", periods=10, freq="Y"),
-            "y": range(10),
-            "c": list("abcabcabca"),
-        }
-    )
-    chart1 = alt.Chart(data).mark_line().encode(x="x", y="y", color="c")
-    chart2 = chart1.mark_point()
-    chart3 = chart1.mark_circle()
-    chart4 = chart1.mark_square()
-
-    chart = chart1 + chart2 + chart3
-    assert isinstance(chart, alt.LayerChart)
-    assert len(chart.layer) == 3
-    chart += chart4
-    assert len(chart.layer) == 4
-
-    chart = chart1 | chart2 | chart3
-    assert isinstance(chart, alt.HConcatChart)
-    assert len(chart.hconcat) == 3
-    chart |= chart4
-    assert len(chart.hconcat) == 4
-
-    chart = chart1 & chart2 & chart3
-    assert isinstance(chart, alt.VConcatChart)
-    assert len(chart.vconcat) == 3
-    chart &= chart4
-    assert len(chart.vconcat) == 4
-
-
-def test_selection_to_dict():
-    brush = alt.selection(type="interval")
-
-    # test some value selections
-    # Note: X and Y cannot have conditions
-    alt.Chart("path/to/data.json").mark_point().encode(
-        color=alt.condition(brush, alt.ColorValue("red"), alt.ColorValue("blue")),
-        opacity=alt.condition(brush, alt.value(0.5), alt.value(1.0)),
-        text=alt.condition(brush, alt.TextValue("foo"), alt.value("bar")),
-    ).to_dict()
-
-    # test some field selections
-    # Note: X and Y cannot have conditions
-    # Conditions cannot both be fields
-    alt.Chart("path/to/data.json").mark_point().encode(
-        color=alt.condition(brush, alt.Color("col1:N"), alt.value("blue")),
-        opacity=alt.condition(brush, "col1:N", alt.value(0.5)),
-        text=alt.condition(brush, alt.value("abc"), alt.Text("col2:N")),
-        size=alt.condition(brush, alt.value(20), "col2:N"),
-    ).to_dict()
-
-
-def test_selection_expression():
-    selection = alt.selection_single(fields=["value"])
-
-    assert isinstance(selection.value, alt.expr.Expression)
-    assert selection.value.to_dict() == "{0}.value".format(selection.name)
-
-    assert isinstance(selection["value"], alt.expr.Expression)
-    assert selection["value"].to_dict() == "{0}['value']".format(selection.name)
-
-    with pytest.raises(AttributeError):
-        selection.__magic__
-
-
-@pytest.mark.parametrize("format", ["html", "json", "png", "svg", "pdf"])
-def test_save(format, basic_chart):
-    if format in ["pdf", "png"]:
-        out = io.BytesIO()
-        mode = "rb"
-    else:
-        out = io.StringIO()
-        mode = "r"
-
-    if format in ["svg", "png", "pdf"]:
-        if not altair_saver:
-            with pytest.raises(ValueError) as err:
-                basic_chart.save(out, format=format)
-            assert "github.com/altair-viz/altair_saver" in str(err.value)
-            return
-        elif format not in altair_saver.available_formats():
-            with pytest.raises(ValueError) as err:
-                basic_chart.save(out, format=format)
-            assert f"No enabled saver found that supports format='{format}'" in str(
-                err.value
-            )
-            return
-
-    basic_chart.save(out, format=format)
-    out.seek(0)
-    content = out.read()
-
-    if format == "json":
-        assert "$schema" in json.loads(content)
-    if format == "html":
-        assert content.startswith("<!DOCTYPE html>")
-
-    fid, filename = tempfile.mkstemp(suffix="." + format)
-    os.close(fid)
-
-    try:
-        basic_chart.save(filename)
-        with open(filename, mode) as f:
-            assert f.read()[:1000] == content[:1000]
-    finally:
-        os.remove(filename)
-
-
-def test_facet_basic():
-    # wrapped facet
-    chart1 = (
-        alt.Chart("data.csv")
-        .mark_point()
-        .encode(
-            x="x:Q",
-            y="y:Q",
-        )
-        .facet("category:N", columns=2)
-    )
-
-    dct1 = chart1.to_dict()
-
-    assert dct1["facet"] == alt.Facet("category:N").to_dict()
-    assert dct1["columns"] == 2
-    assert dct1["data"] == alt.UrlData("data.csv").to_dict()
-
-    # explicit row/col facet
-    chart2 = (
-        alt.Chart("data.csv")
-        .mark_point()
-        .encode(
-            x="x:Q",
-            y="y:Q",
-        )
-        .facet(row="category1:Q", column="category2:Q")
-    )
-
-    dct2 = chart2.to_dict()
-
-    assert dct2["facet"]["row"] == alt.Facet("category1:Q").to_dict()
-    assert dct2["facet"]["column"] == alt.Facet("category2:Q").to_dict()
-    assert "columns" not in dct2
-    assert dct2["data"] == alt.UrlData("data.csv").to_dict()
-
-
-def test_facet_parse():
-    chart = (
-        alt.Chart("data.csv")
-        .mark_point()
-        .encode(x="x:Q", y="y:Q")
-        .facet(row="row:N", column="column:O")
-    )
-    dct = chart.to_dict()
-    assert dct["data"] == {"url": "data.csv"}
-    assert "data" not in dct["spec"]
-    assert dct["facet"] == {
-        "column": {"field": "column", "type": "ordinal"},
-        "row": {"field": "row", "type": "nominal"},
-    }
-
-
-def test_facet_parse_data():
-    data = pd.DataFrame({"x": range(5), "y": range(5), "row": list("abcab")})
-    chart = (
-        alt.Chart(data)
-        .mark_point()
-        .encode(x="x", y="y:O")
-        .facet(row="row", column="column:O")
-    )
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        dct = chart.to_dict()
-    assert "values" in dct["data"]
-    assert "data" not in dct["spec"]
-    assert dct["facet"] == {
-        "column": {"field": "column", "type": "ordinal"},
-        "row": {"field": "row", "type": "nominal"},
-    }
-
-    with alt.data_transformers.enable(consolidate_datasets=True):
-        dct = chart.to_dict()
-    assert "datasets" in dct
-    assert "name" in dct["data"]
-    assert "data" not in dct["spec"]
-    assert dct["facet"] == {
-        "column": {"field": "column", "type": "ordinal"},
-        "row": {"field": "row", "type": "nominal"},
-    }
-
-
-def test_selection():
-    # test instantiation of selections
-    interval = alt.selection_interval(name="selec_1")
-    assert interval.selection.type == "interval"
-    assert interval.name == "selec_1"
-
-    single = alt.selection_single(name="selec_2")
-    assert single.selection.type == "single"
-    assert single.name == "selec_2"
-
-    multi = alt.selection_multi(name="selec_3")
-    assert multi.selection.type == "multi"
-    assert multi.name == "selec_3"
-
-    # test adding to chart
-    chart = alt.Chart().add_selection(single)
-    chart = chart.add_selection(multi, interval)
-    assert set(chart.selection.keys()) == {"selec_1", "selec_2", "selec_3"}
-
-    # test logical operations
-    assert isinstance(single & multi, alt.Selection)
-    assert isinstance(single | multi, alt.Selection)
-    assert isinstance(~single, alt.Selection)
-    assert isinstance((single & multi)[0].group, alt.SelectionAnd)
-    assert isinstance((single | multi)[0].group, alt.SelectionOr)
-    assert isinstance((~single)[0].group, alt.SelectionNot)
-
-    # test that default names increment (regression for #1454)
-    sel1 = alt.selection_single()
-    sel2 = alt.selection_multi()
-    sel3 = alt.selection_interval()
-    names = {s.name for s in (sel1, sel2, sel3)}
-    assert len(names) == 3
-
-
-def test_transforms():
-    # aggregate transform
-    agg1 = alt.AggregatedFieldDef(**{"as": "x1", "op": "mean", "field": "y"})
-    agg2 = alt.AggregatedFieldDef(**{"as": "x2", "op": "median", "field": "z"})
-    chart = alt.Chart().transform_aggregate([agg1], ["foo"], x2="median(z)")
-    kwds = dict(aggregate=[agg1, agg2], groupby=["foo"])
-    assert chart.transform == [alt.AggregateTransform(**kwds)]
-
-    # bin transform
-    chart = alt.Chart().transform_bin("binned", field="field", bin=True)
-    kwds = {"as": "binned", "field": "field", "bin": True}
-    assert chart.transform == [alt.BinTransform(**kwds)]
-
-    # calcualte transform
-    chart = alt.Chart().transform_calculate("calc", "datum.a * 4")
-    kwds = {"as": "calc", "calculate": "datum.a * 4"}
-    assert chart.transform == [alt.CalculateTransform(**kwds)]
-
-    # impute transform
-    chart = alt.Chart().transform_impute("field", "key", groupby=["x"])
-    kwds = {"impute": "field", "key": "key", "groupby": ["x"]}
-    assert chart.transform == [alt.ImputeTransform(**kwds)]
-
-    # joinaggregate transform
-    chart = alt.Chart().transform_joinaggregate(min="min(x)", groupby=["key"])
-    kwds = {
-        "joinaggregate": [
-            alt.JoinAggregateFieldDef(field="x", op="min", **{"as": "min"})
-        ],
-        "groupby": ["key"],
-    }
-    assert chart.transform == [alt.JoinAggregateTransform(**kwds)]
-
-    # filter transform
-    chart = alt.Chart().transform_filter("datum.a < 4")
-    assert chart.transform == [alt.FilterTransform(filter="datum.a < 4")]
-
-    # flatten transform
-    chart = alt.Chart().transform_flatten(["A", "B"], ["X", "Y"])
-    kwds = {"as": ["X", "Y"], "flatten": ["A", "B"]}
-    assert chart.transform == [alt.FlattenTransform(**kwds)]
-
-    # fold transform
-    chart = alt.Chart().transform_fold(["A", "B", "C"], as_=["key", "val"])
-    kwds = {"as": ["key", "val"], "fold": ["A", "B", "C"]}
-    assert chart.transform == [alt.FoldTransform(**kwds)]
-
-    # lookup transform
-    lookup_data = alt.LookupData(alt.UrlData("foo.csv"), "id", ["rate"])
-    chart = alt.Chart().transform_lookup(
-        from_=lookup_data, as_="a", lookup="a", default="b"
-    )
-    kwds = {"from": lookup_data, "as": "a", "lookup": "a", "default": "b"}
-    assert chart.transform == [alt.LookupTransform(**kwds)]
-
-    # sample transform
-    chart = alt.Chart().transform_sample()
-    assert chart.transform == [alt.SampleTransform(1000)]
-
-    # stack transform
-    chart = alt.Chart().transform_stack("stacked", "x", groupby=["y"])
-    assert chart.transform == [
-        alt.StackTransform(stack="x", groupby=["y"], **{"as": "stacked"})
-    ]
-
-    # timeUnit transform
-    chart = alt.Chart().transform_timeunit("foo", field="x", timeUnit="date")
-    kwds = {"as": "foo", "field": "x", "timeUnit": "date"}
-    assert chart.transform == [alt.TimeUnitTransform(**kwds)]
-
-    # window transform
-    chart = alt.Chart().transform_window(xsum="sum(x)", ymin="min(y)", frame=[None, 0])
-    window = [
-        alt.WindowFieldDef(**{"as": "xsum", "field": "x", "op": "sum"}),
-        alt.WindowFieldDef(**{"as": "ymin", "field": "y", "op": "min"}),
-    ]
-
-    # kwargs don't maintain order in Python < 3.6, so window list can
-    # be reversed
-    assert chart.transform == [
-        alt.WindowTransform(frame=[None, 0], window=window)
-    ] or chart.transform == [alt.WindowTransform(frame=[None, 0], window=window[::-1])]
-
-
-def test_filter_transform_selection_predicates():
-    selector1 = alt.selection_interval(name="s1")
-    selector2 = alt.selection_interval(name="s2")
-    base = alt.Chart("data.txt").mark_point()
-
-    chart = base.transform_filter(selector1)
-    assert chart.to_dict()["transform"] == [{"filter": {"selection": "s1"}}]
-
-    chart = base.transform_filter(~selector1)
-    assert chart.to_dict()["transform"] == [{"filter": {"selection": {"not": "s1"}}}]
-
-    chart = base.transform_filter(selector1 & selector2)
-    assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"and": ["s1", "s2"]}}}
-    ]
-
-    chart = base.transform_filter(selector1 | selector2)
-    assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"or": ["s1", "s2"]}}}
-    ]
-
-    chart = base.transform_filter(selector1 | ~selector2)
-    assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"or": ["s1", {"not": "s2"}]}}}
-    ]
-
-    chart = base.transform_filter(~selector1 | ~selector2)
-    assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"or": [{"not": "s1"}, {"not": "s2"}]}}}
-    ]
-
-    chart = base.transform_filter(~(selector1 & selector2))
-    assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"not": {"and": ["s1", "s2"]}}}}
-    ]
-
-
-def test_resolve_methods():
-    chart = alt.LayerChart().resolve_axis(x="shared", y="independent")
-    assert chart.resolve == alt.Resolve(
-        axis=alt.AxisResolveMap(x="shared", y="independent")
-    )
-
-    chart = alt.LayerChart().resolve_legend(color="shared", fill="independent")
-    assert chart.resolve == alt.Resolve(
-        legend=alt.LegendResolveMap(color="shared", fill="independent")
-    )
-
-    chart = alt.LayerChart().resolve_scale(x="shared", y="independent")
-    assert chart.resolve == alt.Resolve(
-        scale=alt.ScaleResolveMap(x="shared", y="independent")
-    )
-
-
-def test_layer_encodings():
-    chart = alt.LayerChart().encode(x="column:Q")
-    assert chart.encoding.x == alt.X(shorthand="column:Q")
-
-
-def test_add_selection():
-    selections = [
-        alt.selection_interval(),
-        alt.selection_single(),
-        alt.selection_multi(),
-    ]
-    chart = (
-        alt.Chart()
-        .mark_point()
-        .add_selection(selections[0])
-        .add_selection(selections[1], selections[2])
-    )
-    expected = {s.name: s.selection for s in selections}
-    assert chart.selection == expected
-
-
-def test_repeat_add_selections():
-    base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = base.add_selection(selection).repeat(list("ABC"))
-    chart2 = base.repeat(list("ABC")).add_selection(selection)
-    assert chart1.to_dict() == chart2.to_dict()
-
-
-def test_facet_add_selections():
-    base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = base.add_selection(selection).facet("val:Q")
-    chart2 = base.facet("val:Q").add_selection(selection)
-    assert chart1.to_dict() == chart2.to_dict()
-
-
-def test_layer_add_selection():
-    base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = alt.layer(base.add_selection(selection), base)
-    chart2 = alt.layer(base, base).add_selection(selection)
-    assert chart1.to_dict() == chart2.to_dict()
-
-
-@pytest.mark.parametrize("charttype", [alt.concat, alt.hconcat, alt.vconcat])
-def test_compound_add_selections(charttype):
-    base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = charttype(base.add_selection(selection), base.add_selection(selection))
-    chart2 = charttype(base, base).add_selection(selection)
-    assert chart1.to_dict() == chart2.to_dict()
-
-
-def test_selection_property():
-    sel = alt.selection_interval()
-    chart = alt.Chart("data.csv").mark_point().properties(selection=sel)
-
-    assert list(chart["selection"].keys()) == [sel.name]
-
-
-def test_LookupData():
-    df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
-    lookup = alt.LookupData(data=df, key="x")
-
-    dct = lookup.to_dict()
-    assert dct["key"] == "x"
-    assert dct["data"] == {
-        "values": [{"x": 1, "y": 4}, {"x": 2, "y": 5}, {"x": 3, "y": 6}]
-    }
-
-
-def test_themes():
-    chart = alt.Chart("foo.txt").mark_point()
-    active = alt.themes.active
-
-    try:
-        alt.themes.enable("default")
-        assert chart.to_dict()["config"] == {
-            "mark": {"tooltip": None},
-            "view": {"width": 400, "height": 300},
-        }
-
-        alt.themes.enable("opaque")
-        assert chart.to_dict()["config"] == {
-            "background": "white",
-            "mark": {"tooltip": None},
-            "view": {"width": 400, "height": 300},
-        }
-
-        alt.themes.enable("none")
-        assert "config" not in chart.to_dict()
-
-    finally:
-        # re-enable the original active theme
-        alt.themes.enable(active)
-
-
-def test_chart_from_dict():
-    base = alt.Chart("data.csv").mark_point().encode(x="x:Q", y="y:Q")
-
-    charts = [
-        base,
-        base + base,
-        base | base,
-        base & base,
-        base.facet("c:N"),
-        (base + base).facet(row="c:N", data="data.csv"),
-        base.repeat(["c", "d"]),
-        (base + base).repeat(row=["c", "d"]),
-    ]
-
-    for chart in charts:
-        print(chart)
-        chart_out = alt.Chart.from_dict(chart.to_dict())
-        assert type(chart_out) is type(chart)
-
-    # test that an invalid spec leads to a schema validation error
-    with pytest.raises(jsonschema.ValidationError):
-        alt.Chart.from_dict({"invalid": "spec"})
-
-
-def test_consolidate_datasets(basic_chart):
-    subchart1 = basic_chart
-    subchart2 = basic_chart.copy()
-    subchart2.data = basic_chart.data.copy()
-    chart = subchart1 | subchart2
-
-    with alt.data_transformers.enable(consolidate_datasets=True):
-        dct_consolidated = chart.to_dict()
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        dct_standard = chart.to_dict()
-
-    assert "datasets" in dct_consolidated
-    assert "datasets" not in dct_standard
-
-    datasets = dct_consolidated["datasets"]
-
-    # two dataset copies should be recognized as duplicates
-    assert len(datasets) == 1
-
-    # make sure data matches original & names are correct
-    name, data = datasets.popitem()
-
-    for spec in dct_standard["hconcat"]:
-        assert spec["data"]["values"] == data
-
-    for spec in dct_consolidated["hconcat"]:
-        assert spec["data"] == {"name": name}
-
-
-def test_consolidate_InlineData():
-    data = alt.InlineData(
-        values=[{"a": 1, "b": 1}, {"a": 2, "b": 2}], format={"type": "csv"}
-    )
-    chart = alt.Chart(data).mark_point()
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        dct = chart.to_dict()
-    assert dct["data"]["format"] == data.format
-    assert dct["data"]["values"] == data.values
-
-    with alt.data_transformers.enable(consolidate_datasets=True):
-        dct = chart.to_dict()
-    assert dct["data"]["format"] == data.format
-    assert list(dct["datasets"].values())[0] == data.values
-
-    data = alt.InlineData(values=[], name="runtime_data")
-    chart = alt.Chart(data).mark_point()
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        dct = chart.to_dict()
-    assert dct["data"] == data.to_dict()
-
-    with alt.data_transformers.enable(consolidate_datasets=True):
-        dct = chart.to_dict()
-    assert dct["data"] == data.to_dict()
-
-
-def test_deprecated_encodings():
-    base = alt.Chart("data.txt").mark_point()
-
-    with pytest.warns(AltairDeprecationWarning) as record:
-        chart1 = base.encode(strokeOpacity=alt.Strokeopacity("x:Q")).to_dict()
-    assert "alt.StrokeOpacity" in record[0].message.args[0]
-    chart2 = base.encode(strokeOpacity=alt.StrokeOpacity("x:Q")).to_dict()
-
-    assert chart1 == chart2
-
-
-def test_repeat():
-    # wrapped repeat
-    chart1 = (
-        alt.Chart("data.csv")
-        .mark_point()
-        .encode(
-            x=alt.X(alt.repeat(), type="quantitative"),
-            y="y:Q",
-        )
-        .repeat(["A", "B", "C", "D"], columns=2)
-    )
-
-    dct1 = chart1.to_dict()
-
-    assert dct1["repeat"] == ["A", "B", "C", "D"]
-    assert dct1["columns"] == 2
-    assert dct1["spec"]["encoding"]["x"]["field"] == {"repeat": "repeat"}
-
-    # explicit row/col repeat
-    chart2 = (
-        alt.Chart("data.csv")
-        .mark_point()
-        .encode(
-            x=alt.X(alt.repeat("row"), type="quantitative"),
-            y=alt.Y(alt.repeat("column"), type="quantitative"),
-        )
-        .repeat(row=["A", "B", "C"], column=["C", "B", "A"])
-    )
-
-    dct2 = chart2.to_dict()
-
-    assert dct2["repeat"] == {"row": ["A", "B", "C"], "column": ["C", "B", "A"]}
-    assert "columns" not in dct2
-    assert dct2["spec"]["encoding"]["x"]["field"] == {"repeat": "row"}
-    assert dct2["spec"]["encoding"]["y"]["field"] == {"repeat": "column"}
-
-
-def test_data_property():
-    data = pd.DataFrame({"x": [1, 2, 3], "y": list("ABC")})
-    chart1 = alt.Chart(data).mark_point()
-    chart2 = alt.Chart().mark_point().properties(data=data)
-
-    assert chart1.to_dict() == chart2.to_dict()
-
-
-@pytest.mark.parametrize("method", ["layer", "hconcat", "vconcat", "concat"])
-@pytest.mark.parametrize(
-    "data", ["data.json", pd.DataFrame({"x": range(3), "y": list("abc")})]
-)
-def test_subcharts_with_same_data(method, data):
-    func = getattr(alt, method)
-
-    point = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q")
-    line = point.mark_line()
-    text = point.mark_text()
-
-    chart1 = func(point, line, text)
-    assert chart1.data is not alt.Undefined
-    assert all(c.data is alt.Undefined for c in getattr(chart1, method))
-
-    if method != "concat":
-        op = OP_DICT[method]
-        chart2 = op(op(point, line), text)
-        assert chart2.data is not alt.Undefined
-        assert all(c.data is alt.Undefined for c in getattr(chart2, method))
-
-
-@pytest.mark.parametrize("method", ["layer", "hconcat", "vconcat", "concat"])
-@pytest.mark.parametrize(
-    "data", ["data.json", pd.DataFrame({"x": range(3), "y": list("abc")})]
-)
-def test_subcharts_different_data(method, data):
-    func = getattr(alt, method)
-
-    point = alt.Chart(data).mark_point().encode(x="x:Q", y="y:Q")
-    otherdata = alt.Chart("data.csv").mark_point().encode(x="x:Q", y="y:Q")
-    nodata = alt.Chart().mark_point().encode(x="x:Q", y="y:Q")
-
-    chart1 = func(point, otherdata)
-    assert chart1.data is alt.Undefined
-    assert getattr(chart1, method)[0].data is data
-
-    chart2 = func(point, nodata)
-    assert chart2.data is alt.Undefined
-    assert getattr(chart2, method)[0].data is data
-
-
-def test_layer_facet(basic_chart):
-    chart = (basic_chart + basic_chart).facet(row="row:Q")
-    assert chart.data is not alt.Undefined
-    assert chart.spec.data is alt.Undefined
-    for layer in chart.spec.layer:
-        assert layer.data is alt.Undefined
-
-    dct = chart.to_dict()
-    assert "data" in dct
-
-
-def test_layer_errors():
-    toplevel_chart = alt.Chart("data.txt").mark_point().configure_legend(columns=2)
-
-    facet_chart1 = alt.Chart("data.txt").mark_point().encode(facet="row:Q")
-
-    facet_chart2 = alt.Chart("data.txt").mark_point().facet("row:Q")
-
-    repeat_chart = alt.Chart("data.txt").mark_point().repeat(["A", "B", "C"])
-
-    simple_chart = alt.Chart("data.txt").mark_point()
-
-    with pytest.raises(ValueError) as err:
-        toplevel_chart + simple_chart
-    assert str(err.value).startswith(
-        'Objects with "config" attribute cannot be used within LayerChart.'
-    )
-
-    with pytest.raises(ValueError) as err:
-        repeat_chart + simple_chart
-    assert str(err.value) == "Repeat charts cannot be layered."
-
-    with pytest.raises(ValueError) as err:
-        facet_chart1 + simple_chart
-    assert str(err.value) == "Faceted charts cannot be layered."
-
-    with pytest.raises(ValueError) as err:
-        alt.layer(simple_chart) + facet_chart2
-    assert str(err.value) == "Faceted charts cannot be layered."
-
-
-@pytest.mark.parametrize(
-    "chart_type",
-    ["layer", "hconcat", "vconcat", "concat", "facet", "facet_encoding", "repeat"],
-)
-def test_resolve(chart_type):
-    chart = _make_chart_type(chart_type)
-    chart = (
-        chart.resolve_scale(
-            x="independent",
-        )
-        .resolve_legend(color="independent")
-        .resolve_axis(y="independent")
-    )
-    dct = chart.to_dict()
-    assert dct["resolve"] == {
-        "scale": {"x": "independent"},
-        "legend": {"color": "independent"},
-        "axis": {"y": "independent"},
-    }
-
-
-# TODO: test vconcat, hconcat, concat when schema allows them.
-# This is blocked by https://github.com/vega/vega-lite/issues/5261
-@pytest.mark.parametrize("chart_type", ["chart", "layer", "facet_encoding"])
-@pytest.mark.parametrize("facet_arg", [None, "facet", "row", "column"])
-def test_facet(chart_type, facet_arg):
-    chart = _make_chart_type(chart_type)
-    if facet_arg is None:
-        chart = chart.facet("color:N", columns=2)
-    else:
-        chart = chart.facet(**{facet_arg: "color:N", "columns": 2})
-    dct = chart.to_dict()
-
-    assert "spec" in dct
-    assert dct["columns"] == 2
-    expected = {"field": "color", "type": "nominal"}
-    if facet_arg is None or facet_arg == "facet":
-        assert dct["facet"] == expected
-    else:
-        assert dct["facet"][facet_arg] == expected
-
-
-def test_sequence():
-    data = alt.sequence(100)
-    assert data.to_dict() == {"sequence": {"start": 0, "stop": 100}}
-
-    data = alt.sequence(5, 10)
-    assert data.to_dict() == {"sequence": {"start": 5, "stop": 10}}
-
-    data = alt.sequence(0, 1, 0.1, as_="x")
-    assert data.to_dict() == {
-        "sequence": {"start": 0, "stop": 1, "step": 0.1, "as": "x"}
-    }
-
-
-def test_graticule():
-    data = alt.graticule()
-    assert data.to_dict() == {"graticule": True}
-
-    data = alt.graticule(step=[15, 15])
-    assert data.to_dict() == {"graticule": {"step": [15, 15]}}
-
-
-def test_sphere():
-    data = alt.sphere()
-    assert data.to_dict() == {"sphere": True}
diff --git a/altair/vegalite/v3/tests/test_display.py b/altair/vegalite/v3/tests/test_display.py
deleted file mode 100644
index 9035ead..0000000
--- a/altair/vegalite/v3/tests/test_display.py
+++ /dev/null
@@ -1,69 +0,0 @@
-from contextlib import contextmanager
-
-import pytest
-
-import altair.vegalite.v3 as alt
-
-
-@contextmanager
-def check_render_options(**options):
-    """
-    Context manager that will assert that alt.renderers.options are equivalent
-    to the given options in the IPython.display.display call
-    """
-    import IPython.display
-
-    def check_options(obj):
-        assert alt.renderers.options == options
-
-    _display = IPython.display.display
-    IPython.display.display = check_options
-    try:
-        yield
-    finally:
-        IPython.display.display = _display
-
-
-def test_check_renderer_options():
-    # this test should pass
-    with check_render_options():
-        from IPython.display import display
-
-        display(None)
-
-    # check that an error is appropriately raised if the test fails
-    with pytest.raises(AssertionError):
-        with check_render_options(foo="bar"):
-            from IPython.display import display
-
-            display(None)
-
-
-def test_display_options():
-    chart = alt.Chart("data.csv").mark_point().encode(x="foo:Q")
-
-    # check that there are no options by default
-    with check_render_options():
-        chart.display()
-
-    # check that display options are passed
-    with check_render_options(embed_options={"tooltip": False, "renderer": "canvas"}):
-        chart.display("canvas", tooltip=False)
-
-    # check that above options do not persist
-    with check_render_options():
-        chart.display()
-
-    # check that display options augment rather than overwrite pre-set options
-    with alt.renderers.enable(embed_options={"tooltip": True, "renderer": "svg"}):
-        with check_render_options(embed_options={"tooltip": True, "renderer": "svg"}):
-            chart.display()
-
-        with check_render_options(
-            embed_options={"tooltip": True, "renderer": "canvas"}
-        ):
-            chart.display("canvas")
-
-    # check that above options do not persist
-    with check_render_options():
-        chart.display()
diff --git a/altair/vegalite/v3/tests/test_renderers.py b/altair/vegalite/v3/tests/test_renderers.py
deleted file mode 100644
index ba8b4c9..0000000
--- a/altair/vegalite/v3/tests/test_renderers.py
+++ /dev/null
@@ -1,86 +0,0 @@
-"""Tests of various renderers"""
-
-import json
-import re
-
-import pytest
-
-import altair.vegalite.v3 as alt
-
-
-def _extract_embedOpt(html):
-    """Extract an embedOpt definition from an html string.
-
-    Note: this is very brittle, but works for the specific test in this file.
-    """
-    result = re.search(r"embedOpt\s+=\s+(?P<embedOpt>\{.*?\})", html)
-    if not result:
-        return None
-    else:
-        return json.loads(result.groupdict()["embedOpt"])
-
-
-@pytest.fixture
-def chart():
-    return alt.Chart("data.csv").mark_point()
-
-
-def test_colab_renderer_embed_options(chart):
-    """Test that embed_options in renderer metadata are correctly manifest in html"""
-
-    def assert_actions_true(chart):
-        bundle = chart._repr_mimebundle_(None, None)
-        embedOpt = _extract_embedOpt(bundle["text/html"])
-        assert embedOpt == {"actions": True, "mode": "vega-lite"}
-
-    def assert_actions_false(chart):
-        bundle = chart._repr_mimebundle_(None, None)
-        embedOpt = _extract_embedOpt(bundle["text/html"])
-        assert embedOpt == {"actions": False, "mode": "vega-lite"}
-
-    with alt.renderers.enable("colab", embed_options=dict(actions=False)):
-        assert_actions_false(chart)
-
-    with alt.renderers.enable("colab"):
-        with alt.renderers.enable(embed_options=dict(actions=True)):
-            assert_actions_true(chart)
-
-        with alt.renderers.set_embed_options(actions=False):
-            assert_actions_false(chart)
-
-        with alt.renderers.set_embed_options(actions=True):
-            assert_actions_true(chart)
-
-
-def test_default_renderer_embed_options(chart, renderer="default"):
-    # check that metadata is passed appropriately
-    mimetype = alt.display.VEGALITE_MIME_TYPE
-    spec = chart.to_dict()
-    with alt.renderers.enable(renderer, embed_options=dict(actions=False)):
-        bundle, metadata = chart._repr_mimebundle_(None, None)
-        assert set(bundle.keys()) == {mimetype, "text/plain"}
-        assert bundle[mimetype] == spec
-        assert metadata == {mimetype: {"embed_options": {"actions": False}}}
-
-    # Sanity check: no metadata specified
-    with alt.renderers.enable(renderer):
-        bundle, metadata = chart._repr_mimebundle_(None, None)
-        assert bundle[mimetype] == spec
-        assert metadata == {}
-
-
-def test_json_renderer_embed_options(chart, renderer="json"):
-    """Test that embed_options in renderer metadata are correctly manifest in html"""
-    mimetype = "application/json"
-    spec = chart.to_dict()
-    with alt.renderers.enable("json", option="foo"):
-        bundle, metadata = chart._repr_mimebundle_(None, None)
-        assert set(bundle.keys()) == {mimetype, "text/plain"}
-        assert bundle[mimetype] == spec
-        assert metadata == {mimetype: {"option": "foo"}}
-
-    # Sanity check: no options specified
-    with alt.renderers.enable(renderer):
-        bundle, metadata = chart._repr_mimebundle_(None, None)
-        assert bundle[mimetype] == spec
-        assert metadata == {}
diff --git a/altair/vegalite/v3/tests/test_theme.py b/altair/vegalite/v3/tests/test_theme.py
deleted file mode 100644
index 430c219..0000000
--- a/altair/vegalite/v3/tests/test_theme.py
+++ /dev/null
@@ -1,20 +0,0 @@
-import pytest
-
-import altair.vegalite.v3 as alt
-from altair.vegalite.v3.theme import VEGA_THEMES
-
-
-@pytest.fixture
-def chart():
-    return alt.Chart("data.csv").mark_bar().encode(x="x:Q")
-
-
-def test_vega_themes(chart):
-    for theme in VEGA_THEMES:
-        with alt.themes.enable(theme):
-            dct = chart.to_dict()
-        assert dct["usermeta"] == {"embedOptions": {"theme": theme}}
-        assert dct["config"] == {
-            "view": {"width": 400, "height": 300},
-            "mark": {"tooltip": None},
-        }
diff --git a/altair/vegalite/v3/theme.py b/altair/vegalite/v3/theme.py
deleted file mode 100644
index 91d3764..0000000
--- a/altair/vegalite/v3/theme.py
+++ /dev/null
@@ -1,54 +0,0 @@
-"""Tools for enabling and registering chart themes"""
-
-from ...utils.theme import ThemeRegistry
-
-VEGA_THEMES = ["ggplot2", "quartz", "vox", "fivethirtyeight", "dark", "latimes"]
-
-
-class VegaTheme(object):
-    """Implementation of a builtin vega theme."""
-
-    def __init__(self, theme):
-        self.theme = theme
-
-    def __call__(self):
-        return {
-            "usermeta": {"embedOptions": {"theme": self.theme}},
-            "config": {
-                "view": {"width": 400, "height": 300},
-                "mark": {"tooltip": None},
-            },
-        }
-
-    def __repr__(self):
-        return "VegaTheme({!r})".format(self.theme)
-
-
-# The entry point group that can be used by other packages to declare other
-# renderers that will be auto-detected. Explicit registration is also
-# allowed by the PluginRegistery API.
-ENTRY_POINT_GROUP = "altair.vegalite.v3.theme"  # type: str
-themes = ThemeRegistry(entry_point_group=ENTRY_POINT_GROUP)
-
-themes.register(
-    "default",
-    lambda: {
-        "config": {"view": {"width": 400, "height": 300}, "mark": {"tooltip": None}}
-    },
-)
-themes.register(
-    "opaque",
-    lambda: {
-        "config": {
-            "background": "white",
-            "view": {"width": 400, "height": 300},
-            "mark": {"tooltip": None},
-        }
-    },
-)
-themes.register("none", lambda: {})
-
-for theme in VEGA_THEMES:
-    themes.register(theme, VegaTheme(theme))
-
-themes.enable("default")
diff --git a/altair/vegalite/v4/schema/__init__.py b/altair/vegalite/v4/schema/__init__.py
deleted file mode 100644
index 618a503..0000000
--- a/altair/vegalite/v4/schema/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# flake8: noqa
-from .core import *
-from .channels import *
-SCHEMA_VERSION = 'v4.17.0'
-SCHEMA_URL = 'https://vega.github.io/schema/vega-lite/v4.17.0.json'
diff --git a/altair/vegalite/v4/schema/channels.py b/altair/vegalite/v4/schema/channels.py
deleted file mode 100644
index 1a6dda1..0000000
--- a/altair/vegalite/v4/schema/channels.py
+++ /dev/null
@@ -1,10343 +0,0 @@
-# The contents of this file are automatically written by
-# tools/generate_schema_wrapper.py. Do not modify directly.
-
-from . import core
-import pandas as pd
-from altair.utils.schemapi import Undefined
-from altair.utils import parse_shorthand
-
-
-class FieldChannelMixin(object):
-    def to_dict(self, validate=True, ignore=(), context=None):
-        context = context or {}
-        shorthand = self._get('shorthand')
-        field = self._get('field')
-
-        if shorthand is not Undefined and field is not Undefined:
-            raise ValueError("{} specifies both shorthand={} and field={}. "
-                             "".format(self.__class__.__name__, shorthand, field))
-
-        if isinstance(shorthand, (tuple, list)):
-            # If given a list of shorthands, then transform it to a list of classes
-            kwds = self._kwds.copy()
-            kwds.pop('shorthand')
-            return [self.__class__(sh, **kwds).to_dict(validate=validate, ignore=ignore, context=context)
-                    for sh in shorthand]
-
-        if shorthand is Undefined:
-            parsed = {}
-        elif isinstance(shorthand, str):
-            parsed = parse_shorthand(shorthand, data=context.get('data', None))
-            type_required = 'type' in self._kwds
-            type_in_shorthand = 'type' in parsed
-            type_defined_explicitly = self._get('type') is not Undefined
-            if not type_required:
-                # Secondary field names don't require a type argument in VegaLite 3+.
-                # We still parse it out of the shorthand, but drop it here.
-                parsed.pop('type', None)
-            elif not (type_in_shorthand or type_defined_explicitly):
-                if isinstance(context.get('data', None), pd.DataFrame):
-                    raise ValueError("{} encoding field is specified without a type; "
-                                     "the type cannot be inferred because it does not "
-                                     "match any column in the data.".format(shorthand))
-                else:
-                    raise ValueError("{} encoding field is specified without a type; "
-                                     "the type cannot be automatically inferred because "
-                                     "the data is not specified as a pandas.DataFrame."
-                                     "".format(shorthand))
-        else:
-            # Shorthand is not a string; we pass the definition to field,
-            # and do not do any parsing.
-            parsed = {'field': shorthand}
-
-        # Set shorthand to Undefined, because it's not part of the base schema.
-        self.shorthand = Undefined
-        self._kwds.update({k: v for k, v in parsed.items()
-                           if self._get(k) is Undefined})
-        return super(FieldChannelMixin, self).to_dict(
-            validate=validate,
-            ignore=ignore,
-            context=context
-        )
-
-
-class ValueChannelMixin(object):
-    def to_dict(self, validate=True, ignore=(), context=None):
-        context = context or {}
-        condition = getattr(self, 'condition', Undefined)
-        copy = self  # don't copy unless we need to
-        if condition is not Undefined:
-            if isinstance(condition, core.SchemaBase):
-                pass
-            elif 'field' in condition and 'type' not in condition:
-                kwds = parse_shorthand(condition['field'], context.get('data', None))
-                copy = self.copy(deep=['condition'])
-                copy.condition.update(kwds)
-        return super(ValueChannelMixin, copy).to_dict(validate=validate,
-                                                      ignore=ignore,
-                                                      context=context)
-
-
-class DatumChannelMixin(object):
-    def to_dict(self, validate=True, ignore=(), context=None):
-        context = context or {}
-        datum = getattr(self, 'datum', Undefined)
-        copy = self  # don't copy unless we need to
-        if datum is not Undefined:
-            if isinstance(datum, core.SchemaBase):
-                pass
-        return super(DatumChannelMixin, copy).to_dict(validate=validate,
-                                                      ignore=ignore,
-                                                      context=context)
-
-
-class Angle(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
-    """Angle schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "angle"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Angle, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                    condition=condition, field=field, legend=legend, scale=scale,
-                                    sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class AngleDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
-    """AngleDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "angle"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(AngleDatum, self).__init__(datum=datum, band=band, condition=condition, type=type, **kwds)
-
-
-class AngleValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
-    """AngleValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "angle"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(AngleValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Color(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull):
-    """Color schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "color"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Color, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                    condition=condition, field=field, legend=legend, scale=scale,
-                                    sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class ColorDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefGradientstringnull):
-    """ColorDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "color"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(ColorDatum, self).__init__(datum=datum, band=band, condition=condition, type=type, **kwds)
-
-
-class ColorValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull):
-    """ColorValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "color"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(ColorValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Column(FieldChannelMixin, core.RowColumnEncodingFieldDef):
-    """Column schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    align : :class:`LayoutAlign`
-        The alignment to apply to row/column facet's subplot. The supported string values
-        are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        **Default value:** ``"all"``.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    center : boolean
-        Boolean flag indicating if facet's subviews should be centered relative to their
-        respective rows or columns.
-
-        **Default value:** ``false``
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    spacing : float
-        The spacing in pixels between facet's sub-views.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "column"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined, band=Undefined,
-                 bin=Undefined, center=Undefined, field=Undefined, header=Undefined, sort=Undefined,
-                 spacing=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Column, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align, band=band,
-                                     bin=bin, center=center, field=field, header=header, sort=sort,
-                                     spacing=spacing, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class Description(FieldChannelMixin, core.StringFieldDefWithCondition):
-    """Description schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringExprRef`,
-    List(:class:`ConditionalValueDefstringExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
-        When used with the default ``"number"`` and ``"time"`` format type, the text
-        formatting pattern for labels of guides (axes, legends, headers) and text marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        When used with a `custom formatType
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
-        value will be passed as ``format`` alongside ``datum.value`` to the registered
-        function.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : string
-        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
-        format type
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
-
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
-
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "description"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
-                 labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Description, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                          condition=condition, field=field, format=format,
-                                          formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit,
-                                          title=title, type=type, **kwds)
-
-
-class DescriptionValue(ValueChannelMixin, core.StringValueDefWithCondition):
-    """DescriptionValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "description"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(DescriptionValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Detail(FieldChannelMixin, core.FieldDefWithoutScale):
-    """Detail schema wrapper
-
-    Mapping(required=[shorthand])
-    Definition object for a data field, its type and transformation of an encoding channel.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "detail"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Detail, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                     field=field, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class Facet(FieldChannelMixin, core.FacetEncodingFieldDef):
-    """Facet schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns. The supported string values are
-        ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
-
-        **Default value:** ``"all"``.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
-
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
-
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
-
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using
-        the ``column`` channel (for ``facet`` and ``repeat`` ).
-
-        **Note** :
-
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator. An object of
-        the form ``{"row": number, "column": number}`` can be used to set different spacing
-        values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "facet"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined, band=Undefined,
-                 bin=Undefined, bounds=Undefined, center=Undefined, columns=Undefined, field=Undefined,
-                 header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Facet, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align, band=band,
-                                    bin=bin, bounds=bounds, center=center, columns=columns, field=field,
-                                    header=header, sort=sort, spacing=spacing, timeUnit=timeUnit,
-                                    title=title, type=type, **kwds)
-
-
-class Fill(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull):
-    """Fill schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fill"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Fill, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                   condition=condition, field=field, legend=legend, scale=scale,
-                                   sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class FillDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefGradientstringnull):
-    """FillDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fill"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(FillDatum, self).__init__(datum=datum, band=band, condition=condition, type=type, **kwds)
-
-
-class FillValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull):
-    """FillValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fill"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(FillValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class FillOpacity(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
-    """FillOpacity schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fillOpacity"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(FillOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                          condition=condition, field=field, legend=legend, scale=scale,
-                                          sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class FillOpacityDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
-    """FillOpacityDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fillOpacity"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(FillOpacityDatum, self).__init__(datum=datum, band=band, condition=condition, type=type,
-                                               **kwds)
-
-
-class FillOpacityValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
-    """FillOpacityValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "fillOpacity"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(FillOpacityValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Href(FieldChannelMixin, core.StringFieldDefWithCondition):
-    """Href schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringExprRef`,
-    List(:class:`ConditionalValueDefstringExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
-        When used with the default ``"number"`` and ``"time"`` format type, the text
-        formatting pattern for labels of guides (axes, legends, headers) and text marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        When used with a `custom formatType
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
-        value will be passed as ``format`` alongside ``datum.value`` to the registered
-        function.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : string
-        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
-        format type
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
-
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
-
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "href"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
-                 labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Href, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                   condition=condition, field=field, format=format,
-                                   formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit,
-                                   title=title, type=type, **kwds)
-
-
-class HrefValue(ValueChannelMixin, core.StringValueDefWithCondition):
-    """HrefValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "href"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(HrefValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Key(FieldChannelMixin, core.FieldDefWithoutScale):
-    """Key schema wrapper
-
-    Mapping(required=[shorthand])
-    Definition object for a data field, its type and transformation of an encoding channel.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "key"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Key, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                  field=field, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class Latitude(FieldChannelMixin, core.LatLongFieldDef):
-    """Latitude schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : string
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Latitude, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                       field=field, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class LatitudeDatum(DatumChannelMixin, core.DatumDef):
-    """LatitudeDatum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(LatitudeDatum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class LatitudeValue(ValueChannelMixin, core.NumericValueDef):
-    """LatitudeValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude"
-
-    def __init__(self, value, **kwds):
-        super(LatitudeValue, self).__init__(value=value, **kwds)
-
-
-class Latitude2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Latitude2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(Latitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                        field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class Latitude2Datum(DatumChannelMixin, core.DatumDef):
-    """Latitude2Datum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude2"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(Latitude2Datum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class Latitude2Value(ValueChannelMixin, core.PositionValueDef):
-    """Latitude2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "latitude2"
-
-    def __init__(self, value, **kwds):
-        super(Latitude2Value, self).__init__(value=value, **kwds)
-
-
-class Longitude(FieldChannelMixin, core.LatLongFieldDef):
-    """Longitude schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : string
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Longitude, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                        field=field, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class LongitudeDatum(DatumChannelMixin, core.DatumDef):
-    """LongitudeDatum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(LongitudeDatum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class LongitudeValue(ValueChannelMixin, core.NumericValueDef):
-    """LongitudeValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude"
-
-    def __init__(self, value, **kwds):
-        super(LongitudeValue, self).__init__(value=value, **kwds)
-
-
-class Longitude2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Longitude2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(Longitude2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                         field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class Longitude2Datum(DatumChannelMixin, core.DatumDef):
-    """Longitude2Datum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude2"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(Longitude2Datum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class Longitude2Value(ValueChannelMixin, core.PositionValueDef):
-    """Longitude2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "longitude2"
-
-    def __init__(self, value, **kwds):
-        super(Longitude2Value, self).__init__(value=value, **kwds)
-
-
-class Opacity(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
-    """Opacity schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "opacity"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Opacity, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                      condition=condition, field=field, legend=legend, scale=scale,
-                                      sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class OpacityDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
-    """OpacityDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "opacity"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(OpacityDatum, self).__init__(datum=datum, band=band, condition=condition, type=type,
-                                           **kwds)
-
-
-class OpacityValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
-    """OpacityValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "opacity"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(OpacityValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Order(FieldChannelMixin, core.OrderFieldDef):
-    """Order schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    sort : :class:`SortOrder`
-        The sort order. One of ``"ascending"`` (default) or ``"descending"``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "order"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
-                 **kwds):
-        super(Order, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                    field=field, sort=sort, timeUnit=timeUnit, title=title, type=type,
-                                    **kwds)
-
-
-class OrderValue(ValueChannelMixin, core.OrderValueDef):
-    """OrderValue schema wrapper
-
-    Mapping(required=[value])
-
-    Attributes
-    ----------
-
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    condition : anyOf(:class:`ConditionalValueDefnumber`,
-    List(:class:`ConditionalValueDefnumber`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "order"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(OrderValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Radius(FieldChannelMixin, core.PositionFieldDefBase):
-    """Radius schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "radius"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Radius, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                     field=field, scale=scale, sort=sort, stack=stack,
-                                     timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class RadiusDatum(DatumChannelMixin, core.PositionDatumDefBase):
-    """RadiusDatum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "radius"
-    def __init__(self, datum, band=Undefined, scale=Undefined, stack=Undefined, type=Undefined, **kwds):
-        super(RadiusDatum, self).__init__(datum=datum, band=band, scale=scale, stack=stack, type=type,
-                                          **kwds)
-
-
-class RadiusValue(ValueChannelMixin, core.PositionValueDef):
-    """RadiusValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "radius"
-
-    def __init__(self, value, **kwds):
-        super(RadiusValue, self).__init__(value=value, **kwds)
-
-
-class Radius2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Radius2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "radius2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(Radius2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                      field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class Radius2Datum(DatumChannelMixin, core.DatumDef):
-    """Radius2Datum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "radius2"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(Radius2Datum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class Radius2Value(ValueChannelMixin, core.PositionValueDef):
-    """Radius2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "radius2"
-
-    def __init__(self, value, **kwds):
-        super(Radius2Value, self).__init__(value=value, **kwds)
-
-
-class Row(FieldChannelMixin, core.RowColumnEncodingFieldDef):
-    """Row schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    align : :class:`LayoutAlign`
-        The alignment to apply to row/column facet's subplot. The supported string values
-        are ``"all"``, ``"each"``, and ``"none"``.
-
-
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
-
-        **Default value:** ``"all"``.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    center : boolean
-        Boolean flag indicating if facet's subviews should be centered relative to their
-        respective rows or columns.
-
-        **Default value:** ``false``
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    spacing : float
-        The spacing in pixels between facet's sub-views.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "row"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined, band=Undefined,
-                 bin=Undefined, center=Undefined, field=Undefined, header=Undefined, sort=Undefined,
-                 spacing=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Row, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align, band=band,
-                                  bin=bin, center=center, field=field, header=header, sort=sort,
-                                  spacing=spacing, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class Shape(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull):
-    """Shape schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`TypeForShape`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "shape"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Shape, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                    condition=condition, field=field, legend=legend, scale=scale,
-                                    sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class ShapeDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefstringnull):
-    """ShapeDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "shape"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(ShapeDatum, self).__init__(datum=datum, band=band, condition=condition, type=type, **kwds)
-
-
-class ShapeValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull):
-    """ShapeValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDefTypeForShape`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "shape"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(ShapeValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Size(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
-    """Size schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "size"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Size, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                   condition=condition, field=field, legend=legend, scale=scale,
-                                   sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class SizeDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
-    """SizeDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "size"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(SizeDatum, self).__init__(datum=datum, band=band, condition=condition, type=type, **kwds)
-
-
-class SizeValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
-    """SizeValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "size"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(SizeValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Stroke(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull):
-    """Stroke schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "stroke"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Stroke, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                     condition=condition, field=field, legend=legend, scale=scale,
-                                     sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class StrokeDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefGradientstringnull):
-    """StrokeDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "stroke"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(StrokeDatum, self).__init__(datum=datum, band=band, condition=condition, type=type, **kwds)
-
-
-class StrokeValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull):
-    """StrokeValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "stroke"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(StrokeValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class StrokeDash(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray):
-    """StrokeDash schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`,
-    List(:class:`ConditionalValueDefnumberArrayExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeDash"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(StrokeDash, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                         condition=condition, field=field, legend=legend, scale=scale,
-                                         sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class StrokeDashDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumberArray):
-    """StrokeDashDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`,
-    List(:class:`ConditionalValueDefnumberArrayExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeDash"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(StrokeDashDatum, self).__init__(datum=datum, band=band, condition=condition, type=type,
-                                              **kwds)
-
-
-class StrokeDashValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray):
-    """StrokeDashValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberArrayExprRef`,
-    List(:class:`ConditionalValueDefnumberArrayExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(List(float), :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeDash"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(StrokeDashValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class StrokeOpacity(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
-    """StrokeOpacity schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeOpacity"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(StrokeOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band,
-                                            bin=bin, condition=condition, field=field, legend=legend,
-                                            scale=scale, sort=sort, timeUnit=timeUnit, title=title,
-                                            type=type, **kwds)
-
-
-class StrokeOpacityDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
-    """StrokeOpacityDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeOpacity"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(StrokeOpacityDatum, self).__init__(datum=datum, band=band, condition=condition, type=type,
-                                                 **kwds)
-
-
-class StrokeOpacityValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
-    """StrokeOpacityValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeOpacity"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(StrokeOpacityValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class StrokeWidth(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
-    """StrokeWidth schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    legend : anyOf(:class:`Legend`, None)
-        An object defining properties of the legend. If ``null``, the legend for the
-        encoding channel will be removed.
-
-        **Default value:** If undefined, default `legend properties
-        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
-
-        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeWidth"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
-                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(StrokeWidth, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                          condition=condition, field=field, legend=legend, scale=scale,
-                                          sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class StrokeWidthDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
-    """StrokeWidthDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeWidth"
-    def __init__(self, datum, band=Undefined, condition=Undefined, type=Undefined, **kwds):
-        super(StrokeWidthDatum, self).__init__(datum=datum, band=band, condition=condition, type=type,
-                                               **kwds)
-
-
-class StrokeWidthValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
-    """StrokeWidthValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "strokeWidth"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(StrokeWidthValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Text(FieldChannelMixin, core.FieldOrDatumDefWithConditionStringFieldDefText):
-    """Text schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefTextExprRef`,
-    List(:class:`ConditionalValueDefTextExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
-        When used with the default ``"number"`` and ``"time"`` format type, the text
-        formatting pattern for labels of guides (axes, legends, headers) and text marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        When used with a `custom formatType
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
-        value will be passed as ``format`` alongside ``datum.value`` to the registered
-        function.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : string
-        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
-        format type
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
-
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
-
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "text"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
-                 labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Text, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                   condition=condition, field=field, format=format,
-                                   formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit,
-                                   title=title, type=type, **kwds)
-
-
-class TextDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionStringDatumDefText):
-    """TextDatum schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefTextExprRef`,
-    List(:class:`ConditionalValueDefTextExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    format : anyOf(string, :class:`Dictunknown`)
-        When used with the default ``"number"`` and ``"time"`` format type, the text
-        formatting pattern for labels of guides (axes, legends, headers) and text marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        When used with a `custom formatType
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
-        value will be passed as ``format`` alongside ``datum.value`` to the registered
-        function.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : string
-        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
-        format type
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
-
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
-
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "text"
-    def __init__(self, datum, band=Undefined, condition=Undefined, format=Undefined,
-                 formatType=Undefined, labelExpr=Undefined, type=Undefined, **kwds):
-        super(TextDatum, self).__init__(datum=datum, band=band, condition=condition, format=format,
-                                        formatType=formatType, labelExpr=labelExpr, type=type, **kwds)
-
-
-class TextValue(ValueChannelMixin, core.ValueDefWithConditionStringFieldDefText):
-    """TextValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalStringFieldDef`,
-    :class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(:class:`Text`, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "text"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(TextValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Theta(FieldChannelMixin, core.PositionFieldDefBase):
-    """Theta schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "theta"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(Theta, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                    field=field, scale=scale, sort=sort, stack=stack, timeUnit=timeUnit,
-                                    title=title, type=type, **kwds)
-
-
-class ThetaDatum(DatumChannelMixin, core.PositionDatumDefBase):
-    """ThetaDatum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "theta"
-    def __init__(self, datum, band=Undefined, scale=Undefined, stack=Undefined, type=Undefined, **kwds):
-        super(ThetaDatum, self).__init__(datum=datum, band=band, scale=scale, stack=stack, type=type,
-                                         **kwds)
-
-
-class ThetaValue(ValueChannelMixin, core.PositionValueDef):
-    """ThetaValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "theta"
-
-    def __init__(self, value, **kwds):
-        super(ThetaValue, self).__init__(value=value, **kwds)
-
-
-class Theta2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Theta2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "theta2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(Theta2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                     field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class Theta2Datum(DatumChannelMixin, core.DatumDef):
-    """Theta2Datum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "theta2"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(Theta2Datum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class Theta2Value(ValueChannelMixin, core.PositionValueDef):
-    """Theta2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "theta2"
-
-    def __init__(self, value, **kwds):
-        super(Theta2Value, self).__init__(value=value, **kwds)
-
-
-class Tooltip(FieldChannelMixin, core.StringFieldDefWithCondition):
-    """Tooltip schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringExprRef`,
-    List(:class:`ConditionalValueDefstringExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
-        When used with the default ``"number"`` and ``"time"`` format type, the text
-        formatting pattern for labels of guides (axes, legends, headers) and text marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        When used with a `custom formatType
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
-        value will be passed as ``format`` alongside ``datum.value`` to the registered
-        function.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : string
-        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
-        format type
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
-
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
-
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "tooltip"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
-                 labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Tooltip, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                      condition=condition, field=field, format=format,
-                                      formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit,
-                                      title=title, type=type, **kwds)
-
-
-class TooltipValue(ValueChannelMixin, core.StringValueDefWithCondition):
-    """TooltipValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "tooltip"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(TooltipValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class Url(FieldChannelMixin, core.StringFieldDefWithCondition):
-    """Url schema wrapper
-
-    Mapping(required=[shorthand])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringExprRef`,
-    List(:class:`ConditionalValueDefstringExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
-        When used with the default ``"number"`` and ``"time"`` format type, the text
-        formatting pattern for labels of guides (axes, legends, headers) and text marks.
-
-
-        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
-          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
-
-        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
-        for more examples.
-
-        When used with a `custom formatType
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
-        value will be passed as ``format`` alongside ``datum.value`` to the registered
-        function.
-
-        **Default value:**  Derived from `numberFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
-        format and from `timeFormat
-        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
-        format.
-    formatType : string
-        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
-        format type
-        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
-
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
-
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "url"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
-                 labelExpr=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Url, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                  condition=condition, field=field, format=format,
-                                  formatType=formatType, labelExpr=labelExpr, timeUnit=timeUnit,
-                                  title=title, type=type, **kwds)
-
-
-class UrlValue(ValueChannelMixin, core.StringValueDefWithCondition):
-    """UrlValue schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
-    value : anyOf(string, None, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "url"
-
-    def __init__(self, value, condition=Undefined, **kwds):
-        super(UrlValue, self).__init__(value=value, condition=condition, **kwds)
-
-
-class X(FieldChannelMixin, core.PositionFieldDef):
-    """X schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    axis : anyOf(:class:`Axis`, None)
-        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
-        the axis for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `axis properties
-        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
-
-        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    impute : anyOf(:class:`ImputeParams`, None)
-        An object defining the properties of the Impute Operation to be applied. The field
-        value of the other positional channel is taken as ``key`` of the ``Impute``
-        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
-        the ``Impute`` Operation.
-
-        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, band=Undefined,
-                 bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined,
-                 stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(X, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, band=band, bin=bin,
-                                field=field, impute=impute, scale=scale, sort=sort, stack=stack,
-                                timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class XDatum(DatumChannelMixin, core.PositionDatumDef):
-    """XDatum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    axis : anyOf(:class:`Axis`, None)
-        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
-        the axis for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `axis properties
-        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
-
-        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    impute : anyOf(:class:`ImputeParams`, None)
-        An object defining the properties of the Impute Operation to be applied. The field
-        value of the other positional channel is taken as ``key`` of the ``Impute``
-        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
-        the ``Impute`` Operation.
-
-        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x"
-    def __init__(self, datum, axis=Undefined, band=Undefined, impute=Undefined, scale=Undefined,
-                 stack=Undefined, type=Undefined, **kwds):
-        super(XDatum, self).__init__(datum=datum, axis=axis, band=band, impute=impute, scale=scale,
-                                     stack=stack, type=type, **kwds)
-
-
-class XValue(ValueChannelMixin, core.PositionValueDef):
-    """XValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x"
-
-    def __init__(self, value, **kwds):
-        super(XValue, self).__init__(value=value, **kwds)
-
-
-class X2(FieldChannelMixin, core.SecondaryFieldDef):
-    """X2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(X2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                 field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class X2Datum(DatumChannelMixin, core.DatumDef):
-    """X2Datum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x2"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(X2Datum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class X2Value(ValueChannelMixin, core.PositionValueDef):
-    """X2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "x2"
-
-    def __init__(self, value, **kwds):
-        super(X2Value, self).__init__(value=value, **kwds)
-
-
-class XError(FieldChannelMixin, core.SecondaryFieldDef):
-    """XError schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(XError, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                     field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class XErrorValue(ValueChannelMixin, core.ValueDefnumber):
-    """XErrorValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError"
-
-    def __init__(self, value, **kwds):
-        super(XErrorValue, self).__init__(value=value, **kwds)
-
-
-class XError2(FieldChannelMixin, core.SecondaryFieldDef):
-    """XError2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(XError2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                      field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class XError2Value(ValueChannelMixin, core.ValueDefnumber):
-    """XError2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "xError2"
-
-    def __init__(self, value, **kwds):
-        super(XError2Value, self).__init__(value=value, **kwds)
-
-
-class Y(FieldChannelMixin, core.PositionFieldDef):
-    """Y schema wrapper
-
-    Mapping(required=[shorthand])
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    axis : anyOf(:class:`Axis`, None)
-        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
-        the axis for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `axis properties
-        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
-
-        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, string, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    impute : anyOf(:class:`ImputeParams`, None)
-        An object defining the properties of the Impute Operation to be applied. The field
-        value of the other positional channel is taken as ``key`` of the ``Impute``
-        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
-        the ``Impute`` Operation.
-
-        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    sort : :class:`Sort`
-        Sort order for the encoded field.
-
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
-
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
-        ``column``.
-
-        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, band=Undefined,
-                 bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined,
-                 stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(Y, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis, band=band, bin=bin,
-                                field=field, impute=impute, scale=scale, sort=sort, stack=stack,
-                                timeUnit=timeUnit, title=title, type=type, **kwds)
-
-
-class YDatum(DatumChannelMixin, core.PositionDatumDef):
-    """YDatum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    axis : anyOf(:class:`Axis`, None)
-        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
-        the axis for the encoding channel will be removed.
-
-        **Default value:** If undefined, default `axis properties
-        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
-
-        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    impute : anyOf(:class:`ImputeParams`, None)
-        An object defining the properties of the Impute Operation to be applied. The field
-        value of the other positional channel is taken as ``key`` of the ``Impute``
-        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
-        the ``Impute`` Operation.
-
-        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
-        documentation.
-    scale : anyOf(:class:`Scale`, None)
-        An object defining properties of the channel's scale, which is the function that
-        transforms values in the data domain (numbers, dates, strings, etc) to visual values
-        (pixels, colors, sizes) of the encoding channels.
-
-        If ``null``, the scale will be `disabled and the data value will be directly encoded
-        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
-
-        **Default value:** If undefined, default `scale properties
-        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
-
-        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
-        documentation.
-    stack : anyOf(:class:`StackOffset`, None, boolean)
-        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
-        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
-        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
-        chart.
-
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
-
-        **Default value:** ``zero`` for plots with all of the following conditions are true:
-        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
-        or y) has a linear scale; (3) At least one of non-position channels mapped to an
-        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
-
-        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
-        documentation.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y"
-    def __init__(self, datum, axis=Undefined, band=Undefined, impute=Undefined, scale=Undefined,
-                 stack=Undefined, type=Undefined, **kwds):
-        super(YDatum, self).__init__(datum=datum, axis=axis, band=band, impute=impute, scale=scale,
-                                     stack=stack, type=type, **kwds)
-
-
-class YValue(ValueChannelMixin, core.PositionValueDef):
-    """YValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y"
-
-    def __init__(self, value, **kwds):
-        super(YValue, self).__init__(value=value, **kwds)
-
-
-class Y2(FieldChannelMixin, core.SecondaryFieldDef):
-    """Y2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(Y2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                 field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class Y2Datum(DatumChannelMixin, core.DatumDef):
-    """Y2Datum schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y2"
-    def __init__(self, datum, band=Undefined, type=Undefined, **kwds):
-        super(Y2Datum, self).__init__(datum=datum, band=band, type=type, **kwds)
-
-
-class Y2Value(ValueChannelMixin, core.PositionValueDef):
-    """Y2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "y2"
-
-    def __init__(self, value, **kwds):
-        super(Y2Value, self).__init__(value=value, **kwds)
-
-
-class YError(FieldChannelMixin, core.SecondaryFieldDef):
-    """YError schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(YError, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                     field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class YErrorValue(ValueChannelMixin, core.ValueDefnumber):
-    """YErrorValue schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError"
-
-    def __init__(self, value, **kwds):
-        super(YErrorValue, self).__init__(value=value, **kwds)
-
-
-class YError2(FieldChannelMixin, core.SecondaryFieldDef):
-    """YError2 schema wrapper
-
-    Mapping(required=[shorthand])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
-
-    Attributes
-    ----------
-
-    shorthand : string
-        shorthand for field, aggregate, and type
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError2"
-
-    def __init__(self, shorthand=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
-        super(YError2, self).__init__(shorthand=shorthand, aggregate=aggregate, band=band, bin=bin,
-                                      field=field, timeUnit=timeUnit, title=title, **kwds)
-
-
-class YError2Value(ValueChannelMixin, core.ValueDefnumber):
-    """YError2Value schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
-
-    value : float
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
-    """
-    _class_is_valid_at_instantiation = False
-    _encoding_name = "yError2"
-
-    def __init__(self, value, **kwds):
-        super(YError2Value, self).__init__(value=value, **kwds)
diff --git a/altair/vegalite/v4/tests/__init__.py b/altair/vegalite/v4/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/altair/vegalite/v4/tests/test_data.py b/altair/vegalite/v4/tests/test_data.py
deleted file mode 100644
index 8eae11c..0000000
--- a/altair/vegalite/v4/tests/test_data.py
+++ /dev/null
@@ -1,33 +0,0 @@
-import os
-
-import pandas as pd
-import pytest
-
-from .. import data as alt
-
-
-@pytest.fixture
-def sample_data():
-    return pd.DataFrame({"x": range(10), "y": range(10)})
-
-
-def test_disable_max_rows(sample_data):
-    with alt.data_transformers.enable("default", max_rows=5):
-        # Ensure max rows error is raised.
-        with pytest.raises(alt.MaxRowsError):
-            alt.data_transformers.get()(sample_data)
-
-        # Ensure that max rows error is properly disabled.
-        with alt.data_transformers.disable_max_rows():
-            alt.data_transformers.get()(sample_data)
-
-    try:
-        with alt.data_transformers.enable("json"):
-            # Ensure that there is no TypeError for non-max_rows transformers.
-            with alt.data_transformers.disable_max_rows():
-                jsonfile = alt.data_transformers.get()(sample_data)
-    except TypeError:
-        jsonfile = {}
-    finally:
-        if jsonfile:
-            os.remove(jsonfile["url"])
diff --git a/altair/vegalite/v4/tests/test_geo_interface.py b/altair/vegalite/v4/tests/test_geo_interface.py
deleted file mode 100644
index b637b28..0000000
--- a/altair/vegalite/v4/tests/test_geo_interface.py
+++ /dev/null
@@ -1,204 +0,0 @@
-import pytest
-import altair.vegalite.v4 as alt
-
-
-def geom_obj(geom):
-    class Geom(object):
-        pass
-
-    geom_obj = Geom()
-    setattr(geom_obj, "__geo_interface__", geom)
-    return geom_obj
-
-
-# correct translation of Polygon geometry to Feature type
-def test_geo_interface_polygon_feature():
-    geom = {
-        "coordinates": [[(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)]],
-        "type": "Polygon",
-    }
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    assert spec["data"]["values"]["type"] == "Feature"
-
-
-# merge geometry with empty properties dictionary
-def test_geo_interface_removal_empty_properties():
-    geom = {
-        "geometry": {
-            "coordinates": [
-                [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]]
-            ],
-            "type": "Polygon",
-        },
-        "id": None,
-        "properties": {},
-        "type": "Feature",
-    }
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    assert spec["data"]["values"]["type"] == "Feature"
-
-
-# only register metadata in the properties member
-def test_geo_interface_register_foreign_member():
-    geom = {
-        "geometry": {
-            "coordinates": [
-                [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]]
-            ],
-            "type": "Polygon",
-        },
-        "id": 2,
-        "properties": {"foo": "bah"},
-        "type": "Feature",
-    }
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    with pytest.raises(KeyError):
-        spec["data"]["values"]["id"]
-    assert spec["data"]["values"]["foo"] == "bah"
-
-
-# correct serializing of arrays and nested tuples
-def test_geo_interface_serializing_arrays_tuples():
-    import array as arr
-
-    geom = {
-        "bbox": arr.array("d", [1, 2, 3, 4]),
-        "geometry": {
-            "coordinates": [
-                tuple(
-                    (
-                        tuple((6.90, 53.48)),
-                        tuple((5.98, 51.85)),
-                        tuple((6.07, 53.51)),
-                        tuple((6.90, 53.48)),
-                    )
-                )
-            ],
-            "type": "Polygon",
-        },
-        "id": 27,
-        "properties": {},
-        "type": "Feature",
-    }
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    assert spec["data"]["values"]["geometry"]["coordinates"][0][0] == [6.9, 53.48]
-
-
-# overwrite existing 'type' value in properties with `Feature`
-def test_geo_interface_reserved_members():
-    geom = {
-        "geometry": {
-            "coordinates": [
-                [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]]
-            ],
-            "type": "Polygon",
-        },
-        "id": 27,
-        "properties": {"type": "foo"},
-        "type": "Feature",
-    }
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    assert spec["data"]["values"]["type"] == "Feature"
-
-
-# an empty FeatureCollection is valid
-def test_geo_interface_empty_feature_collection():
-    geom = {"type": "FeatureCollection", "features": []}
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    assert spec["data"]["values"] == []
-
-
-# Features in a FeatureCollection only keep properties and geometry
-def test_geo_interface_feature_collection():
-    geom = {
-        "type": "FeatureCollection",
-        "features": [
-            {
-                "geometry": {
-                    "coordinates": [
-                        [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]]
-                    ],
-                    "type": "Polygon",
-                },
-                "id": 27,
-                "properties": {"type": "foo", "id": 1, "geometry": 1},
-                "type": "Feature",
-            },
-            {
-                "geometry": {
-                    "coordinates": [
-                        [[8.90, 53.48], [7.98, 51.85], [8.07, 53.51], [8.90, 53.48]]
-                    ],
-                    "type": "Polygon",
-                },
-                "id": 28,
-                "properties": {"type": "foo", "id": 2, "geometry": 1},
-                "type": "Feature",
-            },
-        ],
-    }
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    assert spec["data"]["values"][0]["id"] == 1
-    assert spec["data"]["values"][1]["id"] == 2
-    assert "coordinates" in spec["data"]["values"][0]["geometry"]
-    assert "coordinates" in spec["data"]["values"][1]["geometry"]
-    assert spec["data"]["values"][0]["type"] == "Feature"
-    assert spec["data"]["values"][1]["type"] == "Feature"
-
-
-# typical output of a __geo_interface__ from geopandas GeoDataFrame
-# notic that the index value is registerd as a commonly used identifier
-# with the name "id" (in this case 49). Similar to serialization of a
-# pandas DataFrame is the index not included in the output
-def test_geo_interface_feature_collection_gdf():
-    geom = {
-        "bbox": (19.89, -26.82, 29.43, -17.66),
-        "features": [
-            {
-                "bbox": (19.89, -26.82, 29.43, -17.66),
-                "geometry": {
-                    "coordinates": [
-                        [[6.90, 53.48], [5.98, 51.85], [6.07, 53.51], [6.90, 53.48]]
-                    ],
-                    "type": "Polygon",
-                },
-                "id": "49",
-                "properties": {
-                    "continent": "Africa",
-                    "gdp_md_est": 35900.0,
-                    "id": "BWA",
-                    "iso_a3": "BWA",
-                    "name": "Botswana",
-                    "pop_est": 2214858,
-                },
-                "type": "Feature",
-            }
-        ],
-        "type": "FeatureCollection",
-    }
-    feat = geom_obj(geom)
-
-    with alt.data_transformers.enable(consolidate_datasets=False):
-        spec = alt.Chart(feat).mark_geoshape().to_dict()
-    assert spec["data"]["values"][0]["id"] == "BWA"
diff --git a/altair/vegalite/v4/__init__.py b/altair/vegalite/v5/__init__.py
similarity index 69%
rename from altair/vegalite/v4/__init__.py
rename to altair/vegalite/v5/__init__.py
index 90b76bf..38202d8 100644
--- a/altair/vegalite/v4/__init__.py
+++ b/altair/vegalite/v5/__init__.py
@@ -1,11 +1,8 @@
-# flake8: noqa
+# ruff: noqa
 from .schema import *
 from .api import *
 
-from ...datasets import list_datasets, load_dataset
-
-from ... import expr
-from ...expr import datum
+from ...expr import datum, expr  # type: ignore[no-redef]
 
 from .display import VegaLite, renderers
 
diff --git a/altair/vegalite/v4/api.py b/altair/vegalite/v5/api.py
similarity index 64%
rename from altair/vegalite/v4/api.py
rename to altair/vegalite/v5/api.py
index 84162e1..ed449bc 100644
--- a/altair/vegalite/v4/api.py
+++ b/altair/vegalite/v5/api.py
@@ -6,6 +6,12 @@ import json
 import jsonschema
 import pandas as pd
 from toolz.curried import pipe as _pipe
+import itertools
+import sys
+from typing import cast
+
+# Have to rename it here as else it overlaps with schema.core.Type
+from typing import Type as TypingType
 
 from .schema import core, channels, mixins, Undefined, SCHEMA_URL
 
@@ -14,6 +20,11 @@ from ... import utils, expr
 from .display import renderers, VEGALITE_VERSION, VEGAEMBED_VERSION, VEGA_VERSION
 from .theme import themes
 
+if sys.version_info >= (3, 11):
+    from typing import Self
+else:
+    from typing_extensions import Self
+
 
 # ------------------------------------------------------------------------
 # Data Utilities
@@ -85,20 +96,23 @@ def _prepare_data(data, context=None):
         return data
 
     # convert dataframes  or objects with __geo_interface__ to dict
-    if isinstance(data, pd.DataFrame) or hasattr(data, "__geo_interface__"):
+    elif isinstance(data, pd.DataFrame) or hasattr(data, "__geo_interface__"):
         data = _pipe(data, data_transformers.get())
 
     # convert string input to a URLData
-    if isinstance(data, str):
+    elif isinstance(data, str):
         data = core.UrlData(data)
 
+    elif hasattr(data, "__dataframe__"):
+        data = _pipe(data, data_transformers.get())
+
     # consolidate inline data to top-level datasets
     if context is not None and data_transformers.consolidate_datasets:
         data = _consolidate_data(data, context)
 
     # if data is still not a recognized type, then return
     if not isinstance(data, (dict, core.Data)):
-        warnings.warn("data of type {} not recognized".format(type(data)))
+        warnings.warn("data of type {} not recognized".format(type(data)), stacklevel=1)
 
     return data
 
@@ -106,10 +120,15 @@ def _prepare_data(data, context=None):
 # ------------------------------------------------------------------------
 # Aliases & specializations
 Bin = core.BinParams
+Impute = core.ImputeParams
+Title = core.TitleParams
 
 
-@utils.use_signature(core.LookupData)
 class LookupData(core.LookupData):
+    @utils.use_signature(core.LookupData)
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
     def to_dict(self, *args, **kwargs):
         """Convert the chart to a dictionary suitable for JSON export."""
         copy = self.copy(deep=False)
@@ -117,10 +136,13 @@ class LookupData(core.LookupData):
         return super(LookupData, copy).to_dict(*args, **kwargs)
 
 
-@utils.use_signature(core.FacetMapping)
 class FacetMapping(core.FacetMapping):
     _class_is_valid_at_instantiation = False
 
+    @utils.use_signature(core.FacetMapping)
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+
     def to_dict(self, *args, **kwargs):
         copy = self.copy(deep=False)
         context = kwargs.get("context", {})
@@ -153,60 +175,137 @@ def _get_channels_mapping():
 
 
 # -------------------------------------------------------------------------
-# Tools for working with selections
-class Selection(object):
-    """A Selection object"""
+# Tools for working with parameters
+class Parameter(expr.core.OperatorMixin, object):
+    """A Parameter object"""
 
     _counter = 0
 
     @classmethod
     def _get_name(cls):
         cls._counter += 1
-        return "selector{:03d}".format(cls._counter)
+        return f"param_{cls._counter}"
 
-    def __init__(self, name, selection):
+    def __init__(self, name):
         if name is None:
             name = self._get_name()
         self.name = name
-        self.selection = selection
-
-    def __repr__(self):
-        return "Selection({0!r}, {1})".format(self.name, self.selection)
 
+    @utils.deprecation.deprecated(
+        message="'ref' is deprecated. No need to call '.ref()' anymore."
+    )
     def ref(self):
+        "'ref' is deprecated. No need to call '.ref()' anymore."
         return self.to_dict()
 
     def to_dict(self):
-        return {
-            "selection": self.name.to_dict()
-            if hasattr(self.name, "to_dict")
-            else self.name
-        }
+        if self.param_type == "variable":
+            return {"expr": self.name}
+        elif self.param_type == "selection":
+            return {
+                "param": self.name.to_dict()
+                if hasattr(self.name, "to_dict")
+                else self.name
+            }
 
     def __invert__(self):
-        return Selection(core.SelectionNot(**{"not": self.name}), self.selection)
+        if self.param_type == "selection":
+            return SelectionPredicateComposition({"not": {"param": self.name}})
+        else:
+            return expr.core.OperatorMixin.__invert__(self)
 
     def __and__(self, other):
-        if isinstance(other, Selection):
-            other = other.name
-        return Selection(
-            core.SelectionAnd(**{"and": [self.name, other]}), self.selection
-        )
+        if self.param_type == "selection":
+            if isinstance(other, Parameter):
+                other = {"param": other.name}
+            return SelectionPredicateComposition({"and": [{"param": self.name}, other]})
+        else:
+            return expr.core.OperatorMixin.__and__(self, other)
 
     def __or__(self, other):
-        if isinstance(other, Selection):
-            other = other.name
-        return Selection(core.SelectionOr(**{"or": [self.name, other]}), self.selection)
+        if self.param_type == "selection":
+            if isinstance(other, Parameter):
+                other = {"param": other.name}
+            return SelectionPredicateComposition({"or": [{"param": self.name}, other]})
+        else:
+            return expr.core.OperatorMixin.__or__(self, other)
+
+    def __repr__(self):
+        return "Parameter({0!r}, {1})".format(self.name, self.param)
+
+    def _to_expr(self):
+        return self.name
+
+    def _from_expr(self, expr):
+        return ParameterExpression(expr=expr)
 
     def __getattr__(self, field_name):
         if field_name.startswith("__") and field_name.endswith("__"):
             raise AttributeError(field_name)
+        _attrexpr = expr.core.GetAttrExpression(self.name, field_name)
+        # If self is a SelectionParameter and field_name is in its
+        # fields or encodings list, then we want to return an expression.
+        if check_fields_and_encodings(self, field_name):
+            return SelectionExpression(_attrexpr)
         return expr.core.GetAttrExpression(self.name, field_name)
 
+    # TODO: Are there any special cases to consider for __getitem__?
+    # This was copied from v4.
     def __getitem__(self, field_name):
         return expr.core.GetItemExpression(self.name, field_name)
 
 
+# Enables use of ~, &, | with compositions of selection objects.
+class SelectionPredicateComposition(core.PredicateComposition):
+    def __invert__(self):
+        return SelectionPredicateComposition({"not": self.to_dict()})
+
+    def __and__(self, other):
+        return SelectionPredicateComposition({"and": [self.to_dict(), other.to_dict()]})
+
+    def __or__(self, other):
+        return SelectionPredicateComposition({"or": [self.to_dict(), other.to_dict()]})
+
+
+class ParameterExpression(expr.core.OperatorMixin, object):
+    def __init__(self, expr):
+        self.expr = expr
+
+    def to_dict(self):
+        return {"expr": repr(self.expr)}
+
+    def _to_expr(self):
+        return repr(self.expr)
+
+    def _from_expr(self, expr):
+        return ParameterExpression(expr=expr)
+
+
+class SelectionExpression(expr.core.OperatorMixin, object):
+    def __init__(self, expr):
+        self.expr = expr
+
+    def to_dict(self):
+        return {"expr": repr(self.expr)}
+
+    def _to_expr(self):
+        return repr(self.expr)
+
+    def _from_expr(self, expr):
+        return SelectionExpression(expr=expr)
+
+
+def check_fields_and_encodings(parameter, field_name):
+    for prop in ["fields", "encodings"]:
+        try:
+            if field_name in getattr(parameter.param.select, prop):
+                return True
+        except (AttributeError, TypeError):
+            pass
+
+    return False
+
+
 # ------------------------------------------------------------------------
 # Top-Level Functions
 
@@ -216,44 +315,396 @@ def value(value, **kwargs):
     return dict(value=value, **kwargs)
 
 
-def selection(name=None, type=Undefined, **kwds):
-    """Create a named selection.
+def param(
+    name=None,
+    value=Undefined,
+    bind=Undefined,
+    empty=Undefined,
+    expr=Undefined,
+    **kwds,
+):
+    """Create a named parameter.  See https://altair-viz.github.io/user_guide/interactions.html for examples.  Although both variable parameters and selection parameters can be created using this 'param' function, to create a selection parameter, it is recommended to use either 'selection_point' or 'selection_interval' instead.
 
     Parameters
     ----------
     name : string (optional)
-        The name of the selection. If not specified, a unique name will be
+        The name of the parameter. If not specified, a unique name will be
         created.
-    type : string
-        The type of the selection: one of ["interval", "single", or "multi"]
+    value : any (optional)
+        The default value of the parameter. If not specified, the parameter
+        will be created without a default value.
+    bind : :class:`Binding` (optional)
+        Binds the parameter to an external input element such as a slider,
+        selection list or radio button group.
+    empty : boolean (optional)
+        For selection parameters, the predicate of empty selections returns
+        True by default. Override this behavior, by setting this property
+        'empty=False'.
+    expr : :class:`Expr` (optional)
+        An expression for the value of the parameter. This expression may
+        include other parameters, in which case the parameter will
+        automatically update in response to upstream parameter changes.
     **kwds :
-        additional keywords will be used to construct a SelectionDef instance
-        that controls the selection.
+        additional keywords will be used to construct a parameter.  If 'select'
+        is among the keywords, then a selection parameter will be created.
+        Otherwise, a variable parameter will be created.
 
     Returns
     -------
-    selection: Selection
-        The selection object that can be used in chart creation.
+    parameter: Parameter
+        The parameter object that can be used in chart creation.
+    """
+    parameter = Parameter(name)
+
+    if empty is not Undefined:
+        parameter.empty = empty
+        if parameter.empty == "none":
+            warnings.warn(
+                """The value of 'empty' should be True or False.""",
+                utils.AltairDeprecationWarning,
+                stacklevel=1,
+            )
+            parameter.empty = False
+        elif parameter.empty == "all":
+            warnings.warn(
+                """The value of 'empty' should be True or False.""",
+                utils.AltairDeprecationWarning,
+                stacklevel=1,
+            )
+            parameter.empty = True
+        elif (parameter.empty is False) or (parameter.empty is True):
+            pass
+        else:
+            raise ValueError("The value of 'empty' should be True or False.")
+
+    if "init" in kwds:
+        warnings.warn(
+            """Use 'value' instead of 'init'.""",
+            utils.AltairDeprecationWarning,
+            stacklevel=1,
+        )
+        if value is Undefined:
+            kwds["value"] = kwds.pop("init")
+        else:
+            # If both 'value' and 'init' are set, we ignore 'init'.
+            kwds.pop("init")
+
+    if "select" not in kwds:
+        parameter.param = core.VariableParameter(
+            name=parameter.name, bind=bind, value=value, expr=expr, **kwds
+        )
+        parameter.param_type = "variable"
+    elif "views" in kwds:
+        parameter.param = core.TopLevelSelectionParameter(
+            name=parameter.name, bind=bind, value=value, expr=expr, **kwds
+        )
+        parameter.param_type = "selection"
+    else:
+        parameter.param = core.SelectionParameter(
+            name=parameter.name, bind=bind, value=value, expr=expr, **kwds
+        )
+        parameter.param_type = "selection"
+
+    return parameter
+
+
+def _selection(type=Undefined, **kwds):
+    # We separate out the parameter keywords from the selection keywords
+    param_kwds = {}
+
+    for kwd in {"name", "bind", "value", "empty", "init", "views"}:
+        if kwd in kwds:
+            param_kwds[kwd] = kwds.pop(kwd)
+
+    if type == "interval":
+        select = core.IntervalSelectionConfig(type=type, **kwds)
+    elif type == "point":
+        select = core.PointSelectionConfig(type=type, **kwds)
+    elif type in ["single", "multi"]:
+        select = core.PointSelectionConfig(type="point", **kwds)
+        warnings.warn(
+            """The types 'single' and 'multi' are now
+        combined and should be specified using "selection_point()".""",
+            utils.AltairDeprecationWarning,
+            stacklevel=1,
+        )
+    else:
+        raise ValueError("""'type' must be 'point' or 'interval'""")
+
+    return param(select=select, **param_kwds)
+
+
+@utils.deprecation.deprecated(
+    message="""'selection' is deprecated.
+   Use 'selection_point()' or 'selection_interval()' instead; these functions also include more helpful docstrings."""
+)
+def selection(type=Undefined, **kwds):
     """
-    return Selection(name, core.SelectionDef(type=type, **kwds))
+    Users are recommended to use either 'selection_point' or 'selection_interval' instead, depending on the type of parameter they want to create.
+
+    Create a selection parameter.
 
+    Parameters
+    ----------
+    type : enum('point', 'interval') (required)
+        Determines the default event processing and data query for the
+        selection. Vega-Lite currently supports two selection types:
+        * "point" - to select multiple discrete data values; the first
+        value is selected on click and additional values toggled on
+        shift-click.
+        * "interval" - to select a continuous range of data values on
+        drag.
+    **kwds :
+        additional keywords to control the selection.
+    """
 
-@utils.use_signature(core.IntervalSelection)
-def selection_interval(**kwargs):
-    """Create a selection with type='interval'"""
-    return selection(type="interval", **kwargs)
+    return _selection(type=type, **kwds)
+
+
+def selection_interval(
+    name=None,
+    value=Undefined,
+    bind=Undefined,
+    empty=Undefined,
+    expr=Undefined,
+    encodings=Undefined,
+    on=Undefined,
+    clear=Undefined,
+    resolve=Undefined,
+    mark=Undefined,
+    translate=Undefined,
+    zoom=Undefined,
+    **kwds,
+):
+    """Create an interval selection parameter. Selection parameters define data queries that are driven by direct manipulation from user input (e.g., mouse clicks or drags). Interval selection parameters are used to select a continuous range of data values on drag, whereas point selection parameters (`selection_point`) are used to select multiple discrete data values.)
 
+    Parameters
+    ----------
+    name : string (optional)
+        The name of the parameter. If not specified, a unique name will be
+        created.
+    value : any (optional)
+        The default value of the parameter. If not specified, the parameter
+        will be created without a default value.
+    bind : :class:`Binding` (optional)
+        Binds the parameter to an external input element such as a slider,
+        selection list or radio button group.
+    empty : boolean (optional)
+        For selection parameters, the predicate of empty selections returns
+        True by default. Override this behavior, by setting this property
+        'empty=False'.
+    expr : :class:`Expr` (optional)
+        An expression for the value of the parameter. This expression may
+        include other parameters, in which case the parameter will
+        automatically update in response to upstream parameter changes.
+    encodings : List[str] (optional)
+        A list of encoding channels. The corresponding data field values
+        must match for a data tuple to fall within the selection.
+    on : string (optional)
+        A Vega event stream (object or selector) that triggers the selection.
+        For interval selections, the event stream must specify a start and end.
+    clear : string or boolean (optional)
+        Clears the selection, emptying it of all values. This property can
+        be an Event Stream or False to disable clear.  Default is 'dblclick'.
+    resolve : enum('global', 'union', 'intersect') (optional)
+        With layered and multi-view displays, a strategy that determines
+        how selections' data queries are resolved when applied in a filter
+        transform, conditional encoding rule, or scale domain.
+        One of:
+
+        * 'global': only one brush exists for the entire SPLOM. When the
+          user begins to drag, any previous brushes are cleared, and a
+          new one is constructed.
+        * 'union': each cell contains its own brush, and points are
+          highlighted if they lie within any of these individual brushes.
+        * 'intersect': each cell contains its own brush, and points are
+          highlighted only if they fall within all of these individual
+          brushes.
+
+        The default is 'global'.
+    mark : :class:`Mark` (optional)
+        An interval selection also adds a rectangle mark to depict the
+        extents of the interval. The mark property can be used to
+        customize the appearance of the mark.
+    translate : string or boolean (optional)
+        When truthy, allows a user to interactively move an interval
+        selection back-and-forth. Can be True, False (to disable panning),
+        or a Vega event stream definition which must include a start and
+        end event to trigger continuous panning. Discrete panning (e.g.,
+        pressing the left/right arrow keys) will be supported in future
+        versions.
+        The default value is True, which corresponds to
+        [mousedown, window:mouseup] > window:mousemove!
+        This default allows users to click and drag within an interval
+        selection to reposition it.
+    zoom : string or boolean (optional)
+        When truthy, allows a user to interactively resize an interval
+        selection. Can be True, False (to disable zooming), or a Vega
+        event stream definition. Currently, only wheel events are supported,
+        but custom event streams can still be used to specify filters,
+        debouncing, and throttling. Future versions will expand the set of
+        events that can trigger this transformation.
+        The default value is True, which corresponds to wheel!. This
+        default allows users to use the mouse wheel to resize an interval
+        selection.
+    **kwds :
+        Additional keywords to control the selection.
+
+    Returns
+    -------
+    parameter: Parameter
+        The parameter object that can be used in chart creation.
+    """
+    return _selection(
+        type="interval",
+        name=name,
+        value=value,
+        bind=bind,
+        empty=empty,
+        expr=expr,
+        encodings=encodings,
+        on=on,
+        clear=clear,
+        resolve=resolve,
+        mark=mark,
+        translate=translate,
+        zoom=zoom,
+        **kwds,
+    )
 
-@utils.use_signature(core.MultiSelection)
+
+def selection_point(
+    name=None,
+    value=Undefined,
+    bind=Undefined,
+    empty=Undefined,
+    expr=Undefined,
+    encodings=Undefined,
+    fields=Undefined,
+    on=Undefined,
+    clear=Undefined,
+    resolve=Undefined,
+    toggle=Undefined,
+    nearest=Undefined,
+    **kwds,
+):
+    """Create a point selection parameter. Selection parameters define data queries that are driven by direct manipulation from user input (e.g., mouse clicks or drags). Point selection parameters are used to select multiple discrete data values; the first value is selected on click and additional values toggled on shift-click. To select a continuous range of data values on drag interval selection parameters (`selection_interval`) can be used instead.
+
+    Parameters
+    ----------
+    name : string (optional)
+        The name of the parameter. If not specified, a unique name will be
+        created.
+    value : any (optional)
+        The default value of the parameter. If not specified, the parameter
+        will be created without a default value.
+    bind : :class:`Binding` (optional)
+        Binds the parameter to an external input element such as a slider,
+        selection list or radio button group.
+    empty : boolean (optional)
+        For selection parameters, the predicate of empty selections returns
+        True by default. Override this behavior, by setting this property
+        'empty=False'.
+    expr : :class:`Expr` (optional)
+        An expression for the value of the parameter. This expression may
+        include other parameters, in which case the parameter will
+        automatically update in response to upstream parameter changes.
+    encodings : List[str] (optional)
+        A list of encoding channels. The corresponding data field values
+        must match for a data tuple to fall within the selection.
+    fields : List[str] (optional)
+        A list of field names whose values must match for a data tuple to
+        fall within the selection.
+    on : string (optional)
+        A Vega event stream (object or selector) that triggers the selection.
+        For interval selections, the event stream must specify a start and end.
+    clear : string or boolean (optional)
+        Clears the selection, emptying it of all values. This property can
+        be an Event Stream or False to disable clear.  Default is 'dblclick'.
+    resolve : enum('global', 'union', 'intersect') (optional)
+        With layered and multi-view displays, a strategy that determines
+        how selections' data queries are resolved when applied in a filter
+        transform, conditional encoding rule, or scale domain.
+        One of:
+
+        * 'global': only one brush exists for the entire SPLOM. When the
+          user begins to drag, any previous brushes are cleared, and a
+          new one is constructed.
+        * 'union': each cell contains its own brush, and points are
+          highlighted if they lie within any of these individual brushes.
+        * 'intersect': each cell contains its own brush, and points are
+          highlighted only if they fall within all of these individual
+          brushes.
+
+        The default is 'global'.
+    toggle : string or boolean (optional)
+        Controls whether data values should be toggled (inserted or
+        removed from a point selection) or only ever inserted into
+        point selections.
+        One of:
+
+        * True (default): the toggle behavior, which corresponds to
+          "event.shiftKey". As a result, data values are toggled
+          when the user interacts with the shift-key pressed.
+        * False: disables toggling behaviour; the selection will
+          only ever contain a single data value corresponding
+          to the most recent interaction.
+        * A Vega expression which is re-evaluated as the user interacts.
+          If the expression evaluates to True, the data value is
+          toggled into or out of the point selection. If the expression
+          evaluates to False, the point selection is first cleared, and
+          the data value is then inserted. For example, setting the
+          value to the Vega expression True will toggle data values
+          without the user pressing the shift-key.
+
+    nearest : boolean (optional)
+        When true, an invisible voronoi diagram is computed to accelerate
+        discrete selection. The data value nearest the mouse cursor is
+        added to the selection.  The default is False, which means that
+        data values must be interacted with directly (e.g., clicked on)
+        to be added to the selection.
+    **kwds :
+        Additional keywords to control the selection.
+
+    Returns
+    -------
+    parameter: Parameter
+        The parameter object that can be used in chart creation.
+    """
+    return _selection(
+        type="point",
+        name=name,
+        value=value,
+        bind=bind,
+        empty=empty,
+        expr=expr,
+        encodings=encodings,
+        fields=fields,
+        on=on,
+        clear=clear,
+        resolve=resolve,
+        toggle=toggle,
+        nearest=nearest,
+        **kwds,
+    )
+
+
+@utils.deprecation.deprecated(
+    message="'selection_multi' is deprecated.  Use 'selection_point'"
+)
+@utils.use_signature(core.PointSelectionConfig)
 def selection_multi(**kwargs):
-    """Create a selection with type='multi'"""
-    return selection(type="multi", **kwargs)
+    """'selection_multi' is deprecated.  Use 'selection_point'"""
+    return _selection(type="point", **kwargs)
 
 
-@utils.use_signature(core.SingleSelection)
+@utils.deprecation.deprecated(
+    message="'selection_single' is deprecated.  Use 'selection_point'"
+)
+@utils.use_signature(core.PointSelectionConfig)
 def selection_single(**kwargs):
-    """Create a selection with type='single'"""
-    return selection(type="single", **kwargs)
+    """'selection_single' is deprecated.  Use 'selection_point'"""
+    return _selection(type="point", **kwargs)
 
 
 @utils.use_signature(core.Binding)
@@ -286,6 +737,7 @@ def binding_range(**kwargs):
     return core.BindRange(input="range", **kwargs)
 
 
+# TODO: update the docstring
 def condition(predicate, if_true, if_false, **kwargs):
     """A conditional attribute or encoding
 
@@ -308,10 +760,15 @@ def condition(predicate, if_true, if_false, **kwargs):
     """
     test_predicates = (str, expr.Expression, core.PredicateComposition)
 
-    if isinstance(predicate, Selection):
-        condition = {"selection": predicate.name}
-    elif isinstance(predicate, core.SelectionComposition):
-        condition = {"selection": predicate}
+    if isinstance(predicate, Parameter):
+        if predicate.param_type == "selection" or predicate.param.expr is Undefined:
+            condition = {"param": predicate.name}
+            if "empty" in kwargs:
+                condition["empty"] = kwargs.pop("empty")
+            elif isinstance(predicate.empty, bool):
+                condition["empty"] = predicate.empty
+        else:
+            condition = {"test": predicate.param.expr}
     elif isinstance(predicate, test_predicates):
         condition = {"test": predicate}
     elif isinstance(predicate, dict):
@@ -326,8 +783,13 @@ def condition(predicate, if_true, if_false, **kwargs):
         # dict in the appropriate schema
         if_true = if_true.to_dict()
     elif isinstance(if_true, str):
-        if_true = {"shorthand": if_true}
-        if_true.update(kwargs)
+        if isinstance(if_false, str):
+            raise ValueError(
+                "A field cannot be used for both the `if_true` and `if_false` values of a condition. One of them has to specify a `value` or `datum` definition."
+            )
+        else:
+            if_true = utils.parse_shorthand(if_true)
+            if_true.update(kwargs)
     condition.update(if_true)
 
     if isinstance(if_false, core.SchemaBase):
@@ -353,7 +815,7 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
 
     _class_is_valid_at_instantiation = False
 
-    def to_dict(self, *args, **kwargs):
+    def to_dict(self, *args, **kwargs) -> dict:
         """Convert the chart to a dictionary suitable for JSON export"""
         # We make use of three context markers:
         # - 'data' points to the data that should be referenced for column type
@@ -369,7 +831,9 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         context.setdefault("datasets", {})
         is_top_level = context.get("top_level", True)
 
-        copy = self.copy(deep=False)
+        # TopLevelMixin instance does not necessarily have copy defined but due to how
+        # Altair is set up this should hold. Too complex to type hint right now
+        copy = self.copy(deep=False)  # type: ignore[attr-defined]
         original_data = getattr(copy, "data", Undefined)
         copy.data = _prepare_data(original_data, context)
 
@@ -380,17 +844,10 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         context["top_level"] = False
         kwargs["context"] = context
 
-        try:
-            dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)
-        except jsonschema.ValidationError:
-            dct = None
-
-        # If we hit an error, then re-convert with validate='deep' to get
-        # a more useful traceback. We don't do this by default because it's
-        # much slower in the case that there are no errors.
-        if dct is None:
-            kwargs["validate"] = "deep"
-            dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)
+        # TopLevelMixin instance does not necessarily have to_dict defined
+        # but due to how Altair is set up this should hold.
+        # Too complex to type hint right now
+        dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)  # type: ignore[misc]
 
         # TODO: following entries are added after validation. Should they be validated?
         if is_top_level:
@@ -400,6 +857,9 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
 
             # apply theme from theme registry
             the_theme = themes.get()
+            # Use assert to tell type checkers that it is not None. Holds true
+            # as there is always a default theme set when importing Altair
+            assert the_theme is not None
             dct = utils.update_nested(the_theme(), dct, copy=True)
 
             # update datasets
@@ -410,13 +870,13 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
 
     def to_html(
         self,
-        base_url="https://cdn.jsdelivr.net/npm/",
+        base_url="https://cdn.jsdelivr.net/npm",
         output_div="vis",
         embed_options=None,
         json_kwds=None,
         fullhtml=True,
         requirejs=False,
-    ):
+    ) -> str:
         return utils.spec_to_html(
             self.to_dict(),
             mode="vega-lite",
@@ -454,7 +914,7 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         format : string (optional)
             the format to write: one of ['json', 'html', 'png', 'svg', 'pdf'].
             If not specified, the format will be determined from the filename.
-        override_data_transformer : boolean (optional)
+        override_data_transformer : `boolean` (optional)
             If True (default), then the save action will be done with
             the MaxRowsError disabled. If False, then do not change the data
             transformer.
@@ -519,7 +979,7 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         layer=Undefined,
         columns=Undefined,
         **kwargs,
-    ):
+    ) -> "RepeatChart":
         """Return a RepeatChart built from the chart
 
         Fields within the chart can be set to correspond to the row or
@@ -558,40 +1018,40 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
             )
         elif repeat_specified and layer_specified:
             raise ValueError("repeat argument cannot be combined with layer argument.")
-        elif layer_specified and rowcol_specified:
-            raise ValueError(
-                "layer argument cannot be combined with row/column argument."
-            )
 
         if repeat_specified:
             repeat = repeat
         elif layer_specified:
-            repeat = core.LayerRepeatMapping(layer=layer)
+            repeat = core.LayerRepeatMapping(layer=layer, row=row, column=column)
         else:
             repeat = core.RepeatMapping(row=row, column=column)
 
         return RepeatChart(spec=self, repeat=repeat, columns=columns, **kwargs)
 
-    def properties(self, **kwargs):
+    def properties(self, **kwargs) -> Self:
         """Set top-level properties of the Chart.
 
         Argument names and types are the same as class initialization.
         """
-        copy = self.copy(deep=False)
+        # ignore type as copy comes from another class for subclasses of TopLevelMixin
+        copy = self.copy(deep=False)  # type: ignore[attr-defined]
         for key, val in kwargs.items():
-            if key == "selection" and isinstance(val, Selection):
+            if key == "selection" and isinstance(val, Parameter):
+                # TODO: Can this be removed
                 # For backward compatibility with old selection interface.
                 setattr(copy, key, {val.name: val.selection})
             else:
                 # Don't validate data, because it hasn't been processed.
                 if key != "data":
-                    self.validate_property(key, val)
+                    # ignore type as validate_property comes from SchemaBase,
+                    # not from TopLevelMixin
+                    self.validate_property(key, val)  # type: ignore[attr-defined]
                 setattr(copy, key, val)
         return copy
 
     def project(
         self,
-        type="mercator",
+        type=Undefined,
         center=Undefined,
         clipAngle=Undefined,
         clipExtent=Undefined,
@@ -611,7 +1071,7 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         tilt=Undefined,
         translate=Undefined,
         **kwds,
-    ):
+    ) -> Self:
         """Add a geographic projection to the chart.
 
         This is generally used either with ``mark_geoshape`` or with the
@@ -622,7 +1082,7 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         'conicConformal', 'conicEqualArea', 'conicEquidistant', 'equalEarth', 'equirectangular',
         'gnomonic', 'identity', 'mercator', 'orthographic', 'stereographic', 'transverseMercator']
 
-        Attributes
+        Parameters
         ----------
         type : ProjectionType
             The cartographic projection to use. This value is case-insensitive, for example
@@ -630,7 +1090,7 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
             projection types [in the
             documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).
 
-            **Default value:** `mercator`
+            **Default value:** `equalEarth`
         center : List(float)
             Sets the projection’s center to the specified center, a two-element array of
             longitude and latitude in degrees.
@@ -720,9 +1180,11 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         copy.transform.extend(transforms)
         return copy
 
-    def transform_aggregate(self, aggregate=Undefined, groupby=Undefined, **kwds):
+    def transform_aggregate(
+        self, aggregate=Undefined, groupby=Undefined, **kwds
+    ) -> Self:
         """
-        Add an AggregateTransform to the schema.
+        Add an :class:`AggregateTransform` to the schema.
 
         Parameters
         ----------
@@ -794,9 +1256,9 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
             core.AggregateTransform(aggregate=aggregate, groupby=groupby)
         )
 
-    def transform_bin(self, as_=Undefined, field=Undefined, bin=True, **kwargs):
+    def transform_bin(self, as_=Undefined, field=Undefined, bin=True, **kwargs) -> Self:
         """
-        Add a BinTransform to the schema.
+        Add a :class:`BinTransform` to the schema.
 
         Parameters
         ----------
@@ -850,9 +1312,9 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         kwargs["field"] = field
         return self._add_transform(core.BinTransform(**kwargs))
 
-    def transform_calculate(self, as_=Undefined, calculate=Undefined, **kwargs):
+    def transform_calculate(self, as_=Undefined, calculate=Undefined, **kwargs) -> Self:
         """
-        Add a CalculateTransform to the schema.
+        Add a :class:`CalculateTransform` to the schema.
 
         Parameters
         ----------
@@ -924,10 +1386,10 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         maxsteps=Undefined,
         minsteps=Undefined,
         steps=Undefined,
-    ):
-        """Add a DensityTransform to the spec.
+    ) -> Self:
+        """Add a :class:`DensityTransform` to the spec.
 
-        Attributes
+        Parameters
         ----------
         density : str
             The data field for which to perform density estimation.
@@ -989,9 +1451,9 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         keyvals=Undefined,
         method=Undefined,
         value=Undefined,
-    ):
+    ) -> Self:
         """
-        Add an ImputeTransform to the schema.
+        Add an :class:`ImputeTransform` to the schema.
 
         Parameters
         ----------
@@ -1052,9 +1514,9 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
 
     def transform_joinaggregate(
         self, joinaggregate=Undefined, groupby=Undefined, **kwargs
-    ):
+    ) -> Self:
         """
-        Add a JoinAggregateTransform to the schema.
+        Add a :class:`JoinAggregateTransform` to the schema.
 
         Parameters
         ----------
@@ -1102,9 +1564,10 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
             core.JoinAggregateTransform(joinaggregate=joinaggregate, groupby=groupby)
         )
 
-    def transform_filter(self, filter, **kwargs):
+    # TODO: Update docstring
+    def transform_filter(self, filter, **kwargs) -> Self:
         """
-        Add a FilterTransform to the schema.
+        Add a :class:`FilterTransform` to the schema.
 
         Parameters
         ----------
@@ -1126,14 +1589,17 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         alt.FilterTransform : underlying transform object
 
         """
-        if isinstance(filter, Selection):
-            filter = {"selection": filter.name}
-        elif isinstance(filter, core.SelectionComposition):
-            filter = {"selection": filter}
+        if isinstance(filter, Parameter):
+            new_filter = {"param": filter.name}
+            if "empty" in kwargs:
+                new_filter["empty"] = kwargs.pop("empty")
+            elif isinstance(filter.empty, bool):
+                new_filter["empty"] = filter.empty
+            filter = new_filter
         return self._add_transform(core.FilterTransform(filter=filter, **kwargs))
 
-    def transform_flatten(self, flatten, as_=Undefined):
-        """Add a FlattenTransform to the schema.
+    def transform_flatten(self, flatten, as_=Undefined) -> Self:
+        """Add a :class:`FlattenTransform` to the schema.
 
         Parameters
         ----------
@@ -1160,8 +1626,8 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
             core.FlattenTransform(flatten=flatten, **{"as": as_})
         )
 
-    def transform_fold(self, fold, as_=Undefined):
-        """Add a FoldTransform to the spec.
+    def transform_fold(self, fold, as_=Undefined) -> Self:
+        """Add a :class:`FoldTransform` to the spec.
 
         Parameters
         ----------
@@ -1184,9 +1650,14 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         return self._add_transform(core.FoldTransform(fold=fold, **{"as": as_}))
 
     def transform_loess(
-        self, on, loess, as_=Undefined, bandwidth=Undefined, groupby=Undefined
-    ):
-        """Add a LoessTransform to the spec.
+        self,
+        on,
+        loess,
+        as_=Undefined,
+        bandwidth=Undefined,
+        groupby=Undefined,
+    ) -> Self:
+        """Add a :class:`LoessTransform` to the spec.
 
         Parameters
         ----------
@@ -1227,10 +1698,10 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         as_=Undefined,
         default=Undefined,
         **kwargs,
-    ):
-        """Add a DataLookupTransform or SelectionLookupTransform to the chart
+    ) -> Self:
+        """Add a :class:`DataLookupTransform` or :class:`SelectionLookupTransform` to the chart
 
-        Attributes
+        Parameters
         ----------
         lookup : string
             Key in primary data source.
@@ -1276,9 +1747,14 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         return self._add_transform(core.LookupTransform(**kwargs))
 
     def transform_pivot(
-        self, pivot, value, groupby=Undefined, limit=Undefined, op=Undefined
-    ):
-        """Add a pivot transform to the chart.
+        self,
+        pivot,
+        value,
+        groupby=Undefined,
+        limit=Undefined,
+        op=Undefined,
+    ) -> Self:
+        """Add a :class:`PivotTransform` to the chart.
 
         Parameters
         ----------
@@ -1323,8 +1799,8 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         groupby=Undefined,
         probs=Undefined,
         step=Undefined,
-    ):
-        """Add a quantile transform to the chart
+    ) -> Self:
+        """Add a :class:`QuantileTransform` to the chart
 
         Parameters
         ----------
@@ -1372,8 +1848,8 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         method=Undefined,
         order=Undefined,
         params=Undefined,
-    ):
-        """Add a RegressionTransform to the chart.
+    ) -> Self:
+        """Add a :class:`RegressionTransform` to the chart.
 
         Parameters
         ----------
@@ -1427,9 +1903,9 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
             )
         )
 
-    def transform_sample(self, sample=1000):
+    def transform_sample(self, sample=1000) -> Self:
         """
-        Add a SampleTransform to the schema.
+        Add a :class:`SampleTransform` to the schema.
 
         Parameters
         ----------
@@ -1447,9 +1923,11 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         """
         return self._add_transform(core.SampleTransform(sample))
 
-    def transform_stack(self, as_, stack, groupby, offset=Undefined, sort=Undefined):
+    def transform_stack(
+        self, as_, stack, groupby, offset=Undefined, sort=Undefined
+    ) -> Self:
         """
-        Add a StackTransform to the schema.
+        Add a :class:`StackTransform` to the schema.
 
         Parameters
         ----------
@@ -1483,10 +1961,14 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         )
 
     def transform_timeunit(
-        self, as_=Undefined, field=Undefined, timeUnit=Undefined, **kwargs
-    ):
+        self,
+        as_=Undefined,
+        field=Undefined,
+        timeUnit=Undefined,
+        **kwargs,
+    ) -> Self:
         """
-        Add a TimeUnitTransform to the schema.
+        Add a :class:`TimeUnitTransform` to the schema.
 
         Parameters
         ----------
@@ -1570,8 +2052,8 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         ignorePeers=Undefined,
         sort=Undefined,
         **kwargs,
-    ):
-        """Add a WindowTransform to the schema
+    ) -> Self:
+        """Add a :class:`WindowTransform` to the schema
 
         Parameters
         ----------
@@ -1715,7 +2197,7 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         else:
             display(self)
 
-    @utils.deprecation.deprecated(message="serve() is deprecated. Use show() instead.")
+    @utils.deprecation.deprecated(message="'serve' is deprecated. Use 'show' instead.")
     def serve(
         self,
         ip="127.0.0.1",
@@ -1727,7 +2209,10 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         http_server=None,
         **kwargs,
     ):
-        """Open a browser window and display a rendering of the chart
+        """
+        'serve' is deprecated. Use 'show' instead.
+
+        Open a browser window and display a rendering of the chart
 
         Parameters
         ----------
@@ -1787,11 +2272,11 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         """
         try:
             import altair_viewer  # type: ignore
-        except ImportError:
+        except ImportError as err:
             raise ValueError(
-                "show() method requires the altair_viewer package. "
+                "'show' method requires the altair_viewer package. "
                 "See http://github.com/altair-viz/altair_viewer"
-            )
+            ) from err
         altair_viewer.show(self, embed_opt=embed_opt, open_browser=open_browser)
 
     @utils.use_signature(core.Resolve)
@@ -1809,26 +2294,27 @@ class TopLevelMixin(mixins.ConfigMethodMixin):
         return copy
 
     @utils.use_signature(core.AxisResolveMap)
-    def resolve_axis(self, *args, **kwargs):
+    def resolve_axis(self, *args, **kwargs) -> Self:
         return self._set_resolve(axis=core.AxisResolveMap(*args, **kwargs))
 
     @utils.use_signature(core.LegendResolveMap)
-    def resolve_legend(self, *args, **kwargs):
+    def resolve_legend(self, *args, **kwargs) -> Self:
         return self._set_resolve(legend=core.LegendResolveMap(*args, **kwargs))
 
     @utils.use_signature(core.ScaleResolveMap)
-    def resolve_scale(self, *args, **kwargs):
+    def resolve_scale(self, *args, **kwargs) -> Self:
         return self._set_resolve(scale=core.ScaleResolveMap(*args, **kwargs))
 
 
-class _EncodingMixin(object):
+class _EncodingMixin:
     @utils.use_signature(core.FacetedEncoding)
-    def encode(self, *args, **kwargs):
+    def encode(self, *args, **kwargs) -> Self:
         # Convert args to kwargs based on their types.
         kwargs = utils.infer_encoding_types(args, kwargs, channels)
 
         # get a copy of the dict representation of the previous encoding
-        copy = self.copy(deep=["encoding"])
+        # ignore type as copy method comes from SchemaBase
+        copy = self.copy(deep=["encoding"])  # type: ignore[attr-defined]
         encoding = copy._get("encoding", {})
         if isinstance(encoding, core.VegaLiteSchema):
             encoding = {k: v for k, v in encoding._kwds.items() if v is not Undefined}
@@ -1846,7 +2332,7 @@ class _EncodingMixin(object):
         data=Undefined,
         columns=Undefined,
         **kwargs,
-    ):
+    ) -> "FacetChart":
         """Create a facet chart from the current chart.
 
         Faceted charts require data to be specified at the top level; if data
@@ -1883,13 +2369,17 @@ class _EncodingMixin(object):
                 "facet argument cannot be combined with row/column argument."
             )
 
-        if data is Undefined:
-            if self.data is Undefined:
+        # Remove "ignore" statement once Undefined is no longer typed as Any
+        if data is Undefined:  # type: ignore
+            # Remove "ignore" statement once Undefined is no longer typed as Any
+            if self.data is Undefined:  # type: ignore
                 raise ValueError(
                     "Facet charts require data to be specified at the top level."
                 )
-            self = self.copy(deep=False)
-            data, self.data = self.data, Undefined
+            # ignore type as copy comes from another class
+            self = self.copy(deep=False)  # type: ignore[attr-defined]
+            # Remove "ignore" statement once Undefined is no longer typed as Any
+            data, self.data = self.data, Undefined  # type: ignore
 
         if facet_specified:
             if isinstance(facet, str):
@@ -1910,7 +2400,7 @@ class Chart(
     ``transform_filter()``, ``properties()``, etc. See Altair's documentation
     for details and examples: http://altair-viz.github.io/.
 
-    Attributes
+    Parameters
     ----------
     data : Data
         An object describing the data source
@@ -1924,7 +2414,7 @@ class Chart(
         Sets how the visualization size should be determined. If a string, should be one of
         `"pad"`, `"fit"` or `"none"`. Object values can additionally specify parameters for
         content sizing and automatic resizing. `"fit"` is only supported for single and
-        layered views that don't use `rangeStep`.  __Default value__: `pad`
+        layered views that don't use `rangeStep`.  Default value: `pad`
     background : string
         CSS color property to use as the background of visualization.
 
@@ -1942,8 +2432,8 @@ class Chart(
         The default visualization padding, in pixels, from the edge of the visualization
         canvas to the data rectangle.  If a number, specifies padding for all sides. If an
         object, the value should have the format `{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}` to specify padding for each side of the visualization.  __Default
-        value__: `5`
+        "bottom": 5}` to specify padding for each side of the visualization.  Default
+        value: `5`
     projection : Projection
         An object defining properties of geographic projection.  Works with `"geoshape"`
         marks and `"point"` or `"line"` marks that have a channel (one or more of `"X"`,
@@ -1976,8 +2466,15 @@ class Chart(
             **kwargs,
         )
 
+    _counter = 0
+
+    @classmethod
+    def _get_name(cls):
+        cls._counter += 1
+        return f"view_{cls._counter}"
+
     @classmethod
-    def from_dict(cls, dct, validate=True):
+    def from_dict(cls, dct, validate=True) -> "Chart":  # type: ignore[override]  # Not the same signature as SchemaBase.from_dict. Would ideally be aligned in the future
         """Construct class from a dictionary representation
 
         Parameters
@@ -1999,16 +2496,19 @@ class Chart(
         """
         for class_ in TopLevelMixin.__subclasses__():
             if class_ is Chart:
-                class_ = super(Chart, cls)
+                class_ = cast(TypingType[TopLevelMixin], super(Chart, cls))
             try:
-                return class_.from_dict(dct, validate=validate)
+                # TopLevelMixin classes don't necessarily have from_dict defined
+                # but all classes which are used here have due to how Altair is
+                # designed. Too complex to type check right now.
+                return class_.from_dict(dct, validate=validate)  # type: ignore[attr-defined]
             except jsonschema.ValidationError:
                 pass
 
         # As a last resort, try using the Root vegalite object
         return core.Root.from_dict(dct, validate)
 
-    def to_dict(self, *args, **kwargs):
+    def to_dict(self, *args, **kwargs) -> dict:
         """Convert the chart to a dictionary suitable for JSON export."""
         context = kwargs.get("context", {})
         if self.data is Undefined and "data" not in context:
@@ -2019,26 +2519,33 @@ class Chart(
             return super(Chart, copy).to_dict(*args, **kwargs)
         return super().to_dict(*args, **kwargs)
 
-    def add_selection(self, *selections):
-        """Add one or more selections to the chart."""
-        if not selections:
+    def add_params(self, *params) -> Self:
+        """Add one or more parameters to the chart."""
+        if not params:
             return self
-        copy = self.copy(deep=["selection"])
-        if copy.selection is Undefined:
-            copy.selection = {}
+        copy = self.copy(deep=["params"])
+        if copy.params is Undefined:
+            copy.params = []
 
-        for s in selections:
-            copy.selection[s.name] = s.selection
+        for s in params:
+            copy.params.append(s.param)
         return copy
 
-    def interactive(self, name=None, bind_x=True, bind_y=True):
+    @utils.deprecation.deprecated(
+        message="'add_selection' is deprecated. Use 'add_params' instead."
+    )
+    def add_selection(self, *params) -> Self:
+        """'add_selection' is deprecated. Use 'add_params' instead."""
+        return self.add_params(*params)
+
+    def interactive(self, name=None, bind_x=True, bind_y=True) -> Self:
         """Make chart axes scales interactive
 
         Parameters
         ----------
         name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
+            The parameter name to use for the axes scales. This name should be
+            unique among all parameters within the chart.
         bind_x : boolean, default True
             If true, then bind the interactive scales to the x-axis
         bind_y : boolean, default True
@@ -2055,9 +2562,7 @@ class Chart(
             encodings.append("x")
         if bind_y:
             encodings.append("y")
-        return self.add_selection(
-            selection_interval(bind="scales", encodings=encodings)
-        )
+        return self.add_params(selection_interval(bind="scales", encodings=encodings))
 
 
 def _check_if_valid_subspec(spec, classname):
@@ -2094,33 +2599,47 @@ def _check_if_can_be_layered(spec):
     if encoding is not Undefined:
         for channel in ["row", "column", "facet"]:
             if _get(encoding, channel) is not Undefined:
-                raise ValueError("Faceted charts cannot be layered.")
+                raise ValueError(
+                    "Faceted charts cannot be layered. Instead, layer the charts before faceting."
+                )
     if isinstance(spec, (Chart, LayerChart)):
         return
 
     if not isinstance(spec, (core.SchemaBase, dict)):
         raise ValueError("Only chart objects can be layered.")
     if _get(spec, "facet") is not Undefined:
-        raise ValueError("Faceted charts cannot be layered.")
+        raise ValueError(
+            "Faceted charts cannot be layered. Instead, layer the charts before faceting."
+        )
     if isinstance(spec, FacetChart) or _get(spec, "facet") is not Undefined:
-        raise ValueError("Faceted charts cannot be layered.")
+        raise ValueError(
+            "Faceted charts cannot be layered. Instead, layer the charts before faceting."
+        )
     if isinstance(spec, RepeatChart) or _get(spec, "repeat") is not Undefined:
-        raise ValueError("Repeat charts cannot be layered.")
+        raise ValueError(
+            "Repeat charts cannot be layered. Instead, layer the charts before repeating."
+        )
     if isinstance(spec, ConcatChart) or _get(spec, "concat") is not Undefined:
-        raise ValueError("Concatenated charts cannot be layered.")
+        raise ValueError(
+            "Concatenated charts cannot be layered. Instead, layer the charts before concatenating."
+        )
     if isinstance(spec, HConcatChart) or _get(spec, "hconcat") is not Undefined:
-        raise ValueError("Concatenated charts cannot be layered.")
+        raise ValueError(
+            "Concatenated charts cannot be layered. Instead, layer the charts before concatenating."
+        )
     if isinstance(spec, VConcatChart) or _get(spec, "vconcat") is not Undefined:
-        raise ValueError("Concatenated charts cannot be layered.")
+        raise ValueError(
+            "Concatenated charts cannot be layered. Instead, layer the charts before concatenating."
+        )
 
 
-@utils.use_signature(core.TopLevelRepeatSpec)
 class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec):
     """A chart repeated across rows and columns with small changes"""
 
     # Because TopLevelRepeatSpec is defined as a union as of Vega-Lite schema 4.9,
     # we set the arguments explicitly here.
     # TODO: Should we instead use tools/schemapi/codegen._get_args?
+    @utils.use_signature(core.TopLevelRepeatSpec)
     def __init__(
         self,
         repeat=Undefined,
@@ -2146,6 +2665,11 @@ class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec):
         **kwds,
     ):
         _check_if_valid_subspec(spec, "RepeatChart")
+        _spec_as_list = [spec]
+        params, _spec_as_list = _combine_subchart_params(params, _spec_as_list)
+        spec = _spec_as_list[0]
+        if isinstance(spec, (Chart, LayerChart)):
+            params = _repeat_names(params, repeat, spec)
         super(RepeatChart, self).__init__(
             repeat=repeat,
             spec=spec,
@@ -2170,14 +2694,14 @@ class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec):
             **kwds,
         )
 
-    def interactive(self, name=None, bind_x=True, bind_y=True):
+    def interactive(self, name=None, bind_x=True, bind_y=True) -> Self:
         """Make chart axes scales interactive
 
         Parameters
         ----------
         name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
+            The parameter name to use for the axes scales. This name should be
+            unique among all parameters within the chart.
         bind_x : boolean, default True
             If true, then bind the interactive scales to the x-axis
         bind_y : boolean, default True
@@ -2193,13 +2717,20 @@ class RepeatChart(TopLevelMixin, core.TopLevelRepeatSpec):
         copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y)
         return copy
 
-    def add_selection(self, *selections):
-        """Add one or more selections to the chart."""
-        if not selections or self.spec is Undefined:
+    def add_params(self, *params) -> Self:
+        """Add one or more parameters to the chart."""
+        if not params or self.spec is Undefined:
             return self
         copy = self.copy()
-        copy.spec = copy.spec.add_selection(*selections)
-        return copy
+        copy.spec = copy.spec.add_params(*params)
+        return copy.copy()
+
+    @utils.deprecation.deprecated(
+        message="'add_selection' is deprecated. Use 'add_params' instead."
+    )
+    def add_selection(self, *selections) -> Self:
+        """'add_selection' is deprecated. Use 'add_params' instead."""
+        return self.add_params(*selections)
 
 
 def repeat(repeater="repeat"):
@@ -2222,10 +2753,10 @@ def repeat(repeater="repeat"):
     return core.RepeatRef(repeat=repeater)
 
 
-@utils.use_signature(core.TopLevelNormalizedConcatSpecGenericSpec)
-class ConcatChart(TopLevelMixin, core.TopLevelNormalizedConcatSpecGenericSpec):
+class ConcatChart(TopLevelMixin, core.TopLevelConcatSpec):
     """A chart with horizontally-concatenated facets"""
 
+    @utils.use_signature(core.TopLevelConcatSpec)
     def __init__(self, data=Undefined, concat=(), columns=Undefined, **kwargs):
         # TODO: move common data to top level?
         for spec in concat:
@@ -2234,11 +2765,13 @@ class ConcatChart(TopLevelMixin, core.TopLevelNormalizedConcatSpecGenericSpec):
             data=data, concat=list(concat), columns=columns, **kwargs
         )
         self.data, self.concat = _combine_subchart_data(self.data, self.concat)
+        self.params, self.concat = _combine_subchart_params(self.params, self.concat)
 
     def __ior__(self, other):
         _check_if_valid_subspec(other, "ConcatChart")
         self.concat.append(other)
         self.data, self.concat = _combine_subchart_data(self.data, self.concat)
+        self.params, self.concat = _combine_subchart_params(self.params, self.concat)
         return self
 
     def __or__(self, other):
@@ -2246,35 +2779,70 @@ class ConcatChart(TopLevelMixin, core.TopLevelNormalizedConcatSpecGenericSpec):
         copy |= other
         return copy
 
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.concat:
+    def interactive(self, name=None, bind_x=True, bind_y=True) -> Self:
+        """Make chart axes scales interactive
+
+        Parameters
+        ----------
+        name : string
+            The parameter name to use for the axes scales. This name should be
+            unique among all parameters within the chart.
+        bind_x : boolean, default True
+            If true, then bind the interactive scales to the x-axis
+        bind_y : boolean, default True
+            If true, then bind the interactive scales to the y-axis
+
+        Returns
+        -------
+        chart :
+            copy of self, with interactive axes added
+
+        """
+        encodings = []
+        if bind_x:
+            encodings.append("x")
+        if bind_y:
+            encodings.append("y")
+        return self.add_params(selection_interval(bind="scales", encodings=encodings))
+
+    def add_params(self, *params) -> Self:
+        """Add one or more parameters to the chart."""
+        if not params or not self.concat:
             return self
         copy = self.copy()
-        copy.concat = [chart.add_selection(*selections) for chart in copy.concat]
+        copy.concat = [chart.add_params(*params) for chart in copy.concat]
         return copy
 
+    @utils.deprecation.deprecated(
+        message="'add_selection' is deprecated. Use 'add_params' instead."
+    )
+    def add_selection(self, *selections) -> Self:
+        """'add_selection' is deprecated. Use 'add_params' instead."""
+        return self.add_params(*selections)
+
 
 def concat(*charts, **kwargs):
     """Concatenate charts horizontally"""
     return ConcatChart(concat=charts, **kwargs)
 
 
-@utils.use_signature(core.TopLevelNormalizedHConcatSpecGenericSpec)
-class HConcatChart(TopLevelMixin, core.TopLevelNormalizedHConcatSpecGenericSpec):
+class HConcatChart(TopLevelMixin, core.TopLevelHConcatSpec):
     """A chart with horizontally-concatenated facets"""
 
+    @utils.use_signature(core.TopLevelHConcatSpec)
     def __init__(self, data=Undefined, hconcat=(), **kwargs):
         # TODO: move common data to top level?
         for spec in hconcat:
             _check_if_valid_subspec(spec, "HConcatChart")
         super(HConcatChart, self).__init__(data=data, hconcat=list(hconcat), **kwargs)
         self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat)
+        self.params, self.hconcat = _combine_subchart_params(self.params, self.hconcat)
 
     def __ior__(self, other):
         _check_if_valid_subspec(other, "HConcatChart")
         self.hconcat.append(other)
         self.data, self.hconcat = _combine_subchart_data(self.data, self.hconcat)
+        self.params, self.hconcat = _combine_subchart_params(self.params, self.hconcat)
         return self
 
     def __or__(self, other):
@@ -2282,35 +2850,70 @@ class HConcatChart(TopLevelMixin, core.TopLevelNormalizedHConcatSpecGenericSpec)
         copy |= other
         return copy
 
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.hconcat:
+    def interactive(self, name=None, bind_x=True, bind_y=True) -> Self:
+        """Make chart axes scales interactive
+
+        Parameters
+        ----------
+        name : string
+            The parameter name to use for the axes scales. This name should be
+            unique among all parameters within the chart.
+        bind_x : boolean, default True
+            If true, then bind the interactive scales to the x-axis
+        bind_y : boolean, default True
+            If true, then bind the interactive scales to the y-axis
+
+        Returns
+        -------
+        chart :
+            copy of self, with interactive axes added
+
+        """
+        encodings = []
+        if bind_x:
+            encodings.append("x")
+        if bind_y:
+            encodings.append("y")
+        return self.add_params(selection_interval(bind="scales", encodings=encodings))
+
+    def add_params(self, *params) -> Self:
+        """Add one or more parameters to the chart."""
+        if not params or not self.hconcat:
             return self
         copy = self.copy()
-        copy.hconcat = [chart.add_selection(*selections) for chart in copy.hconcat]
+        copy.hconcat = [chart.add_params(*params) for chart in copy.hconcat]
         return copy
 
+    @utils.deprecation.deprecated(
+        message="'add_selection' is deprecated. Use 'add_params' instead."
+    )
+    def add_selection(self, *selections) -> Self:
+        """'add_selection' is deprecated. Use 'add_params' instead."""
+        return self.add_params(*selections)
+
 
 def hconcat(*charts, **kwargs):
     """Concatenate charts horizontally"""
     return HConcatChart(hconcat=charts, **kwargs)
 
 
-@utils.use_signature(core.TopLevelNormalizedVConcatSpecGenericSpec)
-class VConcatChart(TopLevelMixin, core.TopLevelNormalizedVConcatSpecGenericSpec):
+class VConcatChart(TopLevelMixin, core.TopLevelVConcatSpec):
     """A chart with vertically-concatenated facets"""
 
+    @utils.use_signature(core.TopLevelVConcatSpec)
     def __init__(self, data=Undefined, vconcat=(), **kwargs):
         # TODO: move common data to top level?
         for spec in vconcat:
             _check_if_valid_subspec(spec, "VConcatChart")
         super(VConcatChart, self).__init__(data=data, vconcat=list(vconcat), **kwargs)
         self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat)
+        self.params, self.vconcat = _combine_subchart_params(self.params, self.vconcat)
 
     def __iand__(self, other):
         _check_if_valid_subspec(other, "VConcatChart")
         self.vconcat.append(other)
         self.data, self.vconcat = _combine_subchart_data(self.data, self.vconcat)
+        self.params, self.vconcat = _combine_subchart_params(self.params, self.vconcat)
         return self
 
     def __and__(self, other):
@@ -2318,24 +2921,57 @@ class VConcatChart(TopLevelMixin, core.TopLevelNormalizedVConcatSpecGenericSpec)
         copy &= other
         return copy
 
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.vconcat:
+    def interactive(self, name=None, bind_x=True, bind_y=True) -> Self:
+        """Make chart axes scales interactive
+
+        Parameters
+        ----------
+        name : string
+            The parameter name to use for the axes scales. This name should be
+            unique among all parameters within the chart.
+        bind_x : boolean, default True
+            If true, then bind the interactive scales to the x-axis
+        bind_y : boolean, default True
+            If true, then bind the interactive scales to the y-axis
+
+        Returns
+        -------
+        chart :
+            copy of self, with interactive axes added
+
+        """
+        encodings = []
+        if bind_x:
+            encodings.append("x")
+        if bind_y:
+            encodings.append("y")
+        return self.add_params(selection_interval(bind="scales", encodings=encodings))
+
+    def add_params(self, *params) -> Self:
+        """Add one or more parameters to the chart."""
+        if not params or not self.vconcat:
             return self
         copy = self.copy()
-        copy.vconcat = [chart.add_selection(*selections) for chart in copy.vconcat]
+        copy.vconcat = [chart.add_params(*params) for chart in copy.vconcat]
         return copy
 
+    @utils.deprecation.deprecated(
+        message="'add_selection' is deprecated. Use 'add_params' instead."
+    )
+    def add_selection(self, *selections) -> Self:
+        """'add_selection' is deprecated. Use 'add_params' instead."""
+        return self.add_params(*selections)
+
 
 def vconcat(*charts, **kwargs):
     """Concatenate charts vertically"""
     return VConcatChart(vconcat=charts, **kwargs)
 
 
-@utils.use_signature(core.TopLevelLayerSpec)
 class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec):
     """A Chart with layers within a single panel"""
 
+    @utils.use_signature(core.TopLevelLayerSpec)
     def __init__(self, data=Undefined, layer=(), **kwargs):
         # TODO: move common data to top level?
         # TODO: check for conflicting interaction
@@ -2344,12 +2980,23 @@ class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec):
             _check_if_can_be_layered(spec)
         super(LayerChart, self).__init__(data=data, layer=list(layer), **kwargs)
         self.data, self.layer = _combine_subchart_data(self.data, self.layer)
+        # Currently (Vega-Lite 5.5) the same param can't occur on two layers
+        self.layer = _remove_duplicate_params(self.layer)
+        self.params, self.layer = _combine_subchart_params(self.params, self.layer)
+
+        # Some properties are not allowed within layer; we'll move to parent.
+        layer_props = ("height", "width", "view")
+        combined_dict, self.layer = _remove_layer_props(self, self.layer, layer_props)
+
+        for prop in combined_dict:
+            self[prop] = combined_dict[prop]
 
     def __iadd__(self, other):
         _check_if_valid_subspec(other, "LayerChart")
         _check_if_can_be_layered(other)
         self.layer.append(other)
         self.data, self.layer = _combine_subchart_data(self.data, self.layer)
+        self.params, self.layer = _combine_subchart_params(self.params, self.layer)
         return self
 
     def __add__(self, other):
@@ -2357,20 +3004,20 @@ class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec):
         copy += other
         return copy
 
-    def add_layers(self, *layers):
+    def add_layers(self, *layers) -> Self:
         copy = self.copy(deep=["layer"])
         for layer in layers:
             copy += layer
         return copy
 
-    def interactive(self, name=None, bind_x=True, bind_y=True):
+    def interactive(self, name=None, bind_x=True, bind_y=True) -> Self:
         """Make chart axes scales interactive
 
         Parameters
         ----------
         name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
+            The parameter name to use for the axes scales. This name should be
+            unique among all parameters within the chart.
         bind_x : boolean, default True
             If true, then bind the interactive scales to the x-axis
         bind_y : boolean, default True
@@ -2392,13 +3039,20 @@ class LayerChart(TopLevelMixin, _EncodingMixin, core.TopLevelLayerSpec):
         )
         return copy
 
-    def add_selection(self, *selections):
-        """Add one or more selections to all subcharts."""
-        if not selections or not self.layer:
+    def add_params(self, *params) -> Self:
+        """Add one or more parameters to the chart."""
+        if not params or not self.layer:
             return self
         copy = self.copy()
-        copy.layer[0] = copy.layer[0].add_selection(*selections)
-        return copy
+        copy.layer[0] = copy.layer[0].add_params(*params)
+        return copy.copy()
+
+    @utils.deprecation.deprecated(
+        message="'add_selection' is deprecated. Use 'add_params' instead."
+    )
+    def add_selection(self, *selections) -> Self:
+        """'add_selection' is deprecated. Use 'add_params' instead."""
+        return self.add_params(*selections)
 
 
 def layer(*charts, **kwargs):
@@ -2406,22 +3060,34 @@ def layer(*charts, **kwargs):
     return LayerChart(layer=charts, **kwargs)
 
 
-@utils.use_signature(core.TopLevelFacetSpec)
 class FacetChart(TopLevelMixin, core.TopLevelFacetSpec):
     """A Chart with layers within a single panel"""
 
-    def __init__(self, data=Undefined, spec=Undefined, facet=Undefined, **kwargs):
+    @utils.use_signature(core.TopLevelFacetSpec)
+    def __init__(
+        self,
+        data=Undefined,
+        spec=Undefined,
+        facet=Undefined,
+        params=Undefined,
+        **kwargs,
+    ):
         _check_if_valid_subspec(spec, "FacetChart")
-        super(FacetChart, self).__init__(data=data, spec=spec, facet=facet, **kwargs)
+        _spec_as_list = [spec]
+        params, _spec_as_list = _combine_subchart_params(params, _spec_as_list)
+        spec = _spec_as_list[0]
+        super(FacetChart, self).__init__(
+            data=data, spec=spec, facet=facet, params=params, **kwargs
+        )
 
-    def interactive(self, name=None, bind_x=True, bind_y=True):
+    def interactive(self, name=None, bind_x=True, bind_y=True) -> Self:
         """Make chart axes scales interactive
 
         Parameters
         ----------
         name : string
-            The selection name to use for the axes scales. This name should be
-            unique among all selections within the chart.
+            The parameter name to use for the axes scales. This name should be
+            unique among all parameters within the chart.
         bind_x : boolean, default True
             If true, then bind the interactive scales to the x-axis
         bind_y : boolean, default True
@@ -2437,13 +3103,20 @@ class FacetChart(TopLevelMixin, core.TopLevelFacetSpec):
         copy.spec = copy.spec.interactive(name=name, bind_x=bind_x, bind_y=bind_y)
         return copy
 
-    def add_selection(self, *selections):
-        """Add one or more selections to the chart."""
-        if not selections or self.spec is Undefined:
+    def add_params(self, *params) -> Self:
+        """Add one or more parameters to the chart."""
+        if not params or self.spec is Undefined:
             return self
         copy = self.copy()
-        copy.spec = copy.spec.add_selection(*selections)
-        return copy
+        copy.spec = copy.spec.add_params(*params)
+        return copy.copy()
+
+    @utils.deprecation.deprecated(
+        message="'add_selection' is deprecated. Use 'add_params' instead."
+    )
+    def add_selection(self, *selections) -> Self:
+        """'add_selection' is deprecated. Use 'add_params' instead."""
+        return self.add_params(*selections)
 
 
 def topo_feature(url, feature, **kwargs):
@@ -2494,6 +3167,248 @@ def _combine_subchart_data(data, subcharts):
     return data, subcharts
 
 
+def _viewless_dict(param):
+    d = param.to_dict()
+    d.pop("views", None)
+    return d
+
+
+def _needs_name(subchart):
+    # Only `Chart` objects need a name
+    if (subchart.name is not Undefined) or (not isinstance(subchart, Chart)):
+        return False
+
+    # Variable parameters won't receive a views property.
+    if all(isinstance(p, core.VariableParameter) for p in subchart.params):
+        return False
+
+    return True
+
+
+# Convert SelectionParameters to TopLevelSelectionParameters with a views property.
+def _prepare_to_lift(param):
+    param = param.copy()
+
+    if isinstance(param, core.VariableParameter):
+        return param
+
+    if isinstance(param, core.SelectionParameter):
+        return core.TopLevelSelectionParameter(**param.to_dict(), views=[])
+
+    if param.views is Undefined:
+        param.views = []
+
+    return param
+
+
+def _remove_duplicate_params(layer):
+    subcharts = [subchart.copy() for subchart in layer]
+    found_params = []
+
+    for subchart in subcharts:
+        if (not hasattr(subchart, "params")) or (subchart.params is Undefined):
+            continue
+
+        params = []
+
+        # Ensure the same selection parameter doesn't appear twice
+        for param in subchart.params:
+            if isinstance(param, core.VariableParameter):
+                params.append(param)
+                continue
+
+            p = param.copy()
+            pd = _viewless_dict(p)
+
+            if pd not in found_params:
+                params.append(p)
+                found_params.append(pd)
+
+        if len(params) == 0:
+            subchart.params = Undefined
+        else:
+            subchart.params = params
+
+    return subcharts
+
+
+def _combine_subchart_params(params, subcharts):
+    if params is Undefined:
+        params = []
+
+    # List of triples related to params, (param, dictionary minus views, views)
+    param_info = []
+
+    # Put parameters already found into `param_info` list.
+    for param in params:
+        p = _prepare_to_lift(param)
+        param_info.append(
+            (
+                p,
+                _viewless_dict(p),
+                [] if isinstance(p, core.VariableParameter) else p.views,
+            )
+        )
+
+    subcharts = [subchart.copy() for subchart in subcharts]
+
+    for subchart in subcharts:
+        if (not hasattr(subchart, "params")) or (subchart.params is Undefined):
+            continue
+
+        if _needs_name(subchart):
+            subchart.name = subchart._get_name()
+
+        for param in subchart.params:
+            p = _prepare_to_lift(param)
+            pd = _viewless_dict(p)
+
+            dlist = [d for _, d, _ in param_info]
+            found = pd in dlist
+
+            if isinstance(p, core.VariableParameter) and found:
+                continue
+
+            if isinstance(p, core.VariableParameter) and not found:
+                param_info.append((p, pd, []))
+                continue
+
+            # At this stage in the loop, p must be a TopLevelSelectionParameter.
+
+            if isinstance(subchart, Chart) and (subchart.name not in p.views):
+                p.views.append(subchart.name)
+
+            if found:
+                i = dlist.index(pd)
+                _, _, old_views = param_info[i]
+                new_views = [v for v in p.views if v not in old_views]
+                old_views += new_views
+            else:
+                param_info.append((p, pd, p.views))
+
+        subchart.params = Undefined
+
+    for p, _, v in param_info:
+        if len(v) > 0:
+            p.views = v
+
+    subparams = [p for p, _, _ in param_info]
+
+    if len(subparams) == 0:
+        subparams = Undefined
+
+    return subparams, subcharts
+
+
+def _get_repeat_strings(repeat):
+    if isinstance(repeat, list):
+        return repeat
+    elif isinstance(repeat, core.LayerRepeatMapping):
+        klist = ["row", "column", "layer"]
+    elif isinstance(repeat, core.RepeatMapping):
+        klist = ["row", "column"]
+    rclist = [k for k in klist if repeat[k] is not Undefined]
+    rcstrings = [[f"{k}_{v}" for v in repeat[k]] for k in rclist]
+    return ["".join(s) for s in itertools.product(*rcstrings)]
+
+
+def _extend_view_name(v, r, spec):
+    # prevent the same extension from happening more than once
+    if isinstance(spec, Chart):
+        if v.endswith("child__" + r):
+            return v
+        else:
+            return f"{v}_child__{r}"
+    elif isinstance(spec, LayerChart):
+        if v.startswith("child__" + r):
+            return v
+        else:
+            return f"child__{r}_{v}"
+
+
+def _repeat_names(params, repeat, spec):
+    if params is Undefined:
+        return params
+
+    repeat = _get_repeat_strings(repeat)
+    params_named = []
+
+    for param in params:
+        if not isinstance(param, core.TopLevelSelectionParameter):
+            params_named.append(param)
+            continue
+        p = param.copy()
+        views = []
+        repeat_strings = _get_repeat_strings(repeat)
+        for v in param.views:
+            if isinstance(spec, Chart):
+                if any(v.endswith(f"child__{r}") for r in repeat_strings):
+                    views.append(v)
+                else:
+                    views += [_extend_view_name(v, r, spec) for r in repeat_strings]
+            elif isinstance(spec, LayerChart):
+                if any(v.startswith(f"child__{r}") for r in repeat_strings):
+                    views.append(v)
+                else:
+                    views += [_extend_view_name(v, r, spec) for r in repeat_strings]
+
+        p.views = views
+        params_named.append(p)
+
+    return params_named
+
+
+def _remove_layer_props(chart, subcharts, layer_props):
+    def remove_prop(subchart, prop):
+        # If subchart is a UnitSpec, then subchart["height"] raises a KeyError
+        try:
+            if subchart[prop] is not Undefined:
+                subchart = subchart.copy()
+                subchart[prop] = Undefined
+        except KeyError:
+            pass
+        return subchart
+
+    output_dict = {}
+
+    if not subcharts:
+        # No subcharts = nothing to do.
+        return output_dict, subcharts
+
+    for prop in layer_props:
+        if chart[prop] is Undefined:
+            # Top level does not have this prop.
+            # Check for consistent props within the subcharts.
+            values = []
+            for c in subcharts:
+                # If c is a UnitSpec, then c["height"] raises a KeyError.
+                try:
+                    val = c[prop]
+                    if val is not Undefined:
+                        values.append(val)
+                except KeyError:
+                    pass
+            if len(values) == 0:
+                pass
+            elif all(v == values[0] for v in values[1:]):
+                output_dict[prop] = values[0]
+            else:
+                raise ValueError(f"There are inconsistent values {values} for {prop}")
+        else:
+            # Top level has this prop; subchart must either not have the prop
+            # or it must be Undefined or identical to proceed.
+            if all(
+                getattr(c, prop, Undefined) is Undefined or c[prop] == chart[prop]
+                for c in subcharts
+            ):
+                output_dict[prop] = chart[prop]
+            else:
+                raise ValueError(f"There are inconsistent values {values} for {prop}")
+        subcharts = [remove_prop(c, prop) for c in subcharts]
+
+    return output_dict, subcharts
+
+
 @utils.use_signature(core.SequenceParams)
 def sequence(start, stop=None, step=Undefined, as_=Undefined, **kwds):
     """Sequence generator."""
diff --git a/altair/vegalite/v4/data.py b/altair/vegalite/v5/data.py
similarity index 90%
rename from altair/vegalite/v4/data.py
rename to altair/vegalite/v5/data.py
index e379a20..703dffb 100644
--- a/altair/vegalite/v4/data.py
+++ b/altair/vegalite/v5/data.py
@@ -13,11 +13,11 @@ from ..data import (
 
 
 # ==============================================================================
-# VegaLite 4 data transformers
+# VegaLite 5 data transformers
 # ==============================================================================
 
 
-ENTRY_POINT_GROUP = "altair.vegalite.v4.data_transformer"  # type: str
+ENTRY_POINT_GROUP = "altair.vegalite.v5.data_transformer"  # type: str
 
 
 data_transformers = DataTransformerRegistry(
diff --git a/altair/vegalite/v4/display.py b/altair/vegalite/v5/display.py
similarity index 84%
rename from altair/vegalite/v4/display.py
rename to altair/vegalite/v5/display.py
index 7615fc4..ba69e02 100644
--- a/altair/vegalite/v4/display.py
+++ b/altair/vegalite/v5/display.py
@@ -15,25 +15,25 @@ VEGAEMBED_VERSION = "6"
 
 
 # ==============================================================================
-# VegaLite v4 renderer logic
+# VegaLite v5 renderer logic
 # ==============================================================================
 
 
-# The MIME type for Vega-Lite 4.x releases.
-VEGALITE_MIME_TYPE = "application/vnd.vegalite.v4+json"  # type: str
+# The MIME type for Vega-Lite 5.x releases.
+VEGALITE_MIME_TYPE = "application/vnd.vegalite.v5+json"  # type: str
 
 # The entry point group that can be used by other packages to declare other
 # renderers that will be auto-detected. Explicit registration is also
 # allowed by the PluginRegistery API.
-ENTRY_POINT_GROUP = "altair.vegalite.v4.renderer"  # type: str
+ENTRY_POINT_GROUP = "altair.vegalite.v5.renderer"  # type: str
 
 # The display message when rendering fails
 DEFAULT_DISPLAY = """\
-<VegaLite 4 object>
+<VegaLite 5 object>
 
 If you see this message, it means the renderer has not been properly enabled
 for the frontend that you are using. For more information, see
-https://altair-viz.github.io/user_guide/troubleshooting.html
+https://altair-viz.github.io/user_guide/display_frontends.html#troubleshooting
 """
 
 renderers = RendererRegistry(entry_point_group=ENTRY_POINT_GROUP)
@@ -96,23 +96,23 @@ renderers.enable("default")
 
 
 class VegaLite(Displayable):
-    """An IPython/Jupyter display class for rendering VegaLite 4."""
+    """An IPython/Jupyter display class for rendering VegaLite 5."""
 
     renderers = renderers
     schema_path = (__name__, "schema/vega-lite-schema.json")
 
 
 def vegalite(spec, validate=True):
-    """Render and optionally validate a VegaLite 4 spec.
+    """Render and optionally validate a VegaLite 5 spec.
 
     This will use the currently enabled renderer to render the spec.
 
     Parameters
     ==========
     spec: dict
-        A fully compliant VegaLite 4 spec, with the data portion fully processed.
+        A fully compliant VegaLite 5 spec, with the data portion fully processed.
     validate: bool
-        Should the spec be validated against the VegaLite 4 schema?
+        Should the spec be validated against the VegaLite 5 schema?
     """
     from IPython.display import display
 
diff --git a/altair/vegalite/v5/schema/__init__.py b/altair/vegalite/v5/schema/__init__.py
new file mode 100644
index 0000000..123a3fb
--- /dev/null
+++ b/altair/vegalite/v5/schema/__init__.py
@@ -0,0 +1,5 @@
+# ruff: noqa
+from .core import *
+from .channels import *
+SCHEMA_VERSION = 'v5.8.0'
+SCHEMA_URL = 'https://vega.github.io/schema/vega-lite/v5.8.0.json'
diff --git a/altair/vegalite/v5/schema/channels.py b/altair/vegalite/v5/schema/channels.py
new file mode 100644
index 0000000..07f9f43
--- /dev/null
+++ b/altair/vegalite/v5/schema/channels.py
@@ -0,0 +1,17317 @@
+# The contents of this file are automatically written by
+# tools/generate_schema_wrapper.py. Do not modify directly.
+
+import sys
+from . import core
+import pandas as pd
+from altair.utils.schemapi import Undefined, with_property_setters
+from altair.utils import parse_shorthand
+from typing import overload, List
+
+if sys.version_info >= (3, 8):
+    from typing import Literal
+else:
+    from typing_extensions import Literal
+
+
+class FieldChannelMixin:
+    def to_dict(self, validate=True, ignore=(), context=None):
+        context = context or {}
+        shorthand = self._get('shorthand')
+        field = self._get('field')
+
+        if shorthand is not Undefined and field is not Undefined:
+            raise ValueError("{} specifies both shorthand={} and field={}. "
+                             "".format(self.__class__.__name__, shorthand, field))
+
+        if isinstance(shorthand, (tuple, list)):
+            # If given a list of shorthands, then transform it to a list of classes
+            kwds = self._kwds.copy()
+            kwds.pop('shorthand')
+            return [self.__class__(sh, **kwds).to_dict(validate=validate, ignore=ignore, context=context)
+                    for sh in shorthand]
+
+        if shorthand is Undefined:
+            parsed = {}
+        elif isinstance(shorthand, str):
+            parsed = parse_shorthand(shorthand, data=context.get('data', None))
+            type_required = 'type' in self._kwds
+            type_in_shorthand = 'type' in parsed
+            type_defined_explicitly = self._get('type') is not Undefined
+            if not type_required:
+                # Secondary field names don't require a type argument in VegaLite 3+.
+                # We still parse it out of the shorthand, but drop it here.
+                parsed.pop('type', None)
+            elif not (type_in_shorthand or type_defined_explicitly):
+                if isinstance(context.get('data', None), pd.DataFrame):
+                    raise ValueError(
+                        'Unable to determine data type for the field "{}";'
+                        " verify that the field name is not misspelled."
+                        " If you are referencing a field from a transform,"
+                        " also confirm that the data type is specified correctly.".format(shorthand)
+                    )
+                else:
+                    raise ValueError("{} encoding field is specified without a type; "
+                                     "the type cannot be automatically inferred because "
+                                     "the data is not specified as a pandas.DataFrame."
+                                     "".format(shorthand))
+        else:
+            # Shorthand is not a string; we pass the definition to field,
+            # and do not do any parsing.
+            parsed = {'field': shorthand}
+        context["parsed_shorthand"] = parsed
+
+        return super(FieldChannelMixin, self).to_dict(
+            validate=validate,
+            ignore=ignore,
+            context=context
+        )
+
+
+class ValueChannelMixin:
+    def to_dict(self, validate=True, ignore=(), context=None):
+        context = context or {}
+        condition = self._get('condition', Undefined)
+        copy = self  # don't copy unless we need to
+        if condition is not Undefined:
+            if isinstance(condition, core.SchemaBase):
+                pass
+            elif 'field' in condition and 'type' not in condition:
+                kwds = parse_shorthand(condition['field'], context.get('data', None))
+                copy = self.copy(deep=['condition'])
+                copy['condition'].update(kwds)
+        return super(ValueChannelMixin, copy).to_dict(validate=validate,
+                                                      ignore=ignore,
+                                                      context=context)
+
+
+class DatumChannelMixin:
+    def to_dict(self, validate=True, ignore=(), context=None):
+        context = context or {}
+        datum = self._get('datum', Undefined)
+        copy = self  # don't copy unless we need to
+        if datum is not Undefined:
+            if isinstance(datum, core.SchemaBase):
+                pass
+        return super(DatumChannelMixin, copy).to_dict(validate=validate,
+                                                      ignore=ignore,
+                                                      context=context)
+
+
+@with_property_setters
+class Angle(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
+    """Angle schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "angle"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Angle':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Angle':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Angle':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Angle':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Angle, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                    bin=bin, condition=condition, field=field, legend=legend,
+                                    scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type,
+                                    **kwds)
+
+
+@with_property_setters
+class AngleDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
+    """AngleDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "angle"
+
+    def bandPosition(self, _: float, **kwds) -> 'AngleDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'AngleDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'AngleDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'AngleDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'AngleDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'AngleDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'AngleDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'AngleDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(AngleDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                         title=title, type=type, **kwds)
+
+
+@with_property_setters
+class AngleValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
+    """AngleValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(float, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "angle"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'AngleValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'AngleValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'AngleValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'AngleValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'AngleValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'AngleValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'AngleValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(AngleValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Color(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull):
+    """Color schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "color"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Color':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Color':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Color':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Color':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Color, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                    bin=bin, condition=condition, field=field, legend=legend,
+                                    scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type,
+                                    **kwds)
+
+
+@with_property_setters
+class ColorDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefGradientstringnull):
+    """ColorDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "color"
+
+    def bandPosition(self, _: float, **kwds) -> 'ColorDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'ColorDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'ColorDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'ColorDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'ColorDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'ColorDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'ColorDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'ColorDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(ColorDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                         title=title, type=type, **kwds)
+
+
+@with_property_setters
+class ColorValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull):
+    """ColorValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "color"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ColorValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ColorValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ColorValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ColorValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'ColorValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'ColorValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'ColorValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(ColorValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Column(FieldChannelMixin, core.RowColumnEncodingFieldDef):
+    """Column schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    align : :class:`LayoutAlign`
+        The alignment to apply to row/column facet's subplot. The supported string values
+        are ``"all"``, ``"each"``, and ``"none"``.
+
+
+        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
+          identically based on the maximum observed size. String values for this property
+          will be applied to both grid rows and columns.
+
+        **Default value:** ``"all"``.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    center : boolean
+        Boolean flag indicating if facet's subviews should be centered relative to their
+        respective rows or columns.
+
+        **Default value:** ``false``
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    header : anyOf(:class:`Header`, None)
+        An object defining properties of a facet's header.
+    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` is not supported for ``row`` and ``column``.
+    spacing : float
+        The spacing in pixels between facet's sub-views.
+
+        **Default value** : Depends on ``"spacing"`` property of `the view composition
+        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
+        ``20`` by default)
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "column"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Column':
+        ...
+
+    def align(self, _: Literal["all", "each", "none"], **kwds) -> 'Column':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Column':
+        ...
+
+    def center(self, _: bool, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def header(self, format=Undefined, formatType=Undefined, labelAlign=Undefined, labelAnchor=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, orient=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def header(self, _: None, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Column':
+        ...
+
+    def spacing(self, _: float, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Column':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Column':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Column':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined,
+                 bandPosition=Undefined, bin=Undefined, center=Undefined, field=Undefined,
+                 header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
+        super(Column, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align,
+                                     bandPosition=bandPosition, bin=bin, center=center, field=field,
+                                     header=header, sort=sort, spacing=spacing, timeUnit=timeUnit,
+                                     title=title, type=type, **kwds)
+
+
+@with_property_setters
+class Description(FieldChannelMixin, core.StringFieldDefWithCondition):
+    """Description schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefstringExprRef`, List(:class:`ConditionalValueDefstringExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    format : anyOf(string, :class:`Dict`)
+        When used with the default ``"number"`` and ``"time"`` format type, the text
+        formatting pattern for labels of guides (axes, legends, headers) and text marks.
+
+
+        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
+
+        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
+        for more examples.
+
+        When used with a `custom formatType
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
+        value will be passed as ``format`` alongside ``datum.value`` to the registered
+        function.
+
+        **Default value:**  Derived from `numberFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
+        format and from `timeFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
+        format.
+    formatType : string
+        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
+        format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
+
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "description"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Description':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringExprRef], **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: str, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: dict, **kwds) -> 'Description':
+        ...
+
+    def formatType(self, _: str, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Description':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Description':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Description':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
+                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Description, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                          bandPosition=bandPosition, bin=bin, condition=condition,
+                                          field=field, format=format, formatType=formatType,
+                                          timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class DescriptionValue(ValueChannelMixin, core.StringValueDefWithCondition):
+    """DescriptionValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "description"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'DescriptionValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'DescriptionValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'DescriptionValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'DescriptionValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'DescriptionValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'DescriptionValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringnullExprRef], **kwds) -> 'DescriptionValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(DescriptionValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Detail(FieldChannelMixin, core.FieldDefWithoutScale):
+    """Detail schema wrapper
+
+    Mapping(required=[shorthand])
+    Definition object for a data field, its type and transformation of an encoding channel.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "detail"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Detail':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Detail':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Detail':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Detail':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Detail, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                     bandPosition=bandPosition, bin=bin, field=field, timeUnit=timeUnit,
+                                     title=title, type=type, **kwds)
+
+
+@with_property_setters
+class Facet(FieldChannelMixin, core.FacetEncodingFieldDef):
+    """Facet schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
+        The alignment to apply to grid rows and columns. The supported string values are
+        ``"all"``, ``"each"``, and ``"none"``.
+
+
+        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
+          identically based on the maximum observed size. String values for this property
+          will be applied to both grid rows and columns.
+
+        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
+        be used to supply different alignments for rows and columns.
+
+        **Default value:** ``"all"``.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    bounds : enum('full', 'flush')
+        The bounds calculation method to use for determining the extent of a sub-plot. One
+        of ``full`` (the default) or ``flush``.
+
+
+        * If set to ``full``, the entire calculated bounds (including axes, title, and
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
+
+        **Default value:** ``"full"``
+    center : anyOf(boolean, :class:`RowColboolean`)
+        Boolean flag indicating if subviews should be centered relative to their respective
+        rows or columns.
+
+        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
+        supply different centering values for rows and columns.
+
+        **Default value:** ``false``
+    columns : float
+        The number of columns to include in the view composition layout.
+
+        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
+        will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using
+        the ``column`` channel (for ``facet`` and ``repeat`` ).
+
+        **Note** :
+
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
+
+        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
+        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    header : anyOf(:class:`Header`, None)
+        An object defining properties of a facet's header.
+    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` is not supported for ``row`` and ``column``.
+    spacing : anyOf(float, :class:`RowColnumber`)
+        The spacing in pixels between sub-views of the composition operator. An object of
+        the form ``{"row": number, "column": number}`` can be used to set different spacing
+        values for rows and columns.
+
+        **Default value** : Depends on ``"spacing"`` property of `the view composition
+        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
+        ``20`` by default)
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "facet"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def align(self, _: Literal["all", "each", "none"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def align(self, column=Undefined, row=Undefined, **kwds) -> 'Facet':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Facet':
+        ...
+
+    def bounds(self, _: Literal["full", "flush"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def center(self, _: bool, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def center(self, column=Undefined, row=Undefined, **kwds) -> 'Facet':
+        ...
+
+    def columns(self, _: float, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def header(self, format=Undefined, formatType=Undefined, labelAlign=Undefined, labelAnchor=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, orient=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def header(self, _: None, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def spacing(self, _: float, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def spacing(self, column=Undefined, row=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Facet':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Facet':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Facet':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined,
+                 bandPosition=Undefined, bin=Undefined, bounds=Undefined, center=Undefined,
+                 columns=Undefined, field=Undefined, header=Undefined, sort=Undefined,
+                 spacing=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Facet, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align,
+                                    bandPosition=bandPosition, bin=bin, bounds=bounds, center=center,
+                                    columns=columns, field=field, header=header, sort=sort,
+                                    spacing=spacing, timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class Fill(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull):
+    """Fill schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "fill"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Fill':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Fill':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Fill':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Fill':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Fill, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                   bin=bin, condition=condition, field=field, legend=legend,
+                                   scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type,
+                                   **kwds)
+
+
+@with_property_setters
+class FillDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefGradientstringnull):
+    """FillDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "fill"
+
+    def bandPosition(self, _: float, **kwds) -> 'FillDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'FillDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'FillDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'FillDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'FillDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'FillDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'FillDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'FillDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(FillDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                        title=title, type=type, **kwds)
+
+
+@with_property_setters
+class FillValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull):
+    """FillValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "fill"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'FillValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'FillValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'FillValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(FillValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class FillOpacity(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
+    """FillOpacity schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "fillOpacity"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'FillOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'FillOpacity':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'FillOpacity':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(FillOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                          bandPosition=bandPosition, bin=bin, condition=condition,
+                                          field=field, legend=legend, scale=scale, sort=sort,
+                                          timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class FillOpacityDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
+    """FillOpacityDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "fillOpacity"
+
+    def bandPosition(self, _: float, **kwds) -> 'FillOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'FillOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'FillOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'FillOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'FillOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'FillOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'FillOpacityDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'FillOpacityDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(FillOpacityDatum, self).__init__(datum=datum, bandPosition=bandPosition,
+                                               condition=condition, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class FillOpacityValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
+    """FillOpacityValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(float, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "fillOpacity"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'FillOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'FillOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'FillOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'FillOpacityValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(FillOpacityValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Href(FieldChannelMixin, core.StringFieldDefWithCondition):
+    """Href schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefstringExprRef`, List(:class:`ConditionalValueDefstringExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    format : anyOf(string, :class:`Dict`)
+        When used with the default ``"number"`` and ``"time"`` format type, the text
+        formatting pattern for labels of guides (axes, legends, headers) and text marks.
+
+
+        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
+
+        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
+        for more examples.
+
+        When used with a `custom formatType
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
+        value will be passed as ``format`` alongside ``datum.value`` to the registered
+        function.
+
+        **Default value:**  Derived from `numberFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
+        format and from `timeFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
+        format.
+    formatType : string
+        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
+        format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
+
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "href"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Href':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringExprRef], **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: str, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: dict, **kwds) -> 'Href':
+        ...
+
+    def formatType(self, _: str, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Href':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Href':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Href':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
+                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Href, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                   bin=bin, condition=condition, field=field, format=format,
+                                   formatType=formatType, timeUnit=timeUnit, title=title, type=type,
+                                   **kwds)
+
+
+@with_property_setters
+class HrefValue(ValueChannelMixin, core.StringValueDefWithCondition):
+    """HrefValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "href"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'HrefValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'HrefValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'HrefValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'HrefValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'HrefValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'HrefValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringnullExprRef], **kwds) -> 'HrefValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(HrefValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Key(FieldChannelMixin, core.FieldDefWithoutScale):
+    """Key schema wrapper
+
+    Mapping(required=[shorthand])
+    Definition object for a data field, its type and transformation of an encoding channel.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "key"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Key':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Key':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Key':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Key':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Key, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                  bin=bin, field=field, timeUnit=timeUnit, title=title, type=type,
+                                  **kwds)
+
+
+@with_property_setters
+class Latitude(FieldChannelMixin, core.LatLongFieldDef):
+    """Latitude schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : string
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "latitude"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Latitude':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Latitude':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Latitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Latitude':
+        ...
+
+    def type(self, _: str, **kwds) -> 'Latitude':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Latitude, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                       bandPosition=bandPosition, bin=bin, field=field,
+                                       timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class LatitudeDatum(DatumChannelMixin, core.DatumDef):
+    """LatitudeDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "latitude"
+
+    def bandPosition(self, _: float, **kwds) -> 'LatitudeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'LatitudeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'LatitudeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'LatitudeDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'LatitudeDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(LatitudeDatum, self).__init__(datum=datum, bandPosition=bandPosition, title=title,
+                                            type=type, **kwds)
+
+
+@with_property_setters
+class Latitude2(FieldChannelMixin, core.SecondaryFieldDef):
+    """Latitude2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "latitude2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Latitude2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Latitude2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Latitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Latitude2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(Latitude2, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                        bandPosition=bandPosition, bin=bin, field=field,
+                                        timeUnit=timeUnit, title=title, **kwds)
+
+
+@with_property_setters
+class Latitude2Datum(DatumChannelMixin, core.DatumDef):
+    """Latitude2Datum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "latitude2"
+
+    def bandPosition(self, _: float, **kwds) -> 'Latitude2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Latitude2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Latitude2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Latitude2Datum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'Latitude2Datum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Latitude2Datum, self).__init__(datum=datum, bandPosition=bandPosition, title=title,
+                                             type=type, **kwds)
+
+
+@with_property_setters
+class Latitude2Value(ValueChannelMixin, core.PositionValueDef):
+    """Latitude2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "latitude2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(Latitude2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Longitude(FieldChannelMixin, core.LatLongFieldDef):
+    """Longitude schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : string
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "longitude"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Longitude':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Longitude':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Longitude':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Longitude':
+        ...
+
+    def type(self, _: str, **kwds) -> 'Longitude':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Longitude, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                        bandPosition=bandPosition, bin=bin, field=field,
+                                        timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class LongitudeDatum(DatumChannelMixin, core.DatumDef):
+    """LongitudeDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "longitude"
+
+    def bandPosition(self, _: float, **kwds) -> 'LongitudeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'LongitudeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'LongitudeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'LongitudeDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'LongitudeDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(LongitudeDatum, self).__init__(datum=datum, bandPosition=bandPosition, title=title,
+                                             type=type, **kwds)
+
+
+@with_property_setters
+class Longitude2(FieldChannelMixin, core.SecondaryFieldDef):
+    """Longitude2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "longitude2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Longitude2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Longitude2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Longitude2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Longitude2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(Longitude2, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                         bandPosition=bandPosition, bin=bin, field=field,
+                                         timeUnit=timeUnit, title=title, **kwds)
+
+
+@with_property_setters
+class Longitude2Datum(DatumChannelMixin, core.DatumDef):
+    """Longitude2Datum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "longitude2"
+
+    def bandPosition(self, _: float, **kwds) -> 'Longitude2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Longitude2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Longitude2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Longitude2Datum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'Longitude2Datum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Longitude2Datum, self).__init__(datum=datum, bandPosition=bandPosition, title=title,
+                                              type=type, **kwds)
+
+
+@with_property_setters
+class Longitude2Value(ValueChannelMixin, core.PositionValueDef):
+    """Longitude2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "longitude2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(Longitude2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Opacity(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
+    """Opacity schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "opacity"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Opacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Opacity':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Opacity':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Opacity, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                      bandPosition=bandPosition, bin=bin, condition=condition,
+                                      field=field, legend=legend, scale=scale, sort=sort,
+                                      timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class OpacityDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
+    """OpacityDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "opacity"
+
+    def bandPosition(self, _: float, **kwds) -> 'OpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'OpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'OpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'OpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'OpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'OpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'OpacityDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'OpacityDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(OpacityDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                           title=title, type=type, **kwds)
+
+
+@with_property_setters
+class OpacityValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
+    """OpacityValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(float, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "opacity"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'OpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'OpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'OpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'OpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'OpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'OpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'OpacityValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(OpacityValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Order(FieldChannelMixin, core.OrderFieldDef):
+    """Order schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    sort : :class:`SortOrder`
+        The sort order. One of ``"ascending"`` (default) or ``"descending"``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "order"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Order':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Order':
+        ...
+
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Order':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Order':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Order':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
+                 **kwds):
+        super(Order, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                    bin=bin, field=field, sort=sort, timeUnit=timeUnit, title=title,
+                                    type=type, **kwds)
+
+
+@with_property_setters
+class OrderValue(ValueChannelMixin, core.OrderValueDef):
+    """OrderValue schema wrapper
+
+    Mapping(required=[value])
+
+    Parameters
+    ----------
+
+    value : anyOf(float, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    condition : anyOf(:class:`ConditionalValueDefnumber`, List(:class:`ConditionalValueDefnumber`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "order"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'OrderValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'OrderValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumber], **kwds) -> 'OrderValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(OrderValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Radius(FieldChannelMixin, core.PositionFieldDefBase):
+    """Radius schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "radius"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Radius':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Radius':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Radius':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Radius':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
+        super(Radius, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                     bandPosition=bandPosition, bin=bin, field=field, scale=scale,
+                                     sort=sort, stack=stack, timeUnit=timeUnit, title=title, type=type,
+                                     **kwds)
+
+
+@with_property_setters
+class RadiusDatum(DatumChannelMixin, core.PositionDatumDefBase):
+    """RadiusDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "radius"
+
+    def bandPosition(self, _: float, **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'RadiusDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'RadiusDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'RadiusDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, scale=Undefined, stack=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(RadiusDatum, self).__init__(datum=datum, bandPosition=bandPosition, scale=scale,
+                                          stack=stack, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class RadiusValue(ValueChannelMixin, core.PositionValueDef):
+    """RadiusValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "radius"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(RadiusValue, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Radius2(FieldChannelMixin, core.SecondaryFieldDef):
+    """Radius2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "radius2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Radius2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Radius2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Radius2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Radius2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(Radius2, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                      bandPosition=bandPosition, bin=bin, field=field,
+                                      timeUnit=timeUnit, title=title, **kwds)
+
+
+@with_property_setters
+class Radius2Datum(DatumChannelMixin, core.DatumDef):
+    """Radius2Datum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "radius2"
+
+    def bandPosition(self, _: float, **kwds) -> 'Radius2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Radius2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Radius2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Radius2Datum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'Radius2Datum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Radius2Datum, self).__init__(datum=datum, bandPosition=bandPosition, title=title,
+                                           type=type, **kwds)
+
+
+@with_property_setters
+class Radius2Value(ValueChannelMixin, core.PositionValueDef):
+    """Radius2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "radius2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(Radius2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Row(FieldChannelMixin, core.RowColumnEncodingFieldDef):
+    """Row schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    align : :class:`LayoutAlign`
+        The alignment to apply to row/column facet's subplot. The supported string values
+        are ``"all"``, ``"each"``, and ``"none"``.
+
+
+        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
+          identically based on the maximum observed size. String values for this property
+          will be applied to both grid rows and columns.
+
+        **Default value:** ``"all"``.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    center : boolean
+        Boolean flag indicating if facet's subviews should be centered relative to their
+        respective rows or columns.
+
+        **Default value:** ``false``
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    header : anyOf(:class:`Header`, None)
+        An object defining properties of a facet's header.
+    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` is not supported for ``row`` and ``column``.
+    spacing : float
+        The spacing in pixels between facet's sub-views.
+
+        **Default value** : Depends on ``"spacing"`` property of `the view composition
+        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
+        ``20`` by default)
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "row"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Row':
+        ...
+
+    def align(self, _: Literal["all", "each", "none"], **kwds) -> 'Row':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Row':
+        ...
+
+    def center(self, _: bool, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def header(self, format=Undefined, formatType=Undefined, labelAlign=Undefined, labelAnchor=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOrient=Undefined, labelPadding=Undefined, labels=Undefined, orient=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOrient=Undefined, titlePadding=Undefined, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def header(self, _: None, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Row':
+        ...
+
+    def spacing(self, _: float, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Row':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Row':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Row':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, align=Undefined,
+                 bandPosition=Undefined, bin=Undefined, center=Undefined, field=Undefined,
+                 header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
+        super(Row, self).__init__(shorthand=shorthand, aggregate=aggregate, align=align,
+                                  bandPosition=bandPosition, bin=bin, center=center, field=field,
+                                  header=header, sort=sort, spacing=spacing, timeUnit=timeUnit,
+                                  title=title, type=type, **kwds)
+
+
+@with_property_setters
+class Shape(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull):
+    """Shape schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`TypeForShape`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "shape"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Shape':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringnullExprRef], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Shape':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Shape':
+        ...
+
+    def type(self, _: Literal["nominal", "ordinal", "geojson"], **kwds) -> 'Shape':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Shape, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                    bin=bin, condition=condition, field=field, legend=legend,
+                                    scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type,
+                                    **kwds)
+
+
+@with_property_setters
+class ShapeDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefstringnull):
+    """ShapeDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "shape"
+
+    def bandPosition(self, _: float, **kwds) -> 'ShapeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'ShapeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'ShapeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringnullExprRef], **kwds) -> 'ShapeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'ShapeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'ShapeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'ShapeDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'ShapeDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(ShapeDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                         title=title, type=type, **kwds)
+
+
+@with_property_setters
+class ShapeValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull):
+    """ShapeValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDefTypeForShape`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "shape"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ShapeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ShapeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ShapeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'ShapeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'ShapeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'ShapeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringnullExprRef], **kwds) -> 'ShapeValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(ShapeValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Size(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
+    """Size schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "size"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Size':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Size':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Size':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Size':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Size, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                   bin=bin, condition=condition, field=field, legend=legend,
+                                   scale=scale, sort=sort, timeUnit=timeUnit, title=title, type=type,
+                                   **kwds)
+
+
+@with_property_setters
+class SizeDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
+    """SizeDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "size"
+
+    def bandPosition(self, _: float, **kwds) -> 'SizeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'SizeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'SizeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'SizeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'SizeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'SizeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'SizeDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'SizeDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(SizeDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                        title=title, type=type, **kwds)
+
+
+@with_property_setters
+class SizeValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
+    """SizeValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(float, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "size"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'SizeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'SizeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'SizeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'SizeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'SizeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'SizeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'SizeValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(SizeValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Stroke(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull):
+    """Stroke schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "stroke"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Stroke':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Stroke':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Stroke':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Stroke, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                     bandPosition=bandPosition, bin=bin, condition=condition,
+                                     field=field, legend=legend, scale=scale, sort=sort,
+                                     timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefGradientstringnull):
+    """StrokeDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "stroke"
+
+    def bandPosition(self, _: float, **kwds) -> 'StrokeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'StrokeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'StrokeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'StrokeDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'StrokeDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'StrokeDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(StrokeDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                          title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull):
+    """StrokeValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "stroke"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefGradientstringnullExprRef], **kwds) -> 'StrokeValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(StrokeValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class StrokeDash(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray):
+    """StrokeDash schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`, List(:class:`ConditionalValueDefnumberArrayExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeDash"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberArrayExprRef], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'StrokeDash':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'StrokeDash':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'StrokeDash':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(StrokeDash, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                         bandPosition=bandPosition, bin=bin, condition=condition,
+                                         field=field, legend=legend, scale=scale, sort=sort,
+                                         timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeDashDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumberArray):
+    """StrokeDashDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`, List(:class:`ConditionalValueDefnumberArrayExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeDash"
+
+    def bandPosition(self, _: float, **kwds) -> 'StrokeDashDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeDashDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeDashDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberArrayExprRef], **kwds) -> 'StrokeDashDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'StrokeDashDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'StrokeDashDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'StrokeDashDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'StrokeDashDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(StrokeDashDatum, self).__init__(datum=datum, bandPosition=bandPosition,
+                                              condition=condition, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeDashValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray):
+    """StrokeDashValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberArrayExprRef`, List(:class:`ConditionalValueDefnumberArrayExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(List(float), :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeDash"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeDashValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeDashValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeDashValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeDashValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeDashValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeDashValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberArrayExprRef], **kwds) -> 'StrokeDashValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(StrokeDashValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class StrokeOpacity(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
+    """StrokeOpacity schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeOpacity"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'StrokeOpacity':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'StrokeOpacity':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'StrokeOpacity':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(StrokeOpacity, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                            bandPosition=bandPosition, bin=bin, condition=condition,
+                                            field=field, legend=legend, scale=scale, sort=sort,
+                                            timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeOpacityDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
+    """StrokeOpacityDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeOpacity"
+
+    def bandPosition(self, _: float, **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'StrokeOpacityDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(StrokeOpacityDatum, self).__init__(datum=datum, bandPosition=bandPosition,
+                                                 condition=condition, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeOpacityValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
+    """StrokeOpacityValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(float, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeOpacity"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeOpacityValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'StrokeOpacityValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(StrokeOpacityValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class StrokeWidth(FieldChannelMixin, core.FieldOrDatumDefWithConditionMarkPropFieldDefnumber):
+    """StrokeWidth schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    legend : anyOf(:class:`Legend`, None)
+        An object defining properties of the legend. If ``null``, the legend for the
+        encoding channel will be removed.
+
+        **Default value:** If undefined, default `legend properties
+        <https://vega.github.io/vega-lite/docs/legend.html>`__ are applied.
+
+        **See also:** `legend <https://vega.github.io/vega-lite/docs/legend.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeWidth"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, aria=Undefined, clipHeight=Undefined, columnPadding=Undefined, columns=Undefined, cornerRadius=Undefined, description=Undefined, direction=Undefined, fillColor=Undefined, format=Undefined, formatType=Undefined, gradientLength=Undefined, gradientOpacity=Undefined, gradientStrokeColor=Undefined, gradientStrokeWidth=Undefined, gradientThickness=Undefined, gridAlign=Undefined, labelAlign=Undefined, labelBaseline=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, legendX=Undefined, legendY=Undefined, offset=Undefined, orient=Undefined, padding=Undefined, rowPadding=Undefined, strokeColor=Undefined, symbolDash=Undefined, symbolDashOffset=Undefined, symbolFillColor=Undefined, symbolLimit=Undefined, symbolOffset=Undefined, symbolOpacity=Undefined, symbolSize=Undefined, symbolStrokeColor=Undefined, symbolStrokeWidth=Undefined, symbolType=Undefined, tickCount=Undefined, tickMinStep=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titleOrient=Undefined, titlePadding=Undefined, type=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def legend(self, _: None, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'StrokeWidth':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'StrokeWidth':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'StrokeWidth':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, legend=Undefined, scale=Undefined,
+                 sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(StrokeWidth, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                          bandPosition=bandPosition, bin=bin, condition=condition,
+                                          field=field, legend=legend, scale=scale, sort=sort,
+                                          timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeWidthDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionDatumDefnumber):
+    """StrokeWidthDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeWidth"
+
+    def bandPosition(self, _: float, **kwds) -> 'StrokeWidthDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeWidthDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeWidthDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'StrokeWidthDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'StrokeWidthDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'StrokeWidthDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'StrokeWidthDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'StrokeWidthDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(StrokeWidthDatum, self).__init__(datum=datum, bandPosition=bandPosition,
+                                               condition=condition, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class StrokeWidthValue(ValueChannelMixin, core.ValueDefWithConditionMarkPropFieldOrDatumDefnumber):
+    """StrokeWidthValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(float, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "strokeWidth"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeWidthValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeWidthValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeWidthValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'StrokeWidthValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'StrokeWidthValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'StrokeWidthValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefnumberExprRef], **kwds) -> 'StrokeWidthValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(StrokeWidthValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Text(FieldChannelMixin, core.FieldOrDatumDefWithConditionStringFieldDefText):
+    """Text schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    format : anyOf(string, :class:`Dict`)
+        When used with the default ``"number"`` and ``"time"`` format type, the text
+        formatting pattern for labels of guides (axes, legends, headers) and text marks.
+
+
+        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
+
+        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
+        for more examples.
+
+        When used with a `custom formatType
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
+        value will be passed as ``format`` alongside ``datum.value`` to the registered
+        function.
+
+        **Default value:**  Derived from `numberFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
+        format and from `timeFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
+        format.
+    formatType : string
+        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
+        format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
+
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "text"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Text':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefTextExprRef], **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: str, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: dict, **kwds) -> 'Text':
+        ...
+
+    def formatType(self, _: str, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Text':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Text':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Text':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
+                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Text, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                   bin=bin, condition=condition, field=field, format=format,
+                                   formatType=formatType, timeUnit=timeUnit, title=title, type=type,
+                                   **kwds)
+
+
+@with_property_setters
+class TextDatum(DatumChannelMixin, core.FieldOrDatumDefWithConditionStringDatumDefText):
+    """TextDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    format : anyOf(string, :class:`Dict`)
+        When used with the default ``"number"`` and ``"time"`` format type, the text
+        formatting pattern for labels of guides (axes, legends, headers) and text marks.
+
+
+        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
+
+        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
+        for more examples.
+
+        When used with a `custom formatType
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
+        value will be passed as ``format`` alongside ``datum.value`` to the registered
+        function.
+
+        **Default value:**  Derived from `numberFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
+        format and from `timeFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
+        format.
+    formatType : string
+        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
+        format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
+
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "text"
+
+    def bandPosition(self, _: float, **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefTextExprRef], **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: str, **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: dict, **kwds) -> 'TextDatum':
+        ...
+
+    def formatType(self, _: str, **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'TextDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'TextDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'TextDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, condition=Undefined, format=Undefined,
+                 formatType=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(TextDatum, self).__init__(datum=datum, bandPosition=bandPosition, condition=condition,
+                                        format=format, formatType=formatType, title=title, type=type,
+                                        **kwds)
+
+
+@with_property_setters
+class TextValue(ValueChannelMixin, core.ValueDefWithConditionStringFieldDefText):
+    """TextValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalStringFieldDef`, :class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(:class:`Text`, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "text"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, format=Undefined, formatType=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'TextValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, format=Undefined, formatType=Undefined, param=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'TextValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'TextValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'TextValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefTextExprRef], **kwds) -> 'TextValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(TextValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Theta(FieldChannelMixin, core.PositionFieldDefBase):
+    """Theta schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "theta"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Theta':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Theta':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Theta':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Theta':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
+        super(Theta, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                    bin=bin, field=field, scale=scale, sort=sort, stack=stack,
+                                    timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class ThetaDatum(DatumChannelMixin, core.PositionDatumDefBase):
+    """ThetaDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "theta"
+
+    def bandPosition(self, _: float, **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'ThetaDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'ThetaDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'ThetaDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, scale=Undefined, stack=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(ThetaDatum, self).__init__(datum=datum, bandPosition=bandPosition, scale=scale,
+                                         stack=stack, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class ThetaValue(ValueChannelMixin, core.PositionValueDef):
+    """ThetaValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "theta"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(ThetaValue, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Theta2(FieldChannelMixin, core.SecondaryFieldDef):
+    """Theta2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "theta2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Theta2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Theta2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Theta2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Theta2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(Theta2, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                     bandPosition=bandPosition, bin=bin, field=field, timeUnit=timeUnit,
+                                     title=title, **kwds)
+
+
+@with_property_setters
+class Theta2Datum(DatumChannelMixin, core.DatumDef):
+    """Theta2Datum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "theta2"
+
+    def bandPosition(self, _: float, **kwds) -> 'Theta2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Theta2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Theta2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Theta2Datum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'Theta2Datum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Theta2Datum, self).__init__(datum=datum, bandPosition=bandPosition, title=title,
+                                          type=type, **kwds)
+
+
+@with_property_setters
+class Theta2Value(ValueChannelMixin, core.PositionValueDef):
+    """Theta2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "theta2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(Theta2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Tooltip(FieldChannelMixin, core.StringFieldDefWithCondition):
+    """Tooltip schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefstringExprRef`, List(:class:`ConditionalValueDefstringExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    format : anyOf(string, :class:`Dict`)
+        When used with the default ``"number"`` and ``"time"`` format type, the text
+        formatting pattern for labels of guides (axes, legends, headers) and text marks.
+
+
+        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
+
+        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
+        for more examples.
+
+        When used with a `custom formatType
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
+        value will be passed as ``format`` alongside ``datum.value`` to the registered
+        function.
+
+        **Default value:**  Derived from `numberFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
+        format and from `timeFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
+        format.
+    formatType : string
+        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
+        format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
+
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "tooltip"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Tooltip':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringExprRef], **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: str, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: dict, **kwds) -> 'Tooltip':
+        ...
+
+    def formatType(self, _: str, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Tooltip':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Tooltip':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Tooltip':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
+                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Tooltip, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                      bandPosition=bandPosition, bin=bin, condition=condition,
+                                      field=field, format=format, formatType=formatType,
+                                      timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class TooltipValue(ValueChannelMixin, core.StringValueDefWithCondition):
+    """TooltipValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "tooltip"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'TooltipValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'TooltipValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'TooltipValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'TooltipValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'TooltipValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'TooltipValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringnullExprRef], **kwds) -> 'TooltipValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(TooltipValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class Url(FieldChannelMixin, core.StringFieldDefWithCondition):
+    """Url schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefstringExprRef`, List(:class:`ConditionalValueDefstringExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
+
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    format : anyOf(string, :class:`Dict`)
+        When used with the default ``"number"`` and ``"time"`` format type, the text
+        formatting pattern for labels of guides (axes, legends, headers) and text marks.
+
+
+        * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
+
+        See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
+        for more examples.
+
+        When used with a `custom formatType
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__, this
+        value will be passed as ``format`` alongside ``datum.value`` to the registered
+        function.
+
+        **Default value:**  Derived from `numberFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for number
+        format and from `timeFormat
+        <https://vega.github.io/vega-lite/docs/config.html#format>`__ config for time
+        format.
+    formatType : string
+        The format type for labels. One of ``"number"``, ``"time"``, or a `registered custom
+        format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
+
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "url"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Url':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringExprRef], **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: str, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def format(self, _: dict, **kwds) -> 'Url':
+        ...
+
+    def formatType(self, _: str, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Url':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Url':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Url':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 condition=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
+                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Url, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                  bin=bin, condition=condition, field=field, format=format,
+                                  formatType=formatType, timeUnit=timeUnit, title=title, type=type,
+                                  **kwds)
+
+
+@with_property_setters
+class UrlValue(ValueChannelMixin, core.StringValueDefWithCondition):
+    """UrlValue schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
+    value : anyOf(string, None, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "url"
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, test=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'UrlValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, legend=Undefined, scale=Undefined, test=Undefined, title=Undefined, type=Undefined, **kwds) -> 'UrlValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, empty=Undefined, field=Undefined, legend=Undefined, param=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds) -> 'UrlValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, bandPosition=Undefined, datum=Undefined, empty=Undefined, legend=Undefined, param=Undefined, scale=Undefined, title=Undefined, type=Undefined, **kwds) -> 'UrlValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, test=Undefined, value=Undefined, **kwds) -> 'UrlValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, empty=Undefined, param=Undefined, value=Undefined, **kwds) -> 'UrlValue':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def condition(self, _: List[core.ConditionalValueDefstringnullExprRef], **kwds) -> 'UrlValue':
+        ...
+
+
+    def __init__(self, value, condition=Undefined, **kwds):
+        super(UrlValue, self).__init__(value=value, condition=condition, **kwds)
+
+
+@with_property_setters
+class X(FieldChannelMixin, core.PositionFieldDef):
+    """X schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    axis : anyOf(:class:`Axis`, None)
+        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
+        the axis for the encoding channel will be removed.
+
+        **Default value:** If undefined, default `axis properties
+        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
+
+        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    impute : anyOf(:class:`ImputeParams`, None)
+        An object defining the properties of the Impute Operation to be applied. The field
+        value of the other positional channel is taken as ``key`` of the ``Impute``
+        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
+        the ``Impute`` Operation.
+
+        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "x"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, aria=Undefined, bandPosition=Undefined, description=Undefined, domain=Undefined, domainCap=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, format=Undefined, formatType=Undefined, grid=Undefined, gridCap=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined, position=Undefined, style=Undefined, tickBand=Undefined, tickCap=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, _: None, **kwds) -> 'X':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, frame=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, _: None, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'X':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'X':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'X':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, bandPosition=Undefined,
+                 bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined,
+                 stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(X, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis,
+                                bandPosition=bandPosition, bin=bin, field=field, impute=impute,
+                                scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title,
+                                type=type, **kwds)
+
+
+@with_property_setters
+class XDatum(DatumChannelMixin, core.PositionDatumDef):
+    """XDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    axis : anyOf(:class:`Axis`, None)
+        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
+        the axis for the encoding channel will be removed.
+
+        **Default value:** If undefined, default `axis properties
+        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
+
+        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    impute : anyOf(:class:`ImputeParams`, None)
+        An object defining the properties of the Impute Operation to be applied. The field
+        value of the other positional channel is taken as ``key`` of the ``Impute``
+        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
+        the ``Impute`` Operation.
+
+        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "x"
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, aria=Undefined, bandPosition=Undefined, description=Undefined, domain=Undefined, domainCap=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, format=Undefined, formatType=Undefined, grid=Undefined, gridCap=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined, position=Undefined, style=Undefined, tickBand=Undefined, tickCap=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, _: None, **kwds) -> 'XDatum':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, frame=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, _: None, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'XDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'XDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'XDatum':
+        ...
+
+
+    def __init__(self, datum, axis=Undefined, bandPosition=Undefined, impute=Undefined, scale=Undefined,
+                 stack=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(XDatum, self).__init__(datum=datum, axis=axis, bandPosition=bandPosition, impute=impute,
+                                     scale=scale, stack=stack, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class XValue(ValueChannelMixin, core.PositionValueDef):
+    """XValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "x"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(XValue, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class X2(FieldChannelMixin, core.SecondaryFieldDef):
+    """X2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "x2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'X2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'X2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'X2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'X2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(X2, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                 bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds)
+
+
+@with_property_setters
+class X2Datum(DatumChannelMixin, core.DatumDef):
+    """X2Datum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "x2"
+
+    def bandPosition(self, _: float, **kwds) -> 'X2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'X2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'X2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'X2Datum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'X2Datum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(X2Datum, self).__init__(datum=datum, bandPosition=bandPosition, title=title, type=type,
+                                      **kwds)
+
+
+@with_property_setters
+class X2Value(ValueChannelMixin, core.PositionValueDef):
+    """X2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "x2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(X2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class XError(FieldChannelMixin, core.SecondaryFieldDef):
+    """XError schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "xError"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'XError':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'XError':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'XError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'XError':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(XError, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                     bandPosition=bandPosition, bin=bin, field=field, timeUnit=timeUnit,
+                                     title=title, **kwds)
+
+
+@with_property_setters
+class XErrorValue(ValueChannelMixin, core.ValueDefnumber):
+    """XErrorValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : float
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "xError"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(XErrorValue, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class XError2(FieldChannelMixin, core.SecondaryFieldDef):
+    """XError2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "xError2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'XError2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'XError2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'XError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'XError2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(XError2, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                      bandPosition=bandPosition, bin=bin, field=field,
+                                      timeUnit=timeUnit, title=title, **kwds)
+
+
+@with_property_setters
+class XError2Value(ValueChannelMixin, core.ValueDefnumber):
+    """XError2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : float
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "xError2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(XError2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class XOffset(FieldChannelMixin, core.ScaleFieldDef):
+    """XOffset schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "xOffset"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'XOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'XOffset':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'XOffset':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(XOffset, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                      bandPosition=bandPosition, bin=bin, field=field, scale=scale,
+                                      sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class XOffsetDatum(DatumChannelMixin, core.ScaleDatumDef):
+    """XOffsetDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "xOffset"
+
+    def bandPosition(self, _: float, **kwds) -> 'XOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'XOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'XOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'XOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'XOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'XOffsetDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'XOffsetDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, scale=Undefined, title=Undefined, type=Undefined,
+                 **kwds):
+        super(XOffsetDatum, self).__init__(datum=datum, bandPosition=bandPosition, scale=scale,
+                                           title=title, type=type, **kwds)
+
+
+@with_property_setters
+class XOffsetValue(ValueChannelMixin, core.ValueDefnumber):
+    """XOffsetValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : float
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "xOffset"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(XOffsetValue, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Y(FieldChannelMixin, core.PositionFieldDef):
+    """Y schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    axis : anyOf(:class:`Axis`, None)
+        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
+        the axis for the encoding channel will be removed.
+
+        **Default value:** If undefined, default `axis properties
+        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
+
+        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, string, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    impute : anyOf(:class:`ImputeParams`, None)
+        An object defining the properties of the Impute Operation to be applied. The field
+        value of the other positional channel is taken as ``key`` of the ``Impute``
+        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
+        the ``Impute`` Operation.
+
+        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "y"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, aria=Undefined, bandPosition=Undefined, description=Undefined, domain=Undefined, domainCap=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, format=Undefined, formatType=Undefined, grid=Undefined, gridCap=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined, position=Undefined, style=Undefined, tickBand=Undefined, tickCap=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, _: None, **kwds) -> 'Y':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: str, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, frame=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, _: None, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Y':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Y':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'Y':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, axis=Undefined, bandPosition=Undefined,
+                 bin=Undefined, field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined,
+                 stack=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Y, self).__init__(shorthand=shorthand, aggregate=aggregate, axis=axis,
+                                bandPosition=bandPosition, bin=bin, field=field, impute=impute,
+                                scale=scale, sort=sort, stack=stack, timeUnit=timeUnit, title=title,
+                                type=type, **kwds)
+
+
+@with_property_setters
+class YDatum(DatumChannelMixin, core.PositionDatumDef):
+    """YDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    axis : anyOf(:class:`Axis`, None)
+        An object defining properties of axis's gridlines, ticks and labels. If ``null``,
+        the axis for the encoding channel will be removed.
+
+        **Default value:** If undefined, default `axis properties
+        <https://vega.github.io/vega-lite/docs/axis.html>`__ are applied.
+
+        **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    impute : anyOf(:class:`ImputeParams`, None)
+        An object defining the properties of the Impute Operation to be applied. The field
+        value of the other positional channel is taken as ``key`` of the ``Impute``
+        Operation. The field of the ``color`` channel if specified is used as ``groupby`` of
+        the ``Impute`` Operation.
+
+        **See also:** `impute <https://vega.github.io/vega-lite/docs/impute.html>`__
+        documentation.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    stack : anyOf(:class:`StackOffset`, None, boolean)
+        Type of stacking offset if the field should be stacked. ``stack`` is only applicable
+        for ``x``, ``y``, ``theta``, and ``radius`` channels with continuous domains. For
+        example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
+        chart.
+
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
+
+        **Default value:** ``zero`` for plots with all of the following conditions are true:
+        (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
+        or y) has a linear scale; (3) At least one of non-position channels mapped to an
+        unaggregated field that is different from x and y. Otherwise, ``null`` by default.
+
+        **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "y"
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, aria=Undefined, bandPosition=Undefined, description=Undefined, domain=Undefined, domainCap=Undefined, domainColor=Undefined, domainDash=Undefined, domainDashOffset=Undefined, domainOpacity=Undefined, domainWidth=Undefined, format=Undefined, formatType=Undefined, grid=Undefined, gridCap=Undefined, gridColor=Undefined, gridDash=Undefined, gridDashOffset=Undefined, gridOpacity=Undefined, gridWidth=Undefined, labelAlign=Undefined, labelAngle=Undefined, labelBaseline=Undefined, labelBound=Undefined, labelColor=Undefined, labelExpr=Undefined, labelFlush=Undefined, labelFlushOffset=Undefined, labelFont=Undefined, labelFontSize=Undefined, labelFontStyle=Undefined, labelFontWeight=Undefined, labelLimit=Undefined, labelLineHeight=Undefined, labelOffset=Undefined, labelOpacity=Undefined, labelOverlap=Undefined, labelPadding=Undefined, labelSeparation=Undefined, labels=Undefined, maxExtent=Undefined, minExtent=Undefined, offset=Undefined, orient=Undefined, position=Undefined, style=Undefined, tickBand=Undefined, tickCap=Undefined, tickColor=Undefined, tickCount=Undefined, tickDash=Undefined, tickDashOffset=Undefined, tickExtra=Undefined, tickMinStep=Undefined, tickOffset=Undefined, tickOpacity=Undefined, tickRound=Undefined, tickSize=Undefined, tickWidth=Undefined, ticks=Undefined, title=Undefined, titleAlign=Undefined, titleAnchor=Undefined, titleAngle=Undefined, titleBaseline=Undefined, titleColor=Undefined, titleFont=Undefined, titleFontSize=Undefined, titleFontStyle=Undefined, titleFontWeight=Undefined, titleLimit=Undefined, titleLineHeight=Undefined, titleOpacity=Undefined, titlePadding=Undefined, titleX=Undefined, titleY=Undefined, translate=Undefined, values=Undefined, zindex=Undefined, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def axis(self, _: None, **kwds) -> 'YDatum':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, frame=Undefined, keyvals=Undefined, method=Undefined, value=Undefined, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def impute(self, _: None, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: Literal["zero", "center", "normalize"], **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: None, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def stack(self, _: bool, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'YDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'YDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'YDatum':
+        ...
+
+
+    def __init__(self, datum, axis=Undefined, bandPosition=Undefined, impute=Undefined, scale=Undefined,
+                 stack=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(YDatum, self).__init__(datum=datum, axis=axis, bandPosition=bandPosition, impute=impute,
+                                     scale=scale, stack=stack, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class YValue(ValueChannelMixin, core.PositionValueDef):
+    """YValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "y"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(YValue, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class Y2(FieldChannelMixin, core.SecondaryFieldDef):
+    """Y2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "y2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'Y2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'Y2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Y2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Y2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(Y2, self).__init__(shorthand=shorthand, aggregate=aggregate, bandPosition=bandPosition,
+                                 bin=bin, field=field, timeUnit=timeUnit, title=title, **kwds)
+
+
+@with_property_setters
+class Y2Datum(DatumChannelMixin, core.DatumDef):
+    """Y2Datum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "y2"
+
+    def bandPosition(self, _: float, **kwds) -> 'Y2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'Y2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'Y2Datum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'Y2Datum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'Y2Datum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(Y2Datum, self).__init__(datum=datum, bandPosition=bandPosition, title=title, type=type,
+                                      **kwds)
+
+
+@with_property_setters
+class Y2Value(ValueChannelMixin, core.PositionValueDef):
+    """Y2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : anyOf(float, string, string, :class:`ExprRef`)
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "y2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(Y2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class YError(FieldChannelMixin, core.SecondaryFieldDef):
+    """YError schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "yError"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'YError':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'YError':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'YError':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'YError':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(YError, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                     bandPosition=bandPosition, bin=bin, field=field, timeUnit=timeUnit,
+                                     title=title, **kwds)
+
+
+@with_property_setters
+class YErrorValue(ValueChannelMixin, core.ValueDefnumber):
+    """YErrorValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : float
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "yError"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(YErrorValue, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class YError2(FieldChannelMixin, core.SecondaryFieldDef):
+    """YError2 schema wrapper
+
+    Mapping(required=[shorthand])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "yError2"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'YError2':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'YError2':
+        ...
+
+    def bin(self, _: None, **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'YError2':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'YError2':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, timeUnit=Undefined, title=Undefined, **kwds):
+        super(YError2, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                      bandPosition=bandPosition, bin=bin, field=field,
+                                      timeUnit=timeUnit, title=title, **kwds)
+
+
+@with_property_setters
+class YError2Value(ValueChannelMixin, core.ValueDefnumber):
+    """YError2Value schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : float
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "yError2"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(YError2Value, self).__init__(value=value, **kwds)
+
+
+@with_property_setters
+class YOffset(FieldChannelMixin, core.ScaleFieldDef):
+    """YOffset schema wrapper
+
+    Mapping(required=[shorthand])
+
+    Parameters
+    ----------
+
+    shorthand : string
+        shorthand for field, aggregate, and type
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
+
+
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
+
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
+
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
+
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "yOffset"
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, _: Literal["average", "count", "distinct", "max", "mean", "median", "min", "missing", "product", "q1", "q3", "ci0", "ci1", "stderr", "stdev", "stdevp", "sum", "valid", "values", "variance", "variancep"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmax=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def aggregate(self, argmin=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    def bandPosition(self, _: float, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: bool, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, anchor=Undefined, base=Undefined, binned=Undefined, divide=Undefined, extent=Undefined, maxbins=Undefined, minstep=Undefined, nice=Undefined, step=Undefined, steps=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def bin(self, _: None, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, _: str, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def field(self, repeat=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[float], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[str], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[bool], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: List[core.DateTime], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["ascending", "descending"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["x", "y", "color", "fill", "stroke", "strokeWidth", "size", "shape", "fillOpacity", "strokeOpacity", "opacity", "text"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: Literal["-x", "-y", "-color", "-fill", "-stroke", "-strokeWidth", "-size", "-shape", "-fillOpacity", "-strokeOpacity", "-opacity", "-text"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, field=Undefined, op=Undefined, order=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, encoding=Undefined, order=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def sort(self, _: None, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["year", "quarter", "month", "week", "day", "dayofyear", "date", "hours", "minutes", "seconds", "milliseconds"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyear", "utcquarter", "utcmonth", "utcweek", "utcday", "utcdayofyear", "utcdate", "utchours", "utcminutes", "utcseconds", "utcmilliseconds"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["yearquarter", "yearquartermonth", "yearmonth", "yearmonthdate", "yearmonthdatehours", "yearmonthdatehoursminutes", "yearmonthdatehoursminutesseconds", "yearweek", "yearweekday", "yearweekdayhours", "yearweekdayhoursminutes", "yearweekdayhoursminutesseconds", "yeardayofyear", "quartermonth", "monthdate", "monthdatehours", "monthdatehoursminutes", "monthdatehoursminutesseconds", "weekday", "weeksdayhours", "weekdayhoursminutes", "weekdayhoursminutesseconds", "dayhours", "dayhoursminutes", "dayhoursminutesseconds", "hoursminutes", "hoursminutesseconds", "minutesseconds", "secondsmilliseconds"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, _: Literal["utcyearquarter", "utcyearquartermonth", "utcyearmonth", "utcyearmonthdate", "utcyearmonthdatehours", "utcyearmonthdatehoursminutes", "utcyearmonthdatehoursminutesseconds", "utcyearweek", "utcyearweekday", "utcyearweekdayhours", "utcyearweekdayhoursminutes", "utcyearweekdayhoursminutesseconds", "utcyeardayofyear", "utcquartermonth", "utcmonthdate", "utcmonthdatehours", "utcmonthdatehoursminutes", "utcmonthdatehoursminutesseconds", "utcweekday", "utcweeksdayhours", "utcweekdayhoursminutes", "utcweekdayhoursminutesseconds", "utcdayhours", "utcdayhoursminutes", "utcdayhoursminutesseconds", "utchoursminutes", "utchoursminutesseconds", "utcminutesseconds", "utcsecondsmilliseconds"], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def timeUnit(self, maxbins=Undefined, step=Undefined, unit=Undefined, utc=Undefined, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'YOffset':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'YOffset':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal"], **kwds) -> 'YOffset':
+        ...
+
+
+    def __init__(self, shorthand=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(YOffset, self).__init__(shorthand=shorthand, aggregate=aggregate,
+                                      bandPosition=bandPosition, bin=bin, field=field, scale=scale,
+                                      sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
+
+
+@with_property_setters
+class YOffsetDatum(DatumChannelMixin, core.ScaleDatumDef):
+    """YOffsetDatum schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "yOffset"
+
+    def bandPosition(self, _: float, **kwds) -> 'YOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, align=Undefined, base=Undefined, bins=Undefined, clamp=Undefined, constant=Undefined, domain=Undefined, domainMax=Undefined, domainMid=Undefined, domainMin=Undefined, exponent=Undefined, interpolate=Undefined, nice=Undefined, padding=Undefined, paddingInner=Undefined, paddingOuter=Undefined, range=Undefined, rangeMax=Undefined, rangeMin=Undefined, reverse=Undefined, round=Undefined, scheme=Undefined, type=Undefined, zero=Undefined, **kwds) -> 'YOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def scale(self, _: None, **kwds) -> 'YOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: str, **kwds) -> 'YOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: List[str], **kwds) -> 'YOffsetDatum':
+        ...
+
+    @overload  # type: ignore[no-overload-impl]
+    def title(self, _: None, **kwds) -> 'YOffsetDatum':
+        ...
+
+    def type(self, _: Literal["quantitative", "ordinal", "temporal", "nominal", "geojson"], **kwds) -> 'YOffsetDatum':
+        ...
+
+
+    def __init__(self, datum, bandPosition=Undefined, scale=Undefined, title=Undefined, type=Undefined,
+                 **kwds):
+        super(YOffsetDatum, self).__init__(datum=datum, bandPosition=bandPosition, scale=scale,
+                                           title=title, type=type, **kwds)
+
+
+@with_property_setters
+class YOffsetValue(ValueChannelMixin, core.ValueDefnumber):
+    """YOffsetValue schema wrapper
+
+    Mapping(required=[value])
+    Definition object for a constant value (primitive value or gradient definition) of an
+    encoding channel.
+
+    Parameters
+    ----------
+
+    value : float
+        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
+        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
+        values between ``0`` to ``1`` for opacity).
+    """
+    _class_is_valid_at_instantiation = False
+    _encoding_name = "yOffset"
+
+    
+
+    def __init__(self, value, **kwds):
+        super(YOffsetValue, self).__init__(value=value, **kwds)
diff --git a/altair/vegalite/v4/schema/core.py b/altair/vegalite/v5/schema/core.py
similarity index 65%
rename from altair/vegalite/v4/schema/core.py
rename to altair/vegalite/v5/schema/core.py
index acb88be..ad1e5af 100644
--- a/altair/vegalite/v4/schema/core.py
+++ b/altair/vegalite/v5/schema/core.py
@@ -22,9 +22,8 @@ class Root(VegaLiteSchema):
     """Root schema wrapper
 
     anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`,
-    :class:`TopLevelRepeatSpec`, :class:`TopLevelNormalizedConcatSpecGenericSpec`,
-    :class:`TopLevelNormalizedVConcatSpecGenericSpec`,
-    :class:`TopLevelNormalizedHConcatSpecGenericSpec`)
+    :class:`TopLevelRepeatSpec`, :class:`TopLevelConcatSpec`, :class:`TopLevelVConcatSpec`,
+    :class:`TopLevelHConcatSpec`)
     A Vega-Lite top-level specification. This is the root class for all Vega-Lite
     specifications. (The json schema is generated from this type.)
     """
@@ -63,7 +62,7 @@ class AggregatedFieldDef(VegaLiteSchema):
 
     Mapping(required=[op, as])
 
-    Attributes
+    Parameters
     ----------
 
     op : :class:`AggregateOp`
@@ -121,7 +120,7 @@ class AreaConfig(AnyMarkConfig):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(:class:`Align`, :class:`ExprRef`)
@@ -130,15 +129,25 @@ class AreaConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     angle : anyOf(float, :class:`ExprRef`)
-
+        The rotation angle of the text, in degrees.
     aria : anyOf(boolean, :class:`ExprRef`)
-
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
     ariaRole : anyOf(string, :class:`ExprRef`)
-
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
     ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
     aspect : anyOf(boolean, :class:`ExprRef`)
-
+        Whether to keep aspect ratio of image marks.
     baseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
         For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
         ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
@@ -151,48 +160,80 @@ class AreaConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
         Default color.
 
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
+        **Default value:** ``"ltr"``
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     endAngle : anyOf(float, :class:`ExprRef`)
-
+        The end angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -204,30 +245,62 @@ class AreaConfig(AnyMarkConfig):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
     height : anyOf(float, :class:`ExprRef`)
-
+        Height of the marks.
     href : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     line : anyOf(boolean, :class:`OverlayMarkDef`)
         A flag for overlaying line on top of area marks, or an object defining the
         properties of the overlayed lines.
@@ -240,9 +313,11 @@ class AreaConfig(AnyMarkConfig):
 
         **Default value:** ``false``.
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -253,17 +328,22 @@ class AreaConfig(AnyMarkConfig):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     point : anyOf(boolean, :class:`OverlayMarkDef`, string)
         A flag for overlaying points on top of line or area marks, or an object defining the
         properties of the overlayed points.
@@ -284,49 +364,87 @@ class AreaConfig(AnyMarkConfig):
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
+
 
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
 
-    startAngle : anyOf(float, :class:`ExprRef`)
 
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
+
+
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
+    startAngle : anyOf(float, :class:`ExprRef`)
+        The start angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -336,32 +454,33 @@ class AreaConfig(AnyMarkConfig):
     theta2 : anyOf(float, :class:`ExprRef`)
         The end angle of arc marks in radians. A value of 0 indicates up or “north”,
         increasing values proceed clockwise.
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        The URL of the image file for image marks.
     width : anyOf(float, :class:`ExprRef`)
-
+        Width of the marks.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -403,7 +522,7 @@ class AreaConfig(AnyMarkConfig):
                  strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
                  strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                  strokeWidth=Undefined, tension=Undefined, text=Undefined, theta=Undefined,
-                 theta2=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                 theta2=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                  tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                  y=Undefined, y2=Undefined, **kwds):
         super(AreaConfig, self).__init__(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
@@ -430,9 +549,9 @@ class AreaConfig(AnyMarkConfig):
                                          strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                                          strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
                                          tension=tension, text=text, theta=theta, theta2=theta2,
-                                         timeUnitBand=timeUnitBand,
-                                         timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
-                                         url=url, width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+                                         timeUnitBandPosition=timeUnitBandPosition,
+                                         timeUnitBandSize=timeUnitBandSize, tooltip=tooltip, url=url,
+                                         width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
 
 
 class ArgmaxDef(Aggregate):
@@ -440,10 +559,10 @@ class ArgmaxDef(Aggregate):
 
     Mapping(required=[argmax])
 
-    Attributes
+    Parameters
     ----------
 
-    argmax : string
+    argmax : :class:`FieldName`
 
     """
     _schema = {'$ref': '#/definitions/ArgmaxDef'}
@@ -457,10 +576,10 @@ class ArgminDef(Aggregate):
 
     Mapping(required=[argmin])
 
-    Attributes
+    Parameters
     ----------
 
-    argmin : string
+    argmin : :class:`FieldName`
 
     """
     _schema = {'$ref': '#/definitions/ArgminDef'}
@@ -474,7 +593,7 @@ class AutoSizeParams(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     contains : enum('content', 'padding')
@@ -521,37 +640,61 @@ class Axis(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG group, removing the axis from the ARIA accessibility tree.
 
+        **Default value:** ``true``
     bandPosition : anyOf(float, :class:`ExprRef`)
+        An interpolation fraction indicating where, for ``band`` scales, axis ticks should
+        be positioned. A value of ``0`` places ticks at the left edge of their bands. A
+        value of ``0.5`` places ticks in the middle of their bands.
 
+        **Default value:** ``0.5``
     description : anyOf(string, :class:`ExprRef`)
+        A text description of this axis for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If the ``aria`` property is true, for SVG output the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__
+        will be set to this description. If the description is unspecified it will be
+        automatically generated.
+    domain : boolean
+        A boolean flag indicating if the domain (the axis baseline) should be included as
+        part of the axis.
 
-    domain : anyOf(boolean, :class:`ExprRef`)
-
+        **Default value:** ``true``
     domainCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for the domain line's ending style. One of ``"butt"``, ``"round"`` or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     domainColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        Color of axis domain line.
 
+        **Default value:** ``"gray"``.
     domainDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating [stroke, space] lengths for dashed domain lines.
     domainDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The pixel offset at which to start drawing with the domain dash array.
     domainOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the axis domain line.
     domainWidth : anyOf(float, :class:`ExprRef`)
+        Stroke width of axis domain line
 
-    format : anyOf(string, :class:`Dictunknown`)
+        **Default value:** ``1``
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -572,9 +715,12 @@ class Axis(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     grid : boolean
         A boolean flag indicating if grid lines should be included as part of the axis
 
@@ -582,30 +728,49 @@ class Axis(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ that are not
         binned; otherwise, ``false``.
     gridCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for grid lines' ending style. One of ``"butt"``, ``"round"`` or
+        ``"square"``.
 
-    gridColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`,
-    :class:`ConditionalAxisColor`)
+        **Default value:** ``"butt"``
+    gridColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`, :class:`ConditionalAxisColor`)
+        Color of gridlines.
 
+        **Default value:** ``"lightGray"``.
     gridDash : anyOf(List(float), :class:`ExprRef`, :class:`ConditionalAxisNumberArray`)
-
+        An array of alternating [stroke, space] lengths for dashed grid lines.
     gridDashOffset : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
+        The pixel offset at which to start drawing with the grid dash array.
     gridOpacity : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The stroke opacity of grid (value between [0,1])
 
+        **Default value:** ``1``
     gridWidth : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The grid width, in pixels.
 
+        **Default value:** ``1``
     labelAlign : anyOf(:class:`Align`, :class:`ExprRef`, :class:`ConditionalAxisLabelAlign`)
-
+        Horizontal text alignment of axis tick labels, overriding the default setting for
+        the current axis orientation.
     labelAngle : anyOf(float, :class:`ExprRef`)
-
-    labelBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`,
-    :class:`ConditionalAxisLabelBaseline`)
-
+        The rotation angle of the axis labels.
+
+        **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise.
+    labelBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`, :class:`ConditionalAxisLabelBaseline`)
+        Vertical text baseline of axis tick labels, overriding the default setting for the
+        current axis orientation. One of ``"alphabetic"`` (default), ``"top"``,
+        ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"``
+        and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but
+        are calculated relative to the *lineHeight* rather than *fontSize* alone.
     labelBound : anyOf(anyOf(float, boolean), :class:`ExprRef`)
+        Indicates if labels should be hidden if they exceed the axis range. If ``false``
+        (the default) no bounds overlap analysis is performed. If ``true``, labels will be
+        hidden if they exceed the axis range by more than 1 pixel. If this property is a
+        number, it specifies the pixel tolerance: the maximum amount by which a label
+        bounding box may exceed the axis range.
 
-    labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`,
-    :class:`ConditionalAxisColor`)
-
+        **Default value:** ``false``.
+    labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`, :class:`ConditionalAxisColor`)
+        The color of the tick label, can be in hex color code or regular color name.
     labelExpr : string
         `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
         labels.
@@ -624,25 +789,33 @@ class Axis(VegaLiteSchema):
 
         **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``.
     labelFlushOffset : anyOf(float, :class:`ExprRef`)
+        Indicates the number of pixels by which to offset flush-adjusted labels. For
+        example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the
+        center of the axis. Offsets can help the labels better visually group with
+        corresponding axis ticks.
 
+        **Default value:** ``0``.
     labelFont : anyOf(string, :class:`ExprRef`, :class:`ConditionalAxisString`)
-
+        The font of the tick label.
     labelFontSize : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
-    labelFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`,
-    :class:`ConditionalAxisLabelFontStyle`)
-
-    labelFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`,
-    :class:`ConditionalAxisLabelFontWeight`)
-
+        The font size of the label, in pixels.
+    labelFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`, :class:`ConditionalAxisLabelFontStyle`)
+        Font style of the title.
+    labelFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`, :class:`ConditionalAxisLabelFontWeight`)
+        Font weight of axis tick labels.
     labelLimit : anyOf(float, :class:`ExprRef`)
+        Maximum allowed pixel width of axis tick labels.
 
+        **Default value:** ``180``
     labelLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line label text or label text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     labelOffset : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        Position offset in pixels to apply to labels, in addition to tickOffset.
 
+        **Default value:** ``0``
     labelOpacity : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
+        The opacity of the labels.
     labelOverlap : anyOf(:class:`LabelOverlap`, :class:`ExprRef`)
         The strategy to use for resolving overlap of axis labels. If ``false`` (the
         default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a
@@ -654,16 +827,28 @@ class Axis(VegaLiteSchema):
         **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"``
         for log scales; otherwise ``false``.
     labelPadding : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The padding in pixels between labels and ticks.
 
+        **Default value:** ``2``
     labelSeparation : anyOf(float, :class:`ExprRef`)
+        The minimum separation that must be between label bounding boxes for them to be
+        considered non-overlapping (default ``0`` ). This property is ignored if
+        *labelOverlap* resolution is not enabled.
+    labels : boolean
+        A boolean flag indicating if labels should be included as part of the axis.
 
-    labels : anyOf(boolean, :class:`ExprRef`)
-
+        **Default value:** ``true``.
     maxExtent : anyOf(float, :class:`ExprRef`)
+        The maximum extent in pixels that axis ticks and labels should use. This determines
+        a maximum offset value for axis titles.
 
+        **Default value:** ``undefined``.
     minExtent : anyOf(float, :class:`ExprRef`)
+        The minimum extent in pixels that axis ticks and labels should use. This determines
+        a minimum offset value for axis titles.
 
-    offset : float
+        **Default value:** ``30`` for y-axis; ``undefined`` for x-axis.
+    offset : anyOf(float, :class:`ExprRef`)
         The offset, in pixels, by which to displace the axis from the edge of the enclosing
         group or data rectangle.
 
@@ -692,12 +877,17 @@ class Axis(VegaLiteSchema):
         style. For example, an x-axis mark with ``"style": "foo"`` will use ``config.axisX``
         and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence).
     tickBand : anyOf(enum('center', 'extent'), :class:`ExprRef`)
-
+        For band scales, indicates if ticks and grid lines should be placed at the
+        ``"center"`` of a band (default) or at the band ``"extent"`` s to indicate intervals
     tickCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for the tick lines' ending style. One of ``"butt"``, ``"round"`` or
+        ``"square"``.
 
-    tickColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`,
-    :class:`ConditionalAxisColor`)
+        **Default value:** ``"butt"``
+    tickColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`, :class:`ConditionalAxisColor`)
+        The color of the axis's tick.
 
+        **Default value:** ``"gray"``
     tickCount : anyOf(float, :class:`TimeInterval`, :class:`TimeIntervalStep`, :class:`ExprRef`)
         A desired number of ticks, for axes visualizing quantitative scales. The resulting
         number may be different so that values are "nice" (multiples of 2, 5, 10) and lie
@@ -713,28 +903,40 @@ class Axis(VegaLiteSchema):
         **Default value** : Determine using a formula ``ceil(width/40)`` for x and
         ``ceil(height/40)`` for y.
     tickDash : anyOf(List(float), :class:`ExprRef`, :class:`ConditionalAxisNumberArray`)
-
+        An array of alternating [stroke, space] lengths for dashed tick mark lines.
     tickDashOffset : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
-    tickExtra : anyOf(boolean, :class:`ExprRef`)
-
+        The pixel offset at which to start drawing with the tick mark dash array.
+    tickExtra : boolean
+        Boolean flag indicating if an extra axis tick should be added for the initial
+        position of the axis. This flag is useful for styling axes for ``band`` scales such
+        that ticks are placed on band boundaries rather in the middle of a band. Use in
+        conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``.
     tickMinStep : anyOf(float, :class:`ExprRef`)
         The minimum desired step between axis ticks, in terms of scale domain values. For
         example, a value of ``1`` indicates that ticks should not be less than 1 unit apart.
         If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if
         necessary, to enforce the minimum step value.
     tickOffset : anyOf(float, :class:`ExprRef`)
-
+        Position offset in pixels to apply to ticks, labels, and gridlines.
     tickOpacity : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        Opacity of the ticks.
+    tickRound : boolean
+        Boolean flag indicating if pixel position values should be rounded to the nearest
+        integer.
 
-    tickRound : anyOf(boolean, :class:`ExprRef`)
-
+        **Default value:** ``true``
     tickSize : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The size in pixels of axis ticks.
 
+        **Default value:** ``5``
     tickWidth : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The width, in pixels, of ticks.
 
-    ticks : anyOf(boolean, :class:`ExprRef`)
+        **Default value:** ``1``
+    ticks : boolean
+        Boolean value that determines whether the axis should include ticks.
 
+        **Default value:** ``true``
     title : anyOf(:class:`Text`, None)
         A title for the field. If ``null``, the title will be removed.
 
@@ -751,44 +953,56 @@ class Axis(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
     titleAlign : anyOf(:class:`Align`, :class:`ExprRef`)
-
+        Horizontal text alignment of axis titles.
     titleAnchor : anyOf(:class:`TitleAnchor`, :class:`ExprRef`)
-
+        Text anchor position for placing axis titles.
     titleAngle : anyOf(float, :class:`ExprRef`)
-
+        Angle in degrees of axis titles.
     titleBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
-
+        Vertical text baseline for axis titles. One of ``"alphabetic"`` (default),
+        ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The
+        ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and
+        ``"bottom"``, but are calculated relative to the *lineHeight* rather than *fontSize*
+        alone.
     titleColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Color of the title, can be in hex color code or regular color name.
     titleFont : anyOf(string, :class:`ExprRef`)
-
+        Font of the title. (e.g., ``"Helvetica Neue"`` ).
     titleFontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size of the title.
     titleFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style of the title.
     titleFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight of the title. This can be either a string (e.g ``"bold"``, ``"normal"``
+        ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400``
+        and ``"bold"`` = ``700`` ).
     titleLimit : anyOf(float, :class:`ExprRef`)
-
+        Maximum allowed pixel width of axis titles.
     titleLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line title text or title text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     titleOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the axis title.
     titlePadding : anyOf(float, :class:`ExprRef`)
-
+        The padding, in pixels, between title and axis.
     titleX : anyOf(float, :class:`ExprRef`)
-
+        X-coordinate of the axis title relative to the axis group.
     titleY : anyOf(float, :class:`ExprRef`)
-
+        Y-coordinate of the axis title relative to the axis group.
     translate : anyOf(float, :class:`ExprRef`)
+        Coordinate space translation offset for axis layout. By default, axes are translated
+        by a 0.5 pixel offset for both the x and y coordinates in order to align stroked
+        lines with the pixel grid. However, for vector graphics output these pixel-specific
+        adjustments may be undesirable, in which case translate can be changed (for example,
+        to zero).
 
-    values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`),
-    :class:`ExprRef`)
+        **Default value:** ``0.5``
+    values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`), :class:`ExprRef`)
         Explicitly set the visible axis tick values.
     zindex : float
         A non-negative integer indicating the z-index of the axis. If zindex is 0, axes
@@ -861,39 +1075,63 @@ class AxisConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG group, removing the axis from the ARIA accessibility tree.
 
+        **Default value:** ``true``
     bandPosition : anyOf(float, :class:`ExprRef`)
+        An interpolation fraction indicating where, for ``band`` scales, axis ticks should
+        be positioned. A value of ``0`` places ticks at the left edge of their bands. A
+        value of ``0.5`` places ticks in the middle of their bands.
 
+        **Default value:** ``0.5``
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of this axis for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If the ``aria`` property is true, for SVG output the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__
+        will be set to this description. If the description is unspecified it will be
+        automatically generated.
     disable : boolean
         Disable axis by default.
-    domain : anyOf(boolean, :class:`ExprRef`)
+    domain : boolean
+        A boolean flag indicating if the domain (the axis baseline) should be included as
+        part of the axis.
 
+        **Default value:** ``true``
     domainCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for the domain line's ending style. One of ``"butt"``, ``"round"`` or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     domainColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        Color of axis domain line.
 
+        **Default value:** ``"gray"``.
     domainDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating [stroke, space] lengths for dashed domain lines.
     domainDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The pixel offset at which to start drawing with the domain dash array.
     domainOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the axis domain line.
     domainWidth : anyOf(float, :class:`ExprRef`)
+        Stroke width of axis domain line
 
-    format : anyOf(string, :class:`Dictunknown`)
+        **Default value:** ``1``
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -914,9 +1152,12 @@ class AxisConfig(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     grid : boolean
         A boolean flag indicating if grid lines should be included as part of the axis
 
@@ -924,33 +1165,52 @@ class AxisConfig(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ that are not
         binned; otherwise, ``false``.
     gridCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for grid lines' ending style. One of ``"butt"``, ``"round"`` or
+        ``"square"``.
 
-    gridColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`,
-    :class:`ConditionalAxisColor`)
+        **Default value:** ``"butt"``
+    gridColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`, :class:`ConditionalAxisColor`)
+        Color of gridlines.
 
+        **Default value:** ``"lightGray"``.
     gridDash : anyOf(List(float), :class:`ExprRef`, :class:`ConditionalAxisNumberArray`)
-
+        An array of alternating [stroke, space] lengths for dashed grid lines.
     gridDashOffset : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
+        The pixel offset at which to start drawing with the grid dash array.
     gridOpacity : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The stroke opacity of grid (value between [0,1])
 
+        **Default value:** ``1``
     gridWidth : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The grid width, in pixels.
 
+        **Default value:** ``1``
     labelAlign : anyOf(:class:`Align`, :class:`ExprRef`, :class:`ConditionalAxisLabelAlign`)
-
+        Horizontal text alignment of axis tick labels, overriding the default setting for
+        the current axis orientation.
     labelAngle : anyOf(float, :class:`ExprRef`)
-
-    labelBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`,
-    :class:`ConditionalAxisLabelBaseline`)
-
+        The rotation angle of the axis labels.
+
+        **Default value:** ``-90`` for nominal and ordinal fields; ``0`` otherwise.
+    labelBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`, :class:`ConditionalAxisLabelBaseline`)
+        Vertical text baseline of axis tick labels, overriding the default setting for the
+        current axis orientation. One of ``"alphabetic"`` (default), ``"top"``,
+        ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The ``"line-top"``
+        and ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but
+        are calculated relative to the *lineHeight* rather than *fontSize* alone.
     labelBound : anyOf(anyOf(float, boolean), :class:`ExprRef`)
+        Indicates if labels should be hidden if they exceed the axis range. If ``false``
+        (the default) no bounds overlap analysis is performed. If ``true``, labels will be
+        hidden if they exceed the axis range by more than 1 pixel. If this property is a
+        number, it specifies the pixel tolerance: the maximum amount by which a label
+        bounding box may exceed the axis range.
 
-    labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`,
-    :class:`ConditionalAxisColor`)
-
+        **Default value:** ``false``.
+    labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`, :class:`ConditionalAxisColor`)
+        The color of the tick label, can be in hex color code or regular color name.
     labelExpr : string
         `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        labels.
 
         **Note:** The label text and value can be assessed via the ``label`` and ``value``
         properties of the axis's backing ``datum`` object.
@@ -966,25 +1226,33 @@ class AxisConfig(VegaLiteSchema):
 
         **Default value:** ``true`` for axis of a continuous x-scale. Otherwise, ``false``.
     labelFlushOffset : anyOf(float, :class:`ExprRef`)
+        Indicates the number of pixels by which to offset flush-adjusted labels. For
+        example, a value of ``2`` will push flush-adjusted labels 2 pixels outward from the
+        center of the axis. Offsets can help the labels better visually group with
+        corresponding axis ticks.
 
+        **Default value:** ``0``.
     labelFont : anyOf(string, :class:`ExprRef`, :class:`ConditionalAxisString`)
-
+        The font of the tick label.
     labelFontSize : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
-    labelFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`,
-    :class:`ConditionalAxisLabelFontStyle`)
-
-    labelFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`,
-    :class:`ConditionalAxisLabelFontWeight`)
-
+        The font size of the label, in pixels.
+    labelFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`, :class:`ConditionalAxisLabelFontStyle`)
+        Font style of the title.
+    labelFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`, :class:`ConditionalAxisLabelFontWeight`)
+        Font weight of axis tick labels.
     labelLimit : anyOf(float, :class:`ExprRef`)
+        Maximum allowed pixel width of axis tick labels.
 
+        **Default value:** ``180``
     labelLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line label text or label text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     labelOffset : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        Position offset in pixels to apply to labels, in addition to tickOffset.
 
+        **Default value:** ``0``
     labelOpacity : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
+        The opacity of the labels.
     labelOverlap : anyOf(:class:`LabelOverlap`, :class:`ExprRef`)
         The strategy to use for resolving overlap of axis labels. If ``false`` (the
         default), no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a
@@ -996,16 +1264,28 @@ class AxisConfig(VegaLiteSchema):
         **Default value:** ``true`` for non-nominal fields with non-log scales; ``"greedy"``
         for log scales; otherwise ``false``.
     labelPadding : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The padding in pixels between labels and ticks.
 
+        **Default value:** ``2``
     labelSeparation : anyOf(float, :class:`ExprRef`)
+        The minimum separation that must be between label bounding boxes for them to be
+        considered non-overlapping (default ``0`` ). This property is ignored if
+        *labelOverlap* resolution is not enabled.
+    labels : boolean
+        A boolean flag indicating if labels should be included as part of the axis.
 
-    labels : anyOf(boolean, :class:`ExprRef`)
-
+        **Default value:** ``true``.
     maxExtent : anyOf(float, :class:`ExprRef`)
+        The maximum extent in pixels that axis ticks and labels should use. This determines
+        a maximum offset value for axis titles.
 
+        **Default value:** ``undefined``.
     minExtent : anyOf(float, :class:`ExprRef`)
+        The minimum extent in pixels that axis ticks and labels should use. This determines
+        a minimum offset value for axis titles.
 
-    offset : float
+        **Default value:** ``30`` for y-axis; ``undefined`` for x-axis.
+    offset : anyOf(float, :class:`ExprRef`)
         The offset, in pixels, by which to displace the axis from the edge of the enclosing
         group or data rectangle.
 
@@ -1034,12 +1314,17 @@ class AxisConfig(VegaLiteSchema):
         style. For example, an x-axis mark with ``"style": "foo"`` will use ``config.axisX``
         and ``config.style.foo`` (the specified style ``"foo"`` has higher precedence).
     tickBand : anyOf(enum('center', 'extent'), :class:`ExprRef`)
-
+        For band scales, indicates if ticks and grid lines should be placed at the
+        ``"center"`` of a band (default) or at the band ``"extent"`` s to indicate intervals
     tickCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for the tick lines' ending style. One of ``"butt"``, ``"round"`` or
+        ``"square"``.
 
-    tickColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`,
-    :class:`ConditionalAxisColor`)
+        **Default value:** ``"butt"``
+    tickColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`, :class:`ConditionalAxisColor`)
+        The color of the axis's tick.
 
+        **Default value:** ``"gray"``
     tickCount : anyOf(float, :class:`TimeInterval`, :class:`TimeIntervalStep`, :class:`ExprRef`)
         A desired number of ticks, for axes visualizing quantitative scales. The resulting
         number may be different so that values are "nice" (multiples of 2, 5, 10) and lie
@@ -1055,28 +1340,40 @@ class AxisConfig(VegaLiteSchema):
         **Default value** : Determine using a formula ``ceil(width/40)`` for x and
         ``ceil(height/40)`` for y.
     tickDash : anyOf(List(float), :class:`ExprRef`, :class:`ConditionalAxisNumberArray`)
-
+        An array of alternating [stroke, space] lengths for dashed tick mark lines.
     tickDashOffset : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
-
-    tickExtra : anyOf(boolean, :class:`ExprRef`)
-
+        The pixel offset at which to start drawing with the tick mark dash array.
+    tickExtra : boolean
+        Boolean flag indicating if an extra axis tick should be added for the initial
+        position of the axis. This flag is useful for styling axes for ``band`` scales such
+        that ticks are placed on band boundaries rather in the middle of a band. Use in
+        conjunction with ``"bandPosition": 1`` and an axis ``"padding"`` value of ``0``.
     tickMinStep : anyOf(float, :class:`ExprRef`)
         The minimum desired step between axis ticks, in terms of scale domain values. For
         example, a value of ``1`` indicates that ticks should not be less than 1 unit apart.
         If ``tickMinStep`` is specified, the ``tickCount`` value will be adjusted, if
         necessary, to enforce the minimum step value.
     tickOffset : anyOf(float, :class:`ExprRef`)
-
+        Position offset in pixels to apply to ticks, labels, and gridlines.
     tickOpacity : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        Opacity of the ticks.
+    tickRound : boolean
+        Boolean flag indicating if pixel position values should be rounded to the nearest
+        integer.
 
-    tickRound : anyOf(boolean, :class:`ExprRef`)
-
+        **Default value:** ``true``
     tickSize : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The size in pixels of axis ticks.
 
+        **Default value:** ``5``
     tickWidth : anyOf(float, :class:`ExprRef`, :class:`ConditionalAxisNumber`)
+        The width, in pixels, of ticks.
 
-    ticks : anyOf(boolean, :class:`ExprRef`)
+        **Default value:** ``1``
+    ticks : boolean
+        Boolean value that determines whether the axis should include ticks.
 
+        **Default value:** ``true``
     title : anyOf(:class:`Text`, None)
         A title for the field. If ``null``, the title will be removed.
 
@@ -1093,44 +1390,56 @@ class AxisConfig(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
     titleAlign : anyOf(:class:`Align`, :class:`ExprRef`)
-
+        Horizontal text alignment of axis titles.
     titleAnchor : anyOf(:class:`TitleAnchor`, :class:`ExprRef`)
-
+        Text anchor position for placing axis titles.
     titleAngle : anyOf(float, :class:`ExprRef`)
-
+        Angle in degrees of axis titles.
     titleBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
-
+        Vertical text baseline for axis titles. One of ``"alphabetic"`` (default),
+        ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The
+        ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and
+        ``"bottom"``, but are calculated relative to the *lineHeight* rather than *fontSize*
+        alone.
     titleColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Color of the title, can be in hex color code or regular color name.
     titleFont : anyOf(string, :class:`ExprRef`)
-
+        Font of the title. (e.g., ``"Helvetica Neue"`` ).
     titleFontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size of the title.
     titleFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style of the title.
     titleFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight of the title. This can be either a string (e.g ``"bold"``, ``"normal"``
+        ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400``
+        and ``"bold"`` = ``700`` ).
     titleLimit : anyOf(float, :class:`ExprRef`)
-
+        Maximum allowed pixel width of axis titles.
     titleLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line title text or title text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     titleOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the axis title.
     titlePadding : anyOf(float, :class:`ExprRef`)
-
+        The padding, in pixels, between title and axis.
     titleX : anyOf(float, :class:`ExprRef`)
-
+        X-coordinate of the axis title relative to the axis group.
     titleY : anyOf(float, :class:`ExprRef`)
-
+        Y-coordinate of the axis title relative to the axis group.
     translate : anyOf(float, :class:`ExprRef`)
+        Coordinate space translation offset for axis layout. By default, axes are translated
+        by a 0.5 pixel offset for both the x and y coordinates in order to align stroked
+        lines with the pixel grid. However, for vector graphics output these pixel-specific
+        adjustments may be undesirable, in which case translate can be changed (for example,
+        to zero).
 
-    values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`),
-    :class:`ExprRef`)
+        **Default value:** ``0.5``
+    values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`), :class:`ExprRef`)
         Explicitly set the visible axis tick values.
     zindex : float
         A non-negative integer indicating the z-index of the axis. If zindex is 0, axes
@@ -1216,7 +1525,7 @@ class AxisResolveMap(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     x : :class:`ResolveMode`
@@ -1230,12 +1539,24 @@ class AxisResolveMap(VegaLiteSchema):
         super(AxisResolveMap, self).__init__(x=x, y=y, **kwds)
 
 
+class BBox(VegaLiteSchema):
+    """BBox schema wrapper
+
+    anyOf(List(float), List(float))
+    Bounding box https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/BBox'}
+
+    def __init__(self, *args, **kwds):
+        super(BBox, self).__init__(*args, **kwds)
+
+
 class BarConfig(AnyMarkConfig):
     """BarConfig schema wrapper
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(:class:`Align`, :class:`ExprRef`)
@@ -1244,15 +1565,25 @@ class BarConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     angle : anyOf(float, :class:`ExprRef`)
-
+        The rotation angle of the text, in degrees.
     aria : anyOf(boolean, :class:`ExprRef`)
-
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
     ariaRole : anyOf(string, :class:`ExprRef`)
-
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
     ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
     aspect : anyOf(boolean, :class:`ExprRef`)
-
+        Whether to keep aspect ratio of image marks.
     baseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
         For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
         ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
@@ -1270,58 +1601,91 @@ class BarConfig(AnyMarkConfig):
 
         **Default value:** ``1``
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
         Default color.
 
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     continuousBandSize : float
         The default size of the bars on continuous scales.
 
         **Default value:** ``5``
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusEnd : anyOf(float, :class:`ExprRef`)
-        * For vertical bars, top-left and top-right corner radius. - For horizontal bars,
-          top-right and bottom-right corner radius.
+        For vertical bars, top-left and top-right corner radius.
+
+        For horizontal bars, top-right and bottom-right corner radius.
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
-    discreteBandSize : float
+        **Default value:** ``"ltr"``
+    discreteBandSize : anyOf(float, :class:`RelativeBandSize`)
         The default size of the bars with discrete dimensions. If unspecified, the default
         size is  ``step-2``, which provides 2 pixel offset between bars.
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     endAngle : anyOf(float, :class:`ExprRef`)
-
+        The end angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -1333,34 +1697,68 @@ class BarConfig(AnyMarkConfig):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
     height : anyOf(float, :class:`ExprRef`)
-
+        Height of the marks.
     href : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -1371,65 +1769,108 @@ class BarConfig(AnyMarkConfig):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     radius : anyOf(float, :class:`ExprRef`)
         For arc mark, the primary (outer) radius in pixels.
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
+
 
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
 
-    startAngle : anyOf(float, :class:`ExprRef`)
 
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
+
+
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
+    startAngle : anyOf(float, :class:`ExprRef`)
+        The start angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -1439,32 +1880,33 @@ class BarConfig(AnyMarkConfig):
     theta2 : anyOf(float, :class:`ExprRef`)
         The end angle of arc marks in radians. A value of 0 indicates up or “north”,
         increasing values proceed clockwise.
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        The URL of the image file for image marks.
     width : anyOf(float, :class:`ExprRef`)
-
+        Width of the marks.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -1508,7 +1950,7 @@ class BarConfig(AnyMarkConfig):
                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
                  strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
-                 timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
+                 timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined,
                  url=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined,
                  **kwds):
         super(BarConfig, self).__init__(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
@@ -1537,9 +1979,9 @@ class BarConfig(AnyMarkConfig):
                                         strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                                         strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
                                         tension=tension, text=text, theta=theta, theta2=theta2,
-                                        timeUnitBand=timeUnitBand,
-                                        timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
-                                        url=url, width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+                                        timeUnitBandPosition=timeUnitBandPosition,
+                                        timeUnitBandSize=timeUnitBandSize, tooltip=tooltip, url=url,
+                                        width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
 
 
 class BaseTitleNoValueRefs(VegaLiteSchema):
@@ -1547,18 +1989,25 @@ class BaseTitleNoValueRefs(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : :class:`Align`
         Horizontal text alignment for title text. One of ``"left"``, ``"center"``, or
         ``"right"``.
     anchor : anyOf(:class:`TitleAnchor`, :class:`ExprRef`)
-
+        The anchor position for placing the title and subtitle text. One of ``"start"``,
+        ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor
+        positions map to a left-, center-, or right-aligned title.
     angle : anyOf(float, :class:`ExprRef`)
-
+        Angle in degrees of title and subtitle text.
     aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG group, removing the title from the ARIA accessibility tree.
 
+        **Default value:** ``true``
     baseline : :class:`TextBaseline`
         Vertical text baseline for title and subtitle text. One of ``"alphabetic"``
         (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or
@@ -1566,45 +2015,56 @@ class BaseTitleNoValueRefs(VegaLiteSchema):
         to ``"top"`` and ``"bottom"``, but are calculated relative to the *lineHeight*
         rather than *fontSize* alone.
     color : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Text color for title text.
     dx : anyOf(float, :class:`ExprRef`)
-
+        Delta offset for title and subtitle text x-coordinate.
     dy : anyOf(float, :class:`ExprRef`)
-
+        Delta offset for title and subtitle text y-coordinate.
     font : anyOf(string, :class:`ExprRef`)
-
+        Font name for title text.
     fontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size in pixels for title text.
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style for title text.
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight for title text. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     frame : anyOf(anyOf(:class:`TitleFrame`, string), :class:`ExprRef`)
-
+        The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative
+        to the full bounding box) or ``"group"`` (to anchor relative to the group width or
+        height).
     limit : anyOf(float, :class:`ExprRef`)
-
+        The maximum allowed length in pixels of title and subtitle text.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line title text or title text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     offset : anyOf(float, :class:`ExprRef`)
-
+        The orthogonal offset in pixels by which to displace the title group from its
+        position along the edge of the chart.
     orient : anyOf(:class:`TitleOrient`, :class:`ExprRef`)
-
+        Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` )
     subtitleColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Text color for subtitle text.
     subtitleFont : anyOf(string, :class:`ExprRef`)
-
+        Font name for subtitle text.
     subtitleFontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size in pixels for subtitle text.
     subtitleFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style for subtitle text.
     subtitleFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight for subtitle text. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     subtitleLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line subtitle text.
     subtitlePadding : anyOf(float, :class:`ExprRef`)
-
+        The padding in pixels between title and subtitle text.
     zindex : anyOf(float, :class:`ExprRef`)
+        The integer z-index indicating the layering of the title group relative to other
+        axis, mark, and legend groups.
 
+        **Default value:** ``0``.
     """
     _schema = {'$ref': '#/definitions/BaseTitleNoValueRefs'}
 
@@ -1633,7 +2093,7 @@ class BaseTitleNoValueRefs(VegaLiteSchema):
 class BinExtent(VegaLiteSchema):
     """BinExtent schema wrapper
 
-    anyOf(List([float, float]), :class:`SelectionExtent`)
+    anyOf(List(float), :class:`ParameterExtent`)
     """
     _schema = {'$ref': '#/definitions/BinExtent'}
 
@@ -1647,7 +2107,7 @@ class BinParams(VegaLiteSchema):
     Mapping(required=[])
     Binning properties or boolean flag for determining whether to bin data or not.
 
-    Attributes
+    Parameters
     ----------
 
     anchor : float
@@ -1661,7 +2121,7 @@ class BinParams(VegaLiteSchema):
         **Default value:** ``10``
     binned : boolean
         When set to ``true``, Vega-Lite treats the input data as already binned.
-    divide : List([float, float])
+    divide : List(float)
         Scale factors indicating allowable subdivisions. The default value is [5, 2], which
         indicates that for base 10 numbers (the default base), the method may consider
         dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the
@@ -1704,7 +2164,7 @@ class Binding(VegaLiteSchema):
     """Binding schema wrapper
 
     anyOf(:class:`BindCheckbox`, :class:`BindRadioSelect`, :class:`BindRange`,
-    :class:`InputBinding`)
+    :class:`BindInput`, :class:`BindDirect`)
     """
     _schema = {'$ref': '#/definitions/Binding'}
 
@@ -1717,26 +2177,92 @@ class BindCheckbox(Binding):
 
     Mapping(required=[input])
 
-    Attributes
+    Parameters
     ----------
 
     input : string
 
     debounce : float
-
+        If defined, delays event handling until the specified milliseconds have elapsed
+        since the last event was fired.
     element : :class:`Element`
-
+        An optional CSS selector string indicating the parent element to which the input
+        element should be added. By default, all input elements are added within the parent
+        container of the Vega view.
     name : string
-
-    type : string
-
+        By default, the signal name is used to label input elements. This ``name`` property
+        can be used instead to specify a custom label for the bound signal.
     """
     _schema = {'$ref': '#/definitions/BindCheckbox'}
 
-    def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, name=Undefined,
-                 type=Undefined, **kwds):
+    def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, name=Undefined, **kwds):
         super(BindCheckbox, self).__init__(input=input, debounce=debounce, element=element, name=name,
-                                           type=type, **kwds)
+                                           **kwds)
+
+
+class BindDirect(Binding):
+    """BindDirect schema wrapper
+
+    Mapping(required=[element])
+
+    Parameters
+    ----------
+
+    element : anyOf(:class:`Element`, Mapping(required=[]))
+        An input element that exposes a *value* property and supports the `EventTarget
+        <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget>`__ interface, or a
+        CSS selector string to such an element. When the element updates and dispatches an
+        event, the *value* property will be used as the new, bound signal value. When the
+        signal updates independent of the element, the *value* property will be set to the
+        signal value and a new event will be dispatched on the element.
+    debounce : float
+        If defined, delays event handling until the specified milliseconds have elapsed
+        since the last event was fired.
+    event : string
+        The event (default ``"input"`` ) to listen for to track changes on the external
+        element.
+    """
+    _schema = {'$ref': '#/definitions/BindDirect'}
+
+    def __init__(self, element=Undefined, debounce=Undefined, event=Undefined, **kwds):
+        super(BindDirect, self).__init__(element=element, debounce=debounce, event=event, **kwds)
+
+
+class BindInput(Binding):
+    """BindInput schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    autocomplete : string
+        A hint for form autofill. See the `HTML autocomplete attribute
+        <https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete>`__ for
+        additional information.
+    debounce : float
+        If defined, delays event handling until the specified milliseconds have elapsed
+        since the last event was fired.
+    element : :class:`Element`
+        An optional CSS selector string indicating the parent element to which the input
+        element should be added. By default, all input elements are added within the parent
+        container of the Vega view.
+    input : string
+        The type of input element to use. The valid values are ``"checkbox"``, ``"radio"``,
+        ``"range"``, ``"select"``, and any other legal `HTML form input type
+        <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input>`__.
+    name : string
+        By default, the signal name is used to label input elements. This ``name`` property
+        can be used instead to specify a custom label for the bound signal.
+    placeholder : string
+        Text that appears in the form control when it has no value set.
+    """
+    _schema = {'$ref': '#/definitions/BindInput'}
+
+    def __init__(self, autocomplete=Undefined, debounce=Undefined, element=Undefined, input=Undefined,
+                 name=Undefined, placeholder=Undefined, **kwds):
+        super(BindInput, self).__init__(autocomplete=autocomplete, debounce=debounce, element=element,
+                                        input=input, name=name, placeholder=placeholder, **kwds)
 
 
 class BindRadioSelect(Binding):
@@ -1744,31 +2270,33 @@ class BindRadioSelect(Binding):
 
     Mapping(required=[input, options])
 
-    Attributes
+    Parameters
     ----------
 
     input : enum('radio', 'select')
 
     options : List(Any)
-
+        An array of options to select from.
     debounce : float
-
+        If defined, delays event handling until the specified milliseconds have elapsed
+        since the last event was fired.
     element : :class:`Element`
-
+        An optional CSS selector string indicating the parent element to which the input
+        element should be added. By default, all input elements are added within the parent
+        container of the Vega view.
     labels : List(string)
-
+        An array of label strings to represent the ``options`` values. If unspecified, the
+        ``options`` value will be coerced to a string and used as the label.
     name : string
-
-    type : string
-
+        By default, the signal name is used to label input elements. This ``name`` property
+        can be used instead to specify a custom label for the bound signal.
     """
     _schema = {'$ref': '#/definitions/BindRadioSelect'}
 
     def __init__(self, input=Undefined, options=Undefined, debounce=Undefined, element=Undefined,
-                 labels=Undefined, name=Undefined, type=Undefined, **kwds):
+                 labels=Undefined, name=Undefined, **kwds):
         super(BindRadioSelect, self).__init__(input=input, options=options, debounce=debounce,
-                                              element=element, labels=labels, name=name, type=type,
-                                              **kwds)
+                                              element=element, labels=labels, name=name, **kwds)
 
 
 class BindRange(Binding):
@@ -1776,32 +2304,37 @@ class BindRange(Binding):
 
     Mapping(required=[input])
 
-    Attributes
+    Parameters
     ----------
 
     input : string
 
     debounce : float
-
+        If defined, delays event handling until the specified milliseconds have elapsed
+        since the last event was fired.
     element : :class:`Element`
-
+        An optional CSS selector string indicating the parent element to which the input
+        element should be added. By default, all input elements are added within the parent
+        container of the Vega view.
     max : float
-
+        Sets the maximum slider value. Defaults to the larger of the signal value and
+        ``100``.
     min : float
-
+        Sets the minimum slider value. Defaults to the smaller of the signal value and
+        ``0``.
     name : string
-
+        By default, the signal name is used to label input elements. This ``name`` property
+        can be used instead to specify a custom label for the bound signal.
     step : float
-
-    type : string
-
+        Sets the minimum slider increment. If undefined, the step size will be automatically
+        determined based on the ``min`` and ``max`` values.
     """
     _schema = {'$ref': '#/definitions/BindRange'}
 
     def __init__(self, input=Undefined, debounce=Undefined, element=Undefined, max=Undefined,
-                 min=Undefined, name=Undefined, step=Undefined, type=Undefined, **kwds):
+                 min=Undefined, name=Undefined, step=Undefined, **kwds):
         super(BindRange, self).__init__(input=input, debounce=debounce, element=element, max=max,
-                                        min=min, name=name, step=step, type=type, **kwds)
+                                        min=min, name=name, step=step, **kwds)
 
 
 class Blend(VegaLiteSchema):
@@ -1822,29 +2355,32 @@ class BoxPlotConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    box : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    box : anyOf(boolean, :class:`AnyMarkConfig`)
 
     extent : anyOf(string, float)
-        The extent of the whiskers. Available options include: - ``"min-max"`` : min and max
-        are the lower and upper whiskers respectively. - A number representing multiple of
-        the interquartile range. This number will be multiplied by the IQR to determine
-        whisker boundary, which spans from the smallest data to the largest data within the
-        range *[Q1 - k * IQR, Q3 + k * IQR]* where *Q1* and *Q3* are the first and third
-        quartiles while *IQR* is the interquartile range ( *Q3-Q1* ).
+        The extent of the whiskers. Available options include:
+
+
+        * ``"min-max"`` : min and max are the lower and upper whiskers respectively.
+        * A number representing multiple of the interquartile range. This number will be
+          multiplied by the IQR to determine whisker boundary, which spans from the smallest
+          data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where
+          *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile
+          range ( *Q3-Q1* ).
 
         **Default value:** ``1.5``.
-    median : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    median : anyOf(boolean, :class:`AnyMarkConfig`)
 
-    outliers : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    outliers : anyOf(boolean, :class:`AnyMarkConfig`)
 
-    rule : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    rule : anyOf(boolean, :class:`AnyMarkConfig`)
 
     size : float
         Size of the box and median tick of a box plot
-    ticks : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    ticks : anyOf(boolean, :class:`AnyMarkConfig`)
 
     """
     _schema = {'$ref': '#/definitions/BoxPlotConfig'}
@@ -1860,7 +2396,7 @@ class BrushConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     cursor : :class:`Cursor`
@@ -2018,7 +2554,7 @@ class BoxPlotDef(CompositeMarkDef):
 
     Mapping(required=[type])
 
-    Attributes
+    Parameters
     ----------
 
     type : :class:`BoxPlot`
@@ -2026,7 +2562,7 @@ class BoxPlotDef(CompositeMarkDef):
         ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``,
         ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``,
         ``"errorband"``, ``"errorbar"`` ).
-    box : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    box : anyOf(boolean, :class:`AnyMarkConfig`)
 
     clip : boolean
         Whether a composite mark be clipped to the enclosing group’s width and height.
@@ -2036,20 +2572,35 @@ class BoxPlotDef(CompositeMarkDef):
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     extent : anyOf(string, float)
-        The extent of the whiskers. Available options include: - ``"min-max"`` : min and max
-        are the lower and upper whiskers respectively. - A number representing multiple of
-        the interquartile range. This number will be multiplied by the IQR to determine
-        whisker boundary, which spans from the smallest data to the largest data within the
-        range *[Q1 - k * IQR, Q3 + k * IQR]* where *Q1* and *Q3* are the first and third
-        quartiles while *IQR* is the interquartile range ( *Q3-Q1* ).
+        The extent of the whiskers. Available options include:
+
+
+        * ``"min-max"`` : min and max are the lower and upper whiskers respectively.
+        * A number representing multiple of the interquartile range. This number will be
+          multiplied by the IQR to determine whisker boundary, which spans from the smallest
+          data to the largest data within the range *[Q1 - k * IQR, Q3 + k * IQR]* where
+          *Q1* and *Q3* are the first and third quartiles while *IQR* is the interquartile
+          range ( *Q3-Q1* ).
 
         **Default value:** ``1.5``.
-    median : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    invalid : enum('filter', None)
+        Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
+    median : anyOf(boolean, :class:`AnyMarkConfig`)
 
     opacity : float
         The opacity (value between [0,1]) of the mark.
@@ -2059,22 +2610,22 @@ class BoxPlotDef(CompositeMarkDef):
         when the orientation is ambiguous.
 
         **Default value:** ``"vertical"``.
-    outliers : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    outliers : anyOf(boolean, :class:`AnyMarkConfig`)
 
-    rule : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    rule : anyOf(boolean, :class:`AnyMarkConfig`)
 
     size : float
         Size of the box and median tick of a box plot
-    ticks : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    ticks : anyOf(boolean, :class:`AnyMarkConfig`)
 
     """
     _schema = {'$ref': '#/definitions/BoxPlotDef'}
 
     def __init__(self, type=Undefined, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined,
-                 median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined,
-                 rule=Undefined, size=Undefined, ticks=Undefined, **kwds):
+                 invalid=Undefined, median=Undefined, opacity=Undefined, orient=Undefined,
+                 outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds):
         super(BoxPlotDef, self).__init__(type=type, box=box, clip=clip, color=color, extent=extent,
-                                         median=median, opacity=opacity, orient=orient,
+                                         invalid=invalid, median=median, opacity=opacity, orient=orient,
                                          outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds)
 
 
@@ -2083,7 +2634,7 @@ class CompositionConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     columns : float
@@ -2095,9 +2646,12 @@ class CompositionConfig(VegaLiteSchema):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
@@ -2292,7 +2846,7 @@ class ConditionalMarkPropFieldOrDatumDef(VegaLiteSchema):
     """ConditionalMarkPropFieldOrDatumDef schema wrapper
 
     anyOf(:class:`ConditionalPredicateMarkPropFieldOrDatumDef`,
-    :class:`ConditionalSelectionMarkPropFieldOrDatumDef`)
+    :class:`ConditionalParameterMarkPropFieldOrDatumDef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldOrDatumDef'}
 
@@ -2304,7 +2858,7 @@ class ConditionalMarkPropFieldOrDatumDefTypeForShape(VegaLiteSchema):
     """ConditionalMarkPropFieldOrDatumDefTypeForShape schema wrapper
 
     anyOf(:class:`ConditionalPredicateMarkPropFieldOrDatumDefTypeForShape`,
-    :class:`ConditionalSelectionMarkPropFieldOrDatumDefTypeForShape`)
+    :class:`ConditionalParameterMarkPropFieldOrDatumDefTypeForShape`)
     """
     _schema = {'$ref': '#/definitions/ConditionalMarkPropFieldOrDatumDef<TypeForShape>'}
 
@@ -2312,6 +2866,28 @@ class ConditionalMarkPropFieldOrDatumDefTypeForShape(VegaLiteSchema):
         super(ConditionalMarkPropFieldOrDatumDefTypeForShape, self).__init__(*args, **kwds)
 
 
+class ConditionalParameterMarkPropFieldOrDatumDef(ConditionalMarkPropFieldOrDatumDef):
+    """ConditionalParameterMarkPropFieldOrDatumDef schema wrapper
+
+    anyOf(Mapping(required=[param]), Mapping(required=[param]))
+    """
+    _schema = {'$ref': '#/definitions/ConditionalParameter<MarkPropFieldOrDatumDef>'}
+
+    def __init__(self, *args, **kwds):
+        super(ConditionalParameterMarkPropFieldOrDatumDef, self).__init__(*args, **kwds)
+
+
+class ConditionalParameterMarkPropFieldOrDatumDefTypeForShape(ConditionalMarkPropFieldOrDatumDefTypeForShape):
+    """ConditionalParameterMarkPropFieldOrDatumDefTypeForShape schema wrapper
+
+    anyOf(Mapping(required=[param]), Mapping(required=[param]))
+    """
+    _schema = {'$ref': '#/definitions/ConditionalParameter<MarkPropFieldOrDatumDef<TypeForShape>>'}
+
+    def __init__(self, *args, **kwds):
+        super(ConditionalParameterMarkPropFieldOrDatumDefTypeForShape, self).__init__(*args, **kwds)
+
+
 class ConditionalPredicateMarkPropFieldOrDatumDef(ConditionalMarkPropFieldOrDatumDef):
     """ConditionalPredicateMarkPropFieldOrDatumDef schema wrapper
 
@@ -2411,33 +2987,11 @@ class ConditionalPredicateValueDefnumbernullExprRef(VegaLiteSchema):
         super(ConditionalPredicateValueDefnumbernullExprRef, self).__init__(*args, **kwds)
 
 
-class ConditionalSelectionMarkPropFieldOrDatumDef(ConditionalMarkPropFieldOrDatumDef):
-    """ConditionalSelectionMarkPropFieldOrDatumDef schema wrapper
-
-    anyOf(Mapping(required=[selection]), Mapping(required=[selection]))
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<MarkPropFieldOrDatumDef>'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalSelectionMarkPropFieldOrDatumDef, self).__init__(*args, **kwds)
-
-
-class ConditionalSelectionMarkPropFieldOrDatumDefTypeForShape(ConditionalMarkPropFieldOrDatumDefTypeForShape):
-    """ConditionalSelectionMarkPropFieldOrDatumDefTypeForShape schema wrapper
-
-    anyOf(Mapping(required=[selection]), Mapping(required=[selection]))
-    """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<MarkPropFieldOrDatumDef<TypeForShape>>'}
-
-    def __init__(self, *args, **kwds):
-        super(ConditionalSelectionMarkPropFieldOrDatumDefTypeForShape, self).__init__(*args, **kwds)
-
-
 class ConditionalStringFieldDef(VegaLiteSchema):
     """ConditionalStringFieldDef schema wrapper
 
     anyOf(:class:`ConditionalPredicateStringFieldDef`,
-    :class:`ConditionalSelectionStringFieldDef`)
+    :class:`ConditionalParameterStringFieldDef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalStringFieldDef'}
 
@@ -2445,16 +2999,16 @@ class ConditionalStringFieldDef(VegaLiteSchema):
         super(ConditionalStringFieldDef, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
-    """ConditionalPredicateStringFieldDef schema wrapper
+class ConditionalParameterStringFieldDef(ConditionalStringFieldDef):
+    """ConditionalParameterStringFieldDef schema wrapper
 
-    Mapping(required=[test])
+    Mapping(required=[param])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     aggregate : :class:`Aggregate`
         Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
         ``"min"``, ``"max"``, ``"count"`` ).
@@ -2463,26 +3017,19 @@ class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -2495,6 +3042,9 @@ class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
 
         **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     field : :class:`Field`
         **Required.** A string defining the name of the field from which to pull a data
         value or an object defining iterated values from the `repeat
@@ -2510,14 +3060,14 @@ class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -2538,15 +3088,12 @@ class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        **Default value:**
 
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
         Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
         field. or `a temporal field that gets casted as ordinal
@@ -2572,7 +3119,7 @@ class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -2592,72 +3139,83 @@ class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<StringFieldDef>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<StringFieldDef>'}
 
-    def __init__(self, test=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined,
+    def __init__(self, param=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 empty=Undefined, field=Undefined, format=Undefined, formatType=Undefined,
                  timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(ConditionalPredicateStringFieldDef, self).__init__(test=test, aggregate=aggregate,
-                                                                 band=band, bin=bin, field=field,
+        super(ConditionalParameterStringFieldDef, self).__init__(param=param, aggregate=aggregate,
+                                                                 bandPosition=bandPosition, bin=bin,
+                                                                 empty=empty, field=field,
                                                                  format=format, formatType=formatType,
-                                                                 labelExpr=labelExpr, timeUnit=timeUnit,
-                                                                 title=title, type=type, **kwds)
+                                                                 timeUnit=timeUnit, title=title,
+                                                                 type=type, **kwds)
 
 
-class ConditionalSelectionStringFieldDef(ConditionalStringFieldDef):
-    """ConditionalSelectionStringFieldDef schema wrapper
+class ConditionalPredicateStringFieldDef(ConditionalStringFieldDef):
+    """ConditionalPredicateStringFieldDef schema wrapper
 
-    Mapping(required=[selection])
+    Mapping(required=[test])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     aggregate : :class:`Aggregate`
         Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
         ``"min"``, ``"max"``, ``"count"`` ).
@@ -2666,26 +3224,19 @@ class ConditionalSelectionStringFieldDef(ConditionalStringFieldDef):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -2713,14 +3264,14 @@ class ConditionalSelectionStringFieldDef(ConditionalStringFieldDef):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -2741,15 +3292,12 @@ class ConditionalSelectionStringFieldDef(ConditionalStringFieldDef):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        **Default value:**
 
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
         Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
         field. or `a temporal field that gets casted as ordinal
@@ -2775,7 +3323,7 @@ class ConditionalSelectionStringFieldDef(ConditionalStringFieldDef):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -2795,66 +3343,78 @@ class ConditionalSelectionStringFieldDef(ConditionalStringFieldDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<StringFieldDef>'}
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<StringFieldDef>'}
 
-    def __init__(self, selection=Undefined, aggregate=Undefined, band=Undefined, bin=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(ConditionalSelectionStringFieldDef, self).__init__(selection=selection,
-                                                                 aggregate=aggregate, band=band,
-                                                                 bin=bin, field=field, format=format,
+    def __init__(self, test=Undefined, aggregate=Undefined, bandPosition=Undefined, bin=Undefined,
+                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
+        super(ConditionalPredicateStringFieldDef, self).__init__(test=test, aggregate=aggregate,
+                                                                 bandPosition=bandPosition, bin=bin,
+                                                                 field=field, format=format,
                                                                  formatType=formatType,
-                                                                 labelExpr=labelExpr, timeUnit=timeUnit,
-                                                                 title=title, type=type, **kwds)
+                                                                 timeUnit=timeUnit, title=title,
+                                                                 type=type, **kwds)
 
 
 class ConditionalValueDefGradientstringnullExprRef(VegaLiteSchema):
     """ConditionalValueDefGradientstringnullExprRef schema wrapper
 
     anyOf(:class:`ConditionalPredicateValueDefGradientstringnullExprRef`,
-    :class:`ConditionalSelectionValueDefGradientstringnullExprRef`)
+    :class:`ConditionalParameterValueDefGradientstringnullExprRef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>'}
 
@@ -2862,49 +3422,51 @@ class ConditionalValueDefGradientstringnullExprRef(VegaLiteSchema):
         super(ConditionalValueDefGradientstringnullExprRef, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateValueDefGradientstringnullExprRef(ConditionalValueDefGradientstringnullExprRef):
-    """ConditionalPredicateValueDefGradientstringnullExprRef schema wrapper
+class ConditionalParameterValueDefGradientstringnullExprRef(ConditionalValueDefGradientstringnullExprRef):
+    """ConditionalParameterValueDefGradientstringnullExprRef schema wrapper
 
-    Mapping(required=[test, value])
+    Mapping(required=[param, value])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(Gradient|string|null|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<ValueDef<(Gradient|string|null|ExprRef)>>'}
 
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDefGradientstringnullExprRef, self).__init__(test=test,
-                                                                                    value=value, **kwds)
+    def __init__(self, param=Undefined, value=Undefined, empty=Undefined, **kwds):
+        super(ConditionalParameterValueDefGradientstringnullExprRef, self).__init__(param=param,
+                                                                                    value=value,
+                                                                                    empty=empty, **kwds)
 
 
-class ConditionalSelectionValueDefGradientstringnullExprRef(ConditionalValueDefGradientstringnullExprRef):
-    """ConditionalSelectionValueDefGradientstringnullExprRef schema wrapper
+class ConditionalPredicateValueDefGradientstringnullExprRef(ConditionalValueDefGradientstringnullExprRef):
+    """ConditionalPredicateValueDefGradientstringnullExprRef schema wrapper
 
-    Mapping(required=[selection, value])
+    Mapping(required=[test, value])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef<(Gradient|string|null|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(Gradient|string|null|ExprRef)>>'}
 
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDefGradientstringnullExprRef, self).__init__(selection=selection,
+    def __init__(self, test=Undefined, value=Undefined, **kwds):
+        super(ConditionalPredicateValueDefGradientstringnullExprRef, self).__init__(test=test,
                                                                                     value=value, **kwds)
 
 
@@ -2912,7 +3474,7 @@ class ConditionalValueDefTextExprRef(VegaLiteSchema):
     """ConditionalValueDefTextExprRef schema wrapper
 
     anyOf(:class:`ConditionalPredicateValueDefTextExprRef`,
-    :class:`ConditionalSelectionValueDefTextExprRef`)
+    :class:`ConditionalParameterValueDefTextExprRef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalValueDef<(Text|ExprRef)>'}
 
@@ -2920,56 +3482,57 @@ class ConditionalValueDefTextExprRef(VegaLiteSchema):
         super(ConditionalValueDefTextExprRef, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateValueDefTextExprRef(ConditionalValueDefTextExprRef):
-    """ConditionalPredicateValueDefTextExprRef schema wrapper
+class ConditionalParameterValueDefTextExprRef(ConditionalValueDefTextExprRef):
+    """ConditionalParameterValueDefTextExprRef schema wrapper
 
-    Mapping(required=[test, value])
+    Mapping(required=[param, value])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     value : anyOf(:class:`Text`, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(Text|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<ValueDef<(Text|ExprRef)>>'}
 
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDefTextExprRef, self).__init__(test=test, value=value, **kwds)
+    def __init__(self, param=Undefined, value=Undefined, empty=Undefined, **kwds):
+        super(ConditionalParameterValueDefTextExprRef, self).__init__(param=param, value=value,
+                                                                      empty=empty, **kwds)
 
 
-class ConditionalSelectionValueDefTextExprRef(ConditionalValueDefTextExprRef):
-    """ConditionalSelectionValueDefTextExprRef schema wrapper
+class ConditionalPredicateValueDefTextExprRef(ConditionalValueDefTextExprRef):
+    """ConditionalPredicateValueDefTextExprRef schema wrapper
 
-    Mapping(required=[selection, value])
+    Mapping(required=[test, value])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     value : anyOf(:class:`Text`, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef<(Text|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(Text|ExprRef)>>'}
 
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDefTextExprRef, self).__init__(selection=selection, value=value,
-                                                                      **kwds)
+    def __init__(self, test=Undefined, value=Undefined, **kwds):
+        super(ConditionalPredicateValueDefTextExprRef, self).__init__(test=test, value=value, **kwds)
 
 
 class ConditionalValueDefnumber(VegaLiteSchema):
     """ConditionalValueDefnumber schema wrapper
 
     anyOf(:class:`ConditionalPredicateValueDefnumber`,
-    :class:`ConditionalSelectionValueDefnumber`)
+    :class:`ConditionalParameterValueDefnumber`)
     """
     _schema = {'$ref': '#/definitions/ConditionalValueDef<number>'}
 
@@ -2977,56 +3540,57 @@ class ConditionalValueDefnumber(VegaLiteSchema):
         super(ConditionalValueDefnumber, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateValueDefnumber(ConditionalValueDefnumber):
-    """ConditionalPredicateValueDefnumber schema wrapper
+class ConditionalParameterValueDefnumber(ConditionalValueDefnumber):
+    """ConditionalParameterValueDefnumber schema wrapper
 
-    Mapping(required=[test, value])
+    Mapping(required=[param, value])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     value : float
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<number>>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<ValueDef<number>>'}
 
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDefnumber, self).__init__(test=test, value=value, **kwds)
+    def __init__(self, param=Undefined, value=Undefined, empty=Undefined, **kwds):
+        super(ConditionalParameterValueDefnumber, self).__init__(param=param, value=value, empty=empty,
+                                                                 **kwds)
 
 
-class ConditionalSelectionValueDefnumber(ConditionalValueDefnumber):
-    """ConditionalSelectionValueDefnumber schema wrapper
+class ConditionalPredicateValueDefnumber(ConditionalValueDefnumber):
+    """ConditionalPredicateValueDefnumber schema wrapper
 
-    Mapping(required=[selection, value])
+    Mapping(required=[test, value])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     value : float
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef<number>>'}
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<number>>'}
 
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDefnumber, self).__init__(selection=selection, value=value,
-                                                                 **kwds)
+    def __init__(self, test=Undefined, value=Undefined, **kwds):
+        super(ConditionalPredicateValueDefnumber, self).__init__(test=test, value=value, **kwds)
 
 
 class ConditionalValueDefnumberArrayExprRef(VegaLiteSchema):
     """ConditionalValueDefnumberArrayExprRef schema wrapper
 
     anyOf(:class:`ConditionalPredicateValueDefnumberArrayExprRef`,
-    :class:`ConditionalSelectionValueDefnumberArrayExprRef`)
+    :class:`ConditionalParameterValueDefnumberArrayExprRef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalValueDef<(number[]|ExprRef)>'}
 
@@ -3034,57 +3598,58 @@ class ConditionalValueDefnumberArrayExprRef(VegaLiteSchema):
         super(ConditionalValueDefnumberArrayExprRef, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateValueDefnumberArrayExprRef(ConditionalValueDefnumberArrayExprRef):
-    """ConditionalPredicateValueDefnumberArrayExprRef schema wrapper
+class ConditionalParameterValueDefnumberArrayExprRef(ConditionalValueDefnumberArrayExprRef):
+    """ConditionalParameterValueDefnumberArrayExprRef schema wrapper
 
-    Mapping(required=[test, value])
+    Mapping(required=[param, value])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     value : anyOf(List(float), :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(number[]|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<ValueDef<(number[]|ExprRef)>>'}
 
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDefnumberArrayExprRef, self).__init__(test=test, value=value,
-                                                                             **kwds)
+    def __init__(self, param=Undefined, value=Undefined, empty=Undefined, **kwds):
+        super(ConditionalParameterValueDefnumberArrayExprRef, self).__init__(param=param, value=value,
+                                                                             empty=empty, **kwds)
 
 
-class ConditionalSelectionValueDefnumberArrayExprRef(ConditionalValueDefnumberArrayExprRef):
-    """ConditionalSelectionValueDefnumberArrayExprRef schema wrapper
+class ConditionalPredicateValueDefnumberArrayExprRef(ConditionalValueDefnumberArrayExprRef):
+    """ConditionalPredicateValueDefnumberArrayExprRef schema wrapper
 
-    Mapping(required=[selection, value])
+    Mapping(required=[test, value])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     value : anyOf(List(float), :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef<(number[]|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(number[]|ExprRef)>>'}
 
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDefnumberArrayExprRef, self).__init__(selection=selection,
-                                                                             value=value, **kwds)
+    def __init__(self, test=Undefined, value=Undefined, **kwds):
+        super(ConditionalPredicateValueDefnumberArrayExprRef, self).__init__(test=test, value=value,
+                                                                             **kwds)
 
 
 class ConditionalValueDefnumberExprRef(VegaLiteSchema):
     """ConditionalValueDefnumberExprRef schema wrapper
 
     anyOf(:class:`ConditionalPredicateValueDefnumberExprRef`,
-    :class:`ConditionalSelectionValueDefnumberExprRef`)
+    :class:`ConditionalParameterValueDefnumberExprRef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalValueDef<(number|ExprRef)>'}
 
@@ -3092,56 +3657,57 @@ class ConditionalValueDefnumberExprRef(VegaLiteSchema):
         super(ConditionalValueDefnumberExprRef, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateValueDefnumberExprRef(ConditionalValueDefnumberExprRef):
-    """ConditionalPredicateValueDefnumberExprRef schema wrapper
+class ConditionalParameterValueDefnumberExprRef(ConditionalValueDefnumberExprRef):
+    """ConditionalParameterValueDefnumberExprRef schema wrapper
 
-    Mapping(required=[test, value])
+    Mapping(required=[param, value])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     value : anyOf(float, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(number|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<ValueDef<(number|ExprRef)>>'}
 
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDefnumberExprRef, self).__init__(test=test, value=value, **kwds)
+    def __init__(self, param=Undefined, value=Undefined, empty=Undefined, **kwds):
+        super(ConditionalParameterValueDefnumberExprRef, self).__init__(param=param, value=value,
+                                                                        empty=empty, **kwds)
 
 
-class ConditionalSelectionValueDefnumberExprRef(ConditionalValueDefnumberExprRef):
-    """ConditionalSelectionValueDefnumberExprRef schema wrapper
+class ConditionalPredicateValueDefnumberExprRef(ConditionalValueDefnumberExprRef):
+    """ConditionalPredicateValueDefnumberExprRef schema wrapper
 
-    Mapping(required=[selection, value])
+    Mapping(required=[test, value])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     value : anyOf(float, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef<(number|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(number|ExprRef)>>'}
 
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDefnumberExprRef, self).__init__(selection=selection,
-                                                                        value=value, **kwds)
+    def __init__(self, test=Undefined, value=Undefined, **kwds):
+        super(ConditionalPredicateValueDefnumberExprRef, self).__init__(test=test, value=value, **kwds)
 
 
 class ConditionalValueDefstringExprRef(VegaLiteSchema):
     """ConditionalValueDefstringExprRef schema wrapper
 
     anyOf(:class:`ConditionalPredicateValueDefstringExprRef`,
-    :class:`ConditionalSelectionValueDefstringExprRef`)
+    :class:`ConditionalParameterValueDefstringExprRef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalValueDef<(string|ExprRef)>'}
 
@@ -3149,56 +3715,57 @@ class ConditionalValueDefstringExprRef(VegaLiteSchema):
         super(ConditionalValueDefstringExprRef, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateValueDefstringExprRef(ConditionalValueDefstringExprRef):
-    """ConditionalPredicateValueDefstringExprRef schema wrapper
+class ConditionalParameterValueDefstringExprRef(ConditionalValueDefstringExprRef):
+    """ConditionalParameterValueDefstringExprRef schema wrapper
 
-    Mapping(required=[test, value])
+    Mapping(required=[param, value])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     value : anyOf(string, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(string|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<ValueDef<(string|ExprRef)>>'}
 
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDefstringExprRef, self).__init__(test=test, value=value, **kwds)
+    def __init__(self, param=Undefined, value=Undefined, empty=Undefined, **kwds):
+        super(ConditionalParameterValueDefstringExprRef, self).__init__(param=param, value=value,
+                                                                        empty=empty, **kwds)
 
 
-class ConditionalSelectionValueDefstringExprRef(ConditionalValueDefstringExprRef):
-    """ConditionalSelectionValueDefstringExprRef schema wrapper
+class ConditionalPredicateValueDefstringExprRef(ConditionalValueDefstringExprRef):
+    """ConditionalPredicateValueDefstringExprRef schema wrapper
 
-    Mapping(required=[selection, value])
+    Mapping(required=[test, value])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     value : anyOf(string, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef<(string|ExprRef)>>'}
-
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDefstringExprRef, self).__init__(selection=selection,
-                                                                        value=value, **kwds)
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(string|ExprRef)>>'}
+
+    def __init__(self, test=Undefined, value=Undefined, **kwds):
+        super(ConditionalPredicateValueDefstringExprRef, self).__init__(test=test, value=value, **kwds)
 
 
 class ConditionalValueDefstringnullExprRef(VegaLiteSchema):
     """ConditionalValueDefstringnullExprRef schema wrapper
 
     anyOf(:class:`ConditionalPredicateValueDefstringnullExprRef`,
-    :class:`ConditionalSelectionValueDefstringnullExprRef`)
+    :class:`ConditionalParameterValueDefstringnullExprRef`)
     """
     _schema = {'$ref': '#/definitions/ConditionalValueDef<(string|null|ExprRef)>'}
 
@@ -3206,50 +3773,51 @@ class ConditionalValueDefstringnullExprRef(VegaLiteSchema):
         super(ConditionalValueDefstringnullExprRef, self).__init__(*args, **kwds)
 
 
-class ConditionalPredicateValueDefstringnullExprRef(ConditionalValueDefstringnullExprRef):
-    """ConditionalPredicateValueDefstringnullExprRef schema wrapper
+class ConditionalParameterValueDefstringnullExprRef(ConditionalValueDefstringnullExprRef):
+    """ConditionalParameterValueDefstringnullExprRef schema wrapper
 
-    Mapping(required=[test, value])
+    Mapping(required=[param, value])
 
-    Attributes
+    Parameters
     ----------
 
-    test : :class:`PredicateComposition`
-        Predicate for triggering the condition
+    param : :class:`ParameterName`
+        Filter using a parameter name.
     value : anyOf(string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
     """
-    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(string|null|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalParameter<ValueDef<(string|null|ExprRef)>>'}
 
-    def __init__(self, test=Undefined, value=Undefined, **kwds):
-        super(ConditionalPredicateValueDefstringnullExprRef, self).__init__(test=test, value=value,
-                                                                            **kwds)
+    def __init__(self, param=Undefined, value=Undefined, empty=Undefined, **kwds):
+        super(ConditionalParameterValueDefstringnullExprRef, self).__init__(param=param, value=value,
+                                                                            empty=empty, **kwds)
 
 
-class ConditionalSelectionValueDefstringnullExprRef(ConditionalValueDefstringnullExprRef):
-    """ConditionalSelectionValueDefstringnullExprRef schema wrapper
+class ConditionalPredicateValueDefstringnullExprRef(ConditionalValueDefstringnullExprRef):
+    """ConditionalPredicateValueDefstringnullExprRef schema wrapper
 
-    Mapping(required=[selection, value])
+    Mapping(required=[test, value])
 
-    Attributes
+    Parameters
     ----------
 
-    selection : :class:`SelectionComposition`
-        A `selection name <https://vega.github.io/vega-lite/docs/selection.html>`__, or a
-        series of `composed selections
-        <https://vega.github.io/vega-lite/docs/selection.html#compose>`__.
+    test : :class:`PredicateComposition`
+        Predicate for triggering the condition
     value : anyOf(string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ConditionalSelection<ValueDef<(string|null|ExprRef)>>'}
+    _schema = {'$ref': '#/definitions/ConditionalPredicate<ValueDef<(string|null|ExprRef)>>'}
 
-    def __init__(self, selection=Undefined, value=Undefined, **kwds):
-        super(ConditionalSelectionValueDefstringnullExprRef, self).__init__(selection=selection,
-                                                                            value=value, **kwds)
+    def __init__(self, test=Undefined, value=Undefined, **kwds):
+        super(ConditionalPredicateValueDefstringnullExprRef, self).__init__(test=test, value=value,
+                                                                            **kwds)
 
 
 class Config(VegaLiteSchema):
@@ -3257,7 +3825,7 @@ class Config(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     arc : :class:`RectConfig`
@@ -3352,12 +3920,15 @@ class Config(VegaLiteSchema):
     facet : :class:`CompositionConfig`
         Default configuration for the ``facet`` view composition operator
     fieldTitle : enum('verbal', 'functional', 'plain')
-        Defines how Vega-Lite generates title for fields. There are three possible styles: -
-        ``"verbal"`` (Default) - displays function in a verbal style (e.g., "Sum of field",
-        "Year-month of date", "field (binned)"). - ``"function"`` - displays function using
-        parentheses and capitalized texts (e.g., "SUM(field)", "YEARMONTH(date)",
-        "BIN(field)"). - ``"plain"`` - displays only the field name without functions (e.g.,
-        "field", "date", "field").
+        Defines how Vega-Lite generates title for fields. There are three possible styles:
+
+
+        * ``"verbal"`` (Default) - displays function in a verbal style (e.g., "Sum of
+          field", "Year-month of date", "field (binned)").
+        * ``"function"`` - displays function using parentheses and capitalized texts (e.g.,
+          "SUM(field)", "YEARMONTH(date)", "BIN(field)").
+        * ``"plain"`` - displays only the field name without functions (e.g., "field",
+          "date", "field").
     font : string
         Default font for all text marks, titles, and labels.
     geoshape : :class:`MarkConfig`
@@ -3405,11 +3976,51 @@ class Config(VegaLiteSchema):
         overridden by mark or style config settings, and by the lineBreak mark encoding
         channel. If signal-valued, either string or regular expression (regexp) values are
         valid.
+    locale : :class:`Locale`
+        Locale definitions for string parsing and formatting of number and date values. The
+        locale object should contain ``number`` and/or ``time`` properties with `locale
+        definitions <https://vega.github.io/vega/docs/api/locale/>`__. Locale definitions
+        provided in the config block may be overridden by the View constructor locale
+        option.
     mark : :class:`MarkConfig`
         Mark Config
+    normalizedNumberFormat : string
+        If normalizedNumberFormatType is not specified, D3 number format for axis labels,
+        text marks, and tooltips of normalized stacked fields (fields with ``stack:
+        "normalize"`` ). For example ``"s"`` for SI units. Use `D3's number format pattern
+        <https://github.com/d3/d3-format#locale_format>`__.
+
+        If ``config.normalizedNumberFormatType`` is specified and
+        ``config.customFormatTypes`` is ``true``, this value will be passed as ``format``
+        alongside ``datum.value`` to the ``config.numberFormatType`` function. **Default
+        value:** ``%``
+    normalizedNumberFormatType : string
+        `Custom format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__ for
+        ``config.normalizedNumberFormat``.
+
+        **Default value:** ``undefined`` -- This is equilvalent to call D3-format, which is
+        exposed as `format in Vega-Expression
+        <https://vega.github.io/vega/docs/expressions/#format>`__. **Note:** You must also
+        set ``customFormatTypes`` to ``true`` to use this feature.
     numberFormat : string
-        D3 Number format for guide labels and text marks. For example ``"s"`` for SI units.
-        Use `D3's number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        If numberFormatType is not specified, D3 number format for guide labels, text marks,
+        and tooltips of non-normalized fields (fields *without* ``stack: "normalize"`` ).
+        For example ``"s"`` for SI units. Use `D3's number format pattern
+        <https://github.com/d3/d3-format#locale_format>`__.
+
+        If ``config.numberFormatType`` is specified and ``config.customFormatTypes`` is
+        ``true``, this value will be passed as ``format`` alongside ``datum.value`` to the
+        ``config.numberFormatType`` function.
+    numberFormatType : string
+        `Custom format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__ for
+        ``config.numberFormat``.
+
+        **Default value:** ``undefined`` -- This is equilvalent to call D3-format, which is
+        exposed as `format in Vega-Expression
+        <https://vega.github.io/vega/docs/expressions/#format>`__. **Note:** You must also
+        set ``customFormatTypes`` to ``true`` to use this feature.
     padding : anyOf(:class:`Padding`, :class:`ExprRef`)
         The default visualization padding, in pixels, from the edge of the visualization
         canvas to the data rectangle. If a number, specifies padding for all sides. If an
@@ -3417,8 +4028,8 @@ class Config(VegaLiteSchema):
         "bottom": 5}`` to specify padding for each side of the visualization.
 
         **Default value** : ``5``
-    params : List(:class:`Parameter`)
-        Dynamic variables that parameterize a visualization.
+    params : List(:class:`TopLevelParameter`)
+        Dynamic variables or selections that parameterize a visualization.
     point : :class:`MarkConfig`
         Point-Specific Config
     projection : :class:`ProjectionConfig`
@@ -3461,6 +4072,16 @@ class Config(VegaLiteSchema):
 
         **Default value:** ``"%b %d, %Y"`` **Note:** Axes automatically determine the format
         for each label automatically so this config does not affect axes.
+    timeFormatType : string
+        `Custom format type
+        <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__ for
+        ``config.timeFormat``.
+
+        **Default value:** ``undefined`` -- This is equilvalent to call D3-time-format,
+        which is exposed as `timeFormat in Vega-Expression
+        <https://vega.github.io/vega/docs/expressions/#timeFormat>`__. **Note:** You must
+        also set ``customFormatTypes`` to ``true`` and there must *not* be a ``timeUnit``
+        defined to use this feature.
     title : :class:`TitleConfig`
         Title configuration, which determines default properties for all `titles
         <https://vega.github.io/vega-lite/docs/title.html>`__. For a full list of title
@@ -3487,11 +4108,13 @@ class Config(VegaLiteSchema):
                  errorbar=Undefined, facet=Undefined, fieldTitle=Undefined, font=Undefined,
                  geoshape=Undefined, header=Undefined, headerColumn=Undefined, headerFacet=Undefined,
                  headerRow=Undefined, image=Undefined, legend=Undefined, line=Undefined,
-                 lineBreak=Undefined, mark=Undefined, numberFormat=Undefined, padding=Undefined,
+                 lineBreak=Undefined, locale=Undefined, mark=Undefined,
+                 normalizedNumberFormat=Undefined, normalizedNumberFormatType=Undefined,
+                 numberFormat=Undefined, numberFormatType=Undefined, padding=Undefined,
                  params=Undefined, point=Undefined, projection=Undefined, range=Undefined,
                  rect=Undefined, rule=Undefined, scale=Undefined, selection=Undefined, square=Undefined,
-                 style=Undefined, text=Undefined, tick=Undefined, timeFormat=Undefined, title=Undefined,
-                 trail=Undefined, view=Undefined, **kwds):
+                 style=Undefined, text=Undefined, tick=Undefined, timeFormat=Undefined,
+                 timeFormatType=Undefined, title=Undefined, trail=Undefined, view=Undefined, **kwds):
         super(Config, self).__init__(arc=arc, area=area, aria=aria, autosize=autosize, axis=axis,
                                      axisBand=axisBand, axisBottom=axisBottom,
                                      axisDiscrete=axisDiscrete, axisLeft=axisLeft, axisPoint=axisPoint,
@@ -3508,11 +4131,14 @@ class Config(VegaLiteSchema):
                                      errorbar=errorbar, facet=facet, fieldTitle=fieldTitle, font=font,
                                      geoshape=geoshape, header=header, headerColumn=headerColumn,
                                      headerFacet=headerFacet, headerRow=headerRow, image=image,
-                                     legend=legend, line=line, lineBreak=lineBreak, mark=mark,
-                                     numberFormat=numberFormat, padding=padding, params=params,
-                                     point=point, projection=projection, range=range, rect=rect,
-                                     rule=rule, scale=scale, selection=selection, square=square,
-                                     style=style, text=text, tick=tick, timeFormat=timeFormat,
+                                     legend=legend, line=line, lineBreak=lineBreak, locale=locale,
+                                     mark=mark, normalizedNumberFormat=normalizedNumberFormat,
+                                     normalizedNumberFormatType=normalizedNumberFormatType,
+                                     numberFormat=numberFormat, numberFormatType=numberFormatType,
+                                     padding=padding, params=params, point=point, projection=projection,
+                                     range=range, rect=rect, rule=rule, scale=scale,
+                                     selection=selection, square=square, style=style, text=text,
+                                     tick=tick, timeFormat=timeFormat, timeFormatType=timeFormatType,
                                      title=title, trail=trail, view=view, **kwds)
 
 
@@ -3570,7 +4196,7 @@ class CsvDataFormat(DataFormat):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     parse : anyOf(:class:`Parse`, None)
@@ -3582,7 +4208,7 @@ class CsvDataFormat(DataFormat):
         {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a
         Date value.
 
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
+        For ``"date"``, we parse data based using JavaScript's `Date.parse()
         <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
         For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
         the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
@@ -3634,6 +4260,17 @@ class Day(VegaLiteSchema):
         super(Day, self).__init__(*args)
 
 
+class Dict(VegaLiteSchema):
+    """Dict schema wrapper
+
+    Mapping(required=[])
+    """
+    _schema = {'$ref': '#/definitions/Dict'}
+
+    def __init__(self, **kwds):
+        super(Dict, self).__init__(**kwds)
+
+
 class DictInlineDataset(VegaLiteSchema):
     """DictInlineDataset schema wrapper
 
@@ -3667,17 +4304,6 @@ class DictSelectionInitInterval(VegaLiteSchema):
         super(DictSelectionInitInterval, self).__init__(**kwds)
 
 
-class Dictunknown(VegaLiteSchema):
-    """Dictunknown schema wrapper
-
-    Mapping(required=[])
-    """
-    _schema = {'$ref': '#/definitions/Dict<unknown>'}
-
-    def __init__(self, **kwds):
-        super(Dictunknown, self).__init__(**kwds)
-
-
 class Diverging(ColorScheme):
     """Diverging schema wrapper
 
@@ -3714,28 +4340,12 @@ class DomainUnionWith(VegaLiteSchema):
 
     Mapping(required=[unionWith])
 
-    Attributes
+    Parameters
     ----------
 
     unionWith : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`))
-        Customized domain values to be union with the field's values.
-
-        1) ``domain`` for *quantitative* fields can take one of the following forms:
-
-
-        * a two-element array with minimum and maximum values. - an array with more than two
-          entries, for `Piecewise  quantitative scales
-          <https://vega.github.io/vega-lite/docs/scale.html#piecewise>`__. (Alternatively,
-          the ``domainMid`` property can be set for a diverging scale.) - a string value
-          ``"unaggregated"``, if the input field is aggregated, to indicate that the domain
-          should include the raw data values prior to the aggregation.
-
-        2) ``domain`` for *temporal* fields can be a two-element array minimum and maximum
-        values, in the form of either timestamps or the `DateTime definition objects
-        <https://vega.github.io/vega-lite/docs/types.html#datetime>`__.
-
-        3) ``domain`` for *ordinal* and *nominal* fields can be an array that lists valid
-        input values.
+        Customized domain values to be union with the field's values or explicitly defined
+        domain. Should be an array of valid scale domain values.
     """
     _schema = {'$ref': '#/definitions/DomainUnionWith'}
 
@@ -3748,7 +4358,7 @@ class DsvDataFormat(DataFormat):
 
     Mapping(required=[delimiter])
 
-    Attributes
+    Parameters
     ----------
 
     delimiter : string
@@ -3764,7 +4374,7 @@ class DsvDataFormat(DataFormat):
         {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a
         Date value.
 
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
+        For ``"date"``, we parse data based using JavaScript's `Date.parse()
         <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
         For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
         the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
@@ -3799,7 +4409,7 @@ class Encoding(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     angle : :class:`NumericMarkPropDef`
@@ -3820,8 +4430,7 @@ class Encoding(VegaLiteSchema):
         encoding if conflicting encodings are specified. 2) See the scale documentation for
         more information about customizing `color scheme
         <https://vega.github.io/vega-lite/docs/scale.html#scheme>`__.
-    description : anyOf(:class:`StringFieldDefWithCondition`,
-    :class:`StringValueDefWithCondition`)
+    description : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
         A text description of this mark for ARIA accessibility (SVG output only). For SVG
         output the ``"aria-label"`` attribute will be set to this description.
     detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`))
@@ -3864,13 +4473,17 @@ class Encoding(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#mark-config>`__ 's ``opacity``
         property.
     order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`OrderValueDef`)
-        Order of the marks. - For stacked marks, this ``order`` channel encodes `stack order
-        <https://vega.github.io/vega-lite/docs/stack.html#order>`__. - For line and trail
-        marks, this ``order`` channel encodes order of data points in the lines. This can be
-        useful for creating `a connected scatterplot
-        <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__. Setting
-        ``order`` to ``{"value": null}`` makes the line marks use the original order in the
-        data sources. - Otherwise, this ``order`` channel encodes layer order of the marks.
+        Order of the marks.
+
+
+        * For stacked marks, this ``order`` channel encodes `stack order
+          <https://vega.github.io/vega-lite/docs/stack.html#order>`__.
+        * For line and trail marks, this ``order`` channel encodes order of data points in
+          the lines. This can be useful for creating `a connected scatterplot
+          <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__. Setting
+          ``order`` to ``{"value": null}`` makes the line marks use the original order in
+          the data sources.
+        * Otherwise, this ``order`` channel encodes layer order of the marks.
 
         **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid
         creating additional aggregation grouping.
@@ -3883,11 +4496,11 @@ class Encoding(VegaLiteSchema):
 
 
         #.
-        For ``point`` marks the supported values include:    - plotting shapes:
-        ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``,
-        ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``.    - the line
-        symbol ``"stroke"``    - centered directional shapes ``"arrow"``, ``"wedge"``, or
-        ``"triangle"``    - a custom `SVG path string
+        For ``point`` marks the supported values include:   - plotting shapes: ``"circle"``,
+        ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``,
+        ``"triangle-right"``, or ``"triangle-left"``.   - the line symbol ``"stroke"``   -
+        centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``   - a custom
+        `SVG path string
         <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
         sizing, custom shape paths should be defined within a square bounding box with
         coordinates ranging from -1 to 1 along both the x and y dimensions.)
@@ -3899,10 +4512,15 @@ class Encoding(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#point-config>`__ 's ``shape``
         property. ( ``"circle"`` if unset.)
     size : :class:`NumericMarkPropDef`
-        Size of the mark. - For ``"point"``, ``"square"`` and ``"circle"``, – the symbol
-        size, or pixel area of the mark. - For ``"bar"`` and ``"tick"`` – the bar and tick's
-        size. - For ``"text"`` – the text's font size. - Size is unsupported for ``"line"``,
-        ``"area"``, and ``"rect"``. (Use ``"trail"`` instead of line with varying size)
+        Size of the mark.
+
+
+        * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area
+          of the mark.
+        * For ``"bar"`` and ``"tick"`` – the bar and tick's size.
+        * For ``"text"`` – the text's font size.
+        * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"``
+          instead of line with varying size)
     stroke : :class:`ColorDef`
         Stroke color of the marks. **Default value:** If undefined, the default color
         depends on `mark config
@@ -3938,8 +4556,7 @@ class Encoding(VegaLiteSchema):
     theta2 : :class:`Position2Def`
         The end angle of arc marks in radians. A value of 0 indicates up or “north”,
         increasing values proceed clockwise.
-    tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`,
-    List(:class:`StringFieldDef`), None)
+    tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`, List(:class:`StringFieldDef`), None)
         The tooltip text to show upon mouse hover. Specifying ``tooltip`` encoding overrides
         `the tooltip property in the mark definition
         <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
@@ -3964,6 +4581,8 @@ class Encoding(VegaLiteSchema):
     xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`ValueDefnumber`)
         Secondary error value of x coordinates for error specified ``"errorbar"`` and
         ``"errorband"``.
+    xOffset : :class:`OffsetDef`
+        Offset of x-position of the marks
     y : :class:`PositionDef`
         Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
         specified ``y2`` or ``height``.
@@ -3980,6 +4599,8 @@ class Encoding(VegaLiteSchema):
     yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`ValueDefnumber`)
         Secondary error value of y coordinates for error specified ``"errorbar"`` and
         ``"errorband"``.
+    yOffset : :class:`OffsetDef`
+        Offset of y-position of the marks
     """
     _schema = {'$ref': '#/definitions/Encoding'}
 
@@ -3990,8 +4611,8 @@ class Encoding(VegaLiteSchema):
                  shape=Undefined, size=Undefined, stroke=Undefined, strokeDash=Undefined,
                  strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined, theta=Undefined,
                  theta2=Undefined, tooltip=Undefined, url=Undefined, x=Undefined, x2=Undefined,
-                 xError=Undefined, xError2=Undefined, y=Undefined, y2=Undefined, yError=Undefined,
-                 yError2=Undefined, **kwds):
+                 xError=Undefined, xError2=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
+                 yError=Undefined, yError2=Undefined, yOffset=Undefined, **kwds):
         super(Encoding, self).__init__(angle=angle, color=color, description=description, detail=detail,
                                        fill=fill, fillOpacity=fillOpacity, href=href, key=key,
                                        latitude=latitude, latitude2=latitude2, longitude=longitude,
@@ -4000,44 +4621,8 @@ class Encoding(VegaLiteSchema):
                                        stroke=stroke, strokeDash=strokeDash,
                                        strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, text=text,
                                        theta=theta, theta2=theta2, tooltip=tooltip, url=url, x=x, x2=x2,
-                                       xError=xError, xError2=xError2, y=y, y2=y2, yError=yError,
-                                       yError2=yError2, **kwds)
-
-
-class EncodingSortFieldFieldName(VegaLiteSchema):
-    """EncodingSortFieldFieldName schema wrapper
-
-    Mapping(required=[])
-    A sort definition for sorting a discrete scale in an encoding field definition.
-
-    Attributes
-    ----------
-
-    field : :class:`FieldName`
-        The data `field <https://vega.github.io/vega-lite/docs/field.html>`__ to sort by.
-
-        **Default value:** If unspecified, defaults to the field specified in the outer data
-        reference.
-    op : :class:`NonArgAggregateOp`
-        An `aggregate operation
-        <https://vega.github.io/vega-lite/docs/aggregate.html#ops>`__ to perform on the
-        field prior to sorting (e.g., ``"count"``, ``"mean"`` and ``"median"`` ). An
-        aggregation is required when there are multiple values of the sort field for each
-        encoded data field. The input data objects will be aggregated, grouped by the
-        encoded data field.
-
-        For a full list of operations, please see the documentation for `aggregate
-        <https://vega.github.io/vega-lite/docs/aggregate.html#ops>`__.
-
-        **Default value:** ``"sum"`` for stacked plots. Otherwise, ``"min"``.
-    order : anyOf(:class:`SortOrder`, None)
-        The sort order. One of ``"ascending"`` (default), ``"descending"``, or ``null`` (no
-        not sort).
-    """
-    _schema = {'$ref': '#/definitions/EncodingSortField<FieldName>'}
-
-    def __init__(self, field=Undefined, op=Undefined, order=Undefined, **kwds):
-        super(EncodingSortFieldFieldName, self).__init__(field=field, op=op, order=order, **kwds)
+                                       xError=xError, xError2=xError2, xOffset=xOffset, y=y, y2=y2,
+                                       yError=yError, yError2=yError2, yOffset=yOffset, **kwds)
 
 
 class ErrorBand(CompositeMark):
@@ -4056,39 +4641,48 @@ class ErrorBandConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    band : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    band : anyOf(boolean, :class:`AnyMarkConfig`)
 
-    borders : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    borders : anyOf(boolean, :class:`AnyMarkConfig`)
 
     extent : :class:`ErrorBarExtent`
-        The extent of the band. Available options include: - `"ci"`: Extend the band to the
-        confidence interval of the mean. - `"stderr"`: The size of band are set to the value
-        of standard error, extending from the mean. - `"stdev"`: The size of band are set to
-        the value of standard deviation, extending from the mean. - `"iqr"`: Extend the band
-        to the q1 and q3.
+        The extent of the band. Available options include:
+
+
+        * ``"ci"`` : Extend the band to the confidence interval of the mean.
+        * ``"stderr"`` : The size of band are set to the value of standard error, extending
+          from the mean.
+        * ``"stdev"`` : The size of band are set to the value of standard deviation,
+          extending from the mean.
+        * ``"iqr"`` : Extend the band to the q1 and q3.
 
         **Default value:** ``"stderr"``.
     interpolate : :class:`Interpolate`
-        The line interpolation method for the error band. One of the following: -
-        `"linear"`: piecewise linear segments, as in a polyline. - `"linear-closed"`: close
-        the linear segments to form a polygon. - `"step"`: a piecewise constant function (a
-        step function) consisting of alternating horizontal and vertical lines. The y-value
-        changes at the midpoint of each pair of adjacent x-values. - `"step-before"`: a
-        piecewise constant function (a step function) consisting of alternating horizontal
-        and vertical lines. The y-value changes before the x-value. - `"step-after"`: a
-        piecewise constant function (a step function) consisting of alternating horizontal
-        and vertical lines. The y-value changes after the x-value. - `"basis"`: a B-spline,
-        with control point duplication on the ends. - `"basis-open"`: an open B-spline; may
-        not intersect the start or end. - `"basis-closed"`: a closed B-spline, as in a loop.
-        - `"cardinal"`: a Cardinal spline, with control point duplication on the ends. -
-        `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
-        will intersect other control points. - `"cardinal-closed"`: a closed Cardinal
-        spline, as in a loop. - `"bundle"`: equivalent to basis, except the tension
-        parameter is used to straighten the spline. - ``"monotone"`` : cubic interpolation
-        that preserves monotonicity in y.
+        The line interpolation method for the error band. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : a piecewise constant function (a step function) consisting of
+          alternating horizontal and vertical lines. The y-value changes at the midpoint of
+          each pair of adjacent x-values.
+        * ``"step-before"`` : a piecewise constant function (a step function) consisting of
+          alternating horizontal and vertical lines. The y-value changes before the x-value.
+        * ``"step-after"`` : a piecewise constant function (a step function) consisting of
+          alternating horizontal and vertical lines. The y-value changes after the x-value.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     tension : float
         The tension parameter for the interpolation type of the error band.
     """
@@ -4105,7 +4699,7 @@ class ErrorBandDef(CompositeMarkDef):
 
     Mapping(required=[type])
 
-    Attributes
+    Parameters
     ----------
 
     type : :class:`ErrorBand`
@@ -4113,9 +4707,9 @@ class ErrorBandDef(CompositeMarkDef):
         ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``,
         ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``,
         ``"errorband"``, ``"errorbar"`` ).
-    band : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    band : anyOf(boolean, :class:`AnyMarkConfig`)
 
-    borders : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    borders : anyOf(boolean, :class:`AnyMarkConfig`)
 
     clip : boolean
         Whether a composite mark be clipped to the enclosing group’s width and height.
@@ -4125,36 +4719,48 @@ class ErrorBandDef(CompositeMarkDef):
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     extent : :class:`ErrorBarExtent`
-        The extent of the band. Available options include: - `"ci"`: Extend the band to the
-        confidence interval of the mean. - `"stderr"`: The size of band are set to the value
-        of standard error, extending from the mean. - `"stdev"`: The size of band are set to
-        the value of standard deviation, extending from the mean. - `"iqr"`: Extend the band
-        to the q1 and q3.
+        The extent of the band. Available options include:
+
+
+        * ``"ci"`` : Extend the band to the confidence interval of the mean.
+        * ``"stderr"`` : The size of band are set to the value of standard error, extending
+          from the mean.
+        * ``"stdev"`` : The size of band are set to the value of standard deviation,
+          extending from the mean.
+        * ``"iqr"`` : Extend the band to the q1 and q3.
 
         **Default value:** ``"stderr"``.
     interpolate : :class:`Interpolate`
-        The line interpolation method for the error band. One of the following: -
-        `"linear"`: piecewise linear segments, as in a polyline. - `"linear-closed"`: close
-        the linear segments to form a polygon. - `"step"`: a piecewise constant function (a
-        step function) consisting of alternating horizontal and vertical lines. The y-value
-        changes at the midpoint of each pair of adjacent x-values. - `"step-before"`: a
-        piecewise constant function (a step function) consisting of alternating horizontal
-        and vertical lines. The y-value changes before the x-value. - `"step-after"`: a
-        piecewise constant function (a step function) consisting of alternating horizontal
-        and vertical lines. The y-value changes after the x-value. - `"basis"`: a B-spline,
-        with control point duplication on the ends. - `"basis-open"`: an open B-spline; may
-        not intersect the start or end. - `"basis-closed"`: a closed B-spline, as in a loop.
-        - `"cardinal"`: a Cardinal spline, with control point duplication on the ends. -
-        `"cardinal-open"`: an open Cardinal spline; may not intersect the start or end, but
-        will intersect other control points. - `"cardinal-closed"`: a closed Cardinal
-        spline, as in a loop. - `"bundle"`: equivalent to basis, except the tension
-        parameter is used to straighten the spline. - ``"monotone"`` : cubic interpolation
-        that preserves monotonicity in y.
+        The line interpolation method for the error band. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : a piecewise constant function (a step function) consisting of
+          alternating horizontal and vertical lines. The y-value changes at the midpoint of
+          each pair of adjacent x-values.
+        * ``"step-before"`` : a piecewise constant function (a step function) consisting of
+          alternating horizontal and vertical lines. The y-value changes before the x-value.
+        * ``"step-after"`` : a piecewise constant function (a step function) consisting of
+          alternating horizontal and vertical lines. The y-value changes after the x-value.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     opacity : float
         The opacity (value between [0,1]) of the mark.
     orient : :class:`Orientation`
@@ -4189,24 +4795,28 @@ class ErrorBarConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     extent : :class:`ErrorBarExtent`
-        The extent of the rule. Available options include: - `"ci"`: Extend the rule to the
-        confidence interval of the mean. - `"stderr"`: The size of rule are set to the value
-        of standard error, extending from the mean. - `"stdev"`: The size of rule are set to
-        the value of standard deviation, extending from the mean. - `"iqr"`: Extend the rule
-        to the q1 and q3.
+        The extent of the rule. Available options include:
+
+
+        * ``"ci"`` : Extend the rule to the confidence interval of the mean.
+        * ``"stderr"`` : The size of rule are set to the value of standard error, extending
+          from the mean.
+        * ``"stdev"`` : The size of rule are set to the value of standard deviation,
+          extending from the mean.
+        * ``"iqr"`` : Extend the rule to the q1 and q3.
 
         **Default value:** ``"stderr"``.
-    rule : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    rule : anyOf(boolean, :class:`AnyMarkConfig`)
 
     size : float
         Size of the ticks of an error bar
     thickness : float
         Thickness of the ticks and the bar of an error bar
-    ticks : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    ticks : anyOf(boolean, :class:`AnyMarkConfig`)
 
     """
     _schema = {'$ref': '#/definitions/ErrorBarConfig'}
@@ -4222,7 +4832,7 @@ class ErrorBarDef(CompositeMarkDef):
 
     Mapping(required=[type])
 
-    Attributes
+    Parameters
     ----------
 
     type : :class:`ErrorBar`
@@ -4238,16 +4848,23 @@ class ErrorBarDef(CompositeMarkDef):
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     extent : :class:`ErrorBarExtent`
-        The extent of the rule. Available options include: - `"ci"`: Extend the rule to the
-        confidence interval of the mean. - `"stderr"`: The size of rule are set to the value
-        of standard error, extending from the mean. - `"stdev"`: The size of rule are set to
-        the value of standard deviation, extending from the mean. - `"iqr"`: Extend the rule
-        to the q1 and q3.
+        The extent of the rule. Available options include:
+
+
+        * ``"ci"`` : Extend the rule to the confidence interval of the mean.
+        * ``"stderr"`` : The size of rule are set to the value of standard error, extending
+          from the mean.
+        * ``"stdev"`` : The size of rule are set to the value of standard deviation,
+          extending from the mean.
+        * ``"iqr"`` : Extend the rule to the q1 and q3.
 
         **Default value:** ``"stderr"``.
     opacity : float
@@ -4255,13 +4872,13 @@ class ErrorBarDef(CompositeMarkDef):
     orient : :class:`Orientation`
         Orientation of the error bar. This is normally automatically determined, but can be
         specified when the orientation is ambiguous and cannot be automatically determined.
-    rule : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    rule : anyOf(boolean, :class:`AnyMarkConfig`)
 
     size : float
         Size of the ticks of an error bar
     thickness : float
         Thickness of the ticks and the bar of an error bar
-    ticks : anyOf(boolean, :class:`MarkConfigExprOrSignalRef`)
+    ticks : anyOf(boolean, :class:`AnyMarkConfig`)
 
     """
     _schema = {'$ref': '#/definitions/ErrorBarDef'}
@@ -4296,29 +4913,12 @@ class Expr(VegaLiteSchema):
         super(Expr, self).__init__(*args)
 
 
-class ExprOrSignalRef(VegaLiteSchema):
-    """ExprOrSignalRef schema wrapper
-
-    Mapping(required=[expr])
-
-    Attributes
-    ----------
-
-    expr : string
-        Vega expression (which can refer to Vega-Lite parameters).
-    """
-    _schema = {'$ref': '#/definitions/ExprOrSignalRef'}
-
-    def __init__(self, expr=Undefined, **kwds):
-        super(ExprOrSignalRef, self).__init__(expr=expr, **kwds)
-
-
 class ExprRef(VegaLiteSchema):
     """ExprRef schema wrapper
 
     Mapping(required=[expr])
 
-    Attributes
+    Parameters
     ----------
 
     expr : string
@@ -4335,7 +4935,7 @@ class FacetEncodingFieldDef(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -4352,9 +4952,10 @@ class FacetEncodingFieldDef(VegaLiteSchema):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -4362,26 +4963,19 @@ class FacetEncodingFieldDef(VegaLiteSchema):
         be used to supply different alignments for rows and columns.
 
         **Default value:** ``"all"``.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -4400,10 +4994,10 @@ class FacetEncodingFieldDef(VegaLiteSchema):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -4423,9 +5017,12 @@ class FacetEncodingFieldDef(VegaLiteSchema):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
@@ -4444,7 +5041,7 @@ class FacetEncodingFieldDef(VegaLiteSchema):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    header : :class:`Header`
+    header : anyOf(:class:`Header`, None)
         An object defining properties of a facet's header.
     sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
         Sort order for the encoded field.
@@ -4452,18 +5049,23 @@ class FacetEncodingFieldDef(VegaLiteSchema):
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -4501,7 +5103,7 @@ class FacetEncodingFieldDef(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -4521,59 +5123,71 @@ class FacetEncodingFieldDef(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FacetEncodingFieldDef'}
 
-    def __init__(self, aggregate=Undefined, align=Undefined, band=Undefined, bin=Undefined,
+    def __init__(self, aggregate=Undefined, align=Undefined, bandPosition=Undefined, bin=Undefined,
                  bounds=Undefined, center=Undefined, columns=Undefined, field=Undefined,
                  header=Undefined, sort=Undefined, spacing=Undefined, timeUnit=Undefined,
                  title=Undefined, type=Undefined, **kwds):
-        super(FacetEncodingFieldDef, self).__init__(aggregate=aggregate, align=align, band=band,
-                                                    bin=bin, bounds=bounds, center=center,
-                                                    columns=columns, field=field, header=header,
-                                                    sort=sort, spacing=spacing, timeUnit=timeUnit,
-                                                    title=title, type=type, **kwds)
+        super(FacetEncodingFieldDef, self).__init__(aggregate=aggregate, align=align,
+                                                    bandPosition=bandPosition, bin=bin, bounds=bounds,
+                                                    center=center, columns=columns, field=field,
+                                                    header=header, sort=sort, spacing=spacing,
+                                                    timeUnit=timeUnit, title=title, type=type, **kwds)
 
 
 class FacetFieldDef(VegaLiteSchema):
@@ -4581,7 +5195,7 @@ class FacetFieldDef(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -4592,26 +5206,19 @@ class FacetFieldDef(VegaLiteSchema):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -4639,7 +5246,7 @@ class FacetFieldDef(VegaLiteSchema):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    header : :class:`Header`
+    header : anyOf(:class:`Header`, None)
         An object defining properties of a facet's header.
     sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
         Sort order for the encoded field.
@@ -4647,203 +5254,23 @@ class FacetFieldDef(VegaLiteSchema):
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
-
-        **Default value:** ``"ascending"``
-
-        **Note:** ``null`` is not supported for ``row`` and ``column``.
-    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
-        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
-        field. or `a temporal field that gets casted as ordinal
-        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
-        documentation.
-    title : anyOf(:class:`Text`, None)
-        A title for the field. If ``null``, the title will be removed.
-
-        **Default value:**  derived from the field's name and transformation function (
-        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
-        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
-        field is binned or has a time unit applied, the applied function is shown in
-        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
-        Otherwise, the title is simply the field name.
-
-        **Notes** :
-
-        1) You can customize the default field title format by providing the `fieldTitle
-        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
-        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
-        function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
-
-        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
-        defined, axis/header/legend title will be used.
-    type : :class:`StandardType`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _schema = {'$ref': '#/definitions/FacetFieldDef'}
-
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
-                 header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
-                 **kwds):
-        super(FacetFieldDef, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                            header=header, sort=sort, timeUnit=timeUnit, title=title,
-                                            type=type, **kwds)
-
-
-class FacetFieldDefFieldName(VegaLiteSchema):
-    """FacetFieldDefFieldName schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    field : :class:`FieldName`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
-
-        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
-        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
-        field names contain dots or brackets but are not nested, you can use ``\\`` to
-        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
-        about escaping in the `field documentation
-        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
-        if ``aggregate`` is ``count``.
-    header : :class:`Header`
-        An object defining properties of a facet's header.
-    sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortFieldFieldName`,
-    None)
-        Sort order for the encoded field.
+        For discrete fields, ``sort`` can be one of the following:
 
-        For continuous fields (quantitative or temporal), ``sort`` can be either
-        ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -4873,7 +5300,7 @@ class FacetFieldDefFieldName(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -4893,56 +5320,68 @@ class FacetFieldDefFieldName(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
-    _schema = {'$ref': '#/definitions/FacetFieldDef<FieldName>'}
+    _schema = {'$ref': '#/definitions/FacetFieldDef'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
                  header=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
                  **kwds):
-        super(FacetFieldDefFieldName, self).__init__(aggregate=aggregate, band=band, bin=bin,
-                                                     field=field, header=header, sort=sort,
-                                                     timeUnit=timeUnit, title=title, type=type, **kwds)
+        super(FacetFieldDef, self).__init__(aggregate=aggregate, bandPosition=bandPosition, bin=bin,
+                                            field=field, header=header, sort=sort, timeUnit=timeUnit,
+                                            title=title, type=type, **kwds)
 
 
 class FacetMapping(VegaLiteSchema):
@@ -4950,7 +5389,7 @@ class FacetMapping(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     column : :class:`FacetFieldDef`
@@ -4964,31 +5403,12 @@ class FacetMapping(VegaLiteSchema):
         super(FacetMapping, self).__init__(column=column, row=row, **kwds)
 
 
-class FacetMappingFieldName(VegaLiteSchema):
-    """FacetMappingFieldName schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    column : :class:`FacetFieldDefFieldName`
-        A field definition for the horizontal facet of trellis plots.
-    row : :class:`FacetFieldDefFieldName`
-        A field definition for the vertical facet of trellis plots.
-    """
-    _schema = {'$ref': '#/definitions/FacetMapping<FieldName>'}
-
-    def __init__(self, column=Undefined, row=Undefined, **kwds):
-        super(FacetMappingFieldName, self).__init__(column=column, row=row, **kwds)
-
-
 class FacetedEncoding(VegaLiteSchema):
     """FacetedEncoding schema wrapper
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     angle : :class:`NumericMarkPropDef`
@@ -5011,8 +5431,7 @@ class FacetedEncoding(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/scale.html#scheme>`__.
     column : :class:`RowColumnEncodingFieldDef`
         A field definition for the horizontal facet of trellis plots.
-    description : anyOf(:class:`StringFieldDefWithCondition`,
-    :class:`StringValueDefWithCondition`)
+    description : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`)
         A text description of this mark for ARIA accessibility (SVG output only). For SVG
         output the ``"aria-label"`` attribute will be set to this description.
     detail : anyOf(:class:`FieldDefWithoutScale`, List(:class:`FieldDefWithoutScale`))
@@ -5059,13 +5478,17 @@ class FacetedEncoding(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#mark-config>`__ 's ``opacity``
         property.
     order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`OrderValueDef`)
-        Order of the marks. - For stacked marks, this ``order`` channel encodes `stack order
-        <https://vega.github.io/vega-lite/docs/stack.html#order>`__. - For line and trail
-        marks, this ``order`` channel encodes order of data points in the lines. This can be
-        useful for creating `a connected scatterplot
-        <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__. Setting
-        ``order`` to ``{"value": null}`` makes the line marks use the original order in the
-        data sources. - Otherwise, this ``order`` channel encodes layer order of the marks.
+        Order of the marks.
+
+
+        * For stacked marks, this ``order`` channel encodes `stack order
+          <https://vega.github.io/vega-lite/docs/stack.html#order>`__.
+        * For line and trail marks, this ``order`` channel encodes order of data points in
+          the lines. This can be useful for creating `a connected scatterplot
+          <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__. Setting
+          ``order`` to ``{"value": null}`` makes the line marks use the original order in
+          the data sources.
+        * Otherwise, this ``order`` channel encodes layer order of the marks.
 
         **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid
         creating additional aggregation grouping.
@@ -5080,11 +5503,11 @@ class FacetedEncoding(VegaLiteSchema):
 
 
         #.
-        For ``point`` marks the supported values include:    - plotting shapes:
-        ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``,
-        ``"triangle-down"``, ``"triangle-right"``, or ``"triangle-left"``.    - the line
-        symbol ``"stroke"``    - centered directional shapes ``"arrow"``, ``"wedge"``, or
-        ``"triangle"``    - a custom `SVG path string
+        For ``point`` marks the supported values include:   - plotting shapes: ``"circle"``,
+        ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``,
+        ``"triangle-right"``, or ``"triangle-left"``.   - the line symbol ``"stroke"``   -
+        centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``   - a custom
+        `SVG path string
         <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
         sizing, custom shape paths should be defined within a square bounding box with
         coordinates ranging from -1 to 1 along both the x and y dimensions.)
@@ -5096,10 +5519,15 @@ class FacetedEncoding(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#point-config>`__ 's ``shape``
         property. ( ``"circle"`` if unset.)
     size : :class:`NumericMarkPropDef`
-        Size of the mark. - For ``"point"``, ``"square"`` and ``"circle"``, – the symbol
-        size, or pixel area of the mark. - For ``"bar"`` and ``"tick"`` – the bar and tick's
-        size. - For ``"text"`` – the text's font size. - Size is unsupported for ``"line"``,
-        ``"area"``, and ``"rect"``. (Use ``"trail"`` instead of line with varying size)
+        Size of the mark.
+
+
+        * For ``"point"``, ``"square"`` and ``"circle"``, – the symbol size, or pixel area
+          of the mark.
+        * For ``"bar"`` and ``"tick"`` – the bar and tick's size.
+        * For ``"text"`` – the text's font size.
+        * Size is unsupported for ``"line"``, ``"area"``, and ``"rect"``. (Use ``"trail"``
+          instead of line with varying size)
     stroke : :class:`ColorDef`
         Stroke color of the marks. **Default value:** If undefined, the default color
         depends on `mark config
@@ -5135,8 +5563,7 @@ class FacetedEncoding(VegaLiteSchema):
     theta2 : :class:`Position2Def`
         The end angle of arc marks in radians. A value of 0 indicates up or “north”,
         increasing values proceed clockwise.
-    tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`,
-    List(:class:`StringFieldDef`), None)
+    tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`, List(:class:`StringFieldDef`), None)
         The tooltip text to show upon mouse hover. Specifying ``tooltip`` encoding overrides
         `the tooltip property in the mark definition
         <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
@@ -5161,6 +5588,8 @@ class FacetedEncoding(VegaLiteSchema):
     xError2 : anyOf(:class:`SecondaryFieldDef`, :class:`ValueDefnumber`)
         Secondary error value of x coordinates for error specified ``"errorbar"`` and
         ``"errorband"``.
+    xOffset : :class:`OffsetDef`
+        Offset of x-position of the marks
     y : :class:`PositionDef`
         Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
         specified ``y2`` or ``height``.
@@ -5177,6 +5606,8 @@ class FacetedEncoding(VegaLiteSchema):
     yError2 : anyOf(:class:`SecondaryFieldDef`, :class:`ValueDefnumber`)
         Secondary error value of y coordinates for error specified ``"errorbar"`` and
         ``"errorband"``.
+    yOffset : :class:`OffsetDef`
+        Offset of y-position of the marks
     """
     _schema = {'$ref': '#/definitions/FacetedEncoding'}
 
@@ -5187,8 +5618,9 @@ class FacetedEncoding(VegaLiteSchema):
                  radius=Undefined, radius2=Undefined, row=Undefined, shape=Undefined, size=Undefined,
                  stroke=Undefined, strokeDash=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  text=Undefined, theta=Undefined, theta2=Undefined, tooltip=Undefined, url=Undefined,
-                 x=Undefined, x2=Undefined, xError=Undefined, xError2=Undefined, y=Undefined,
-                 y2=Undefined, yError=Undefined, yError2=Undefined, **kwds):
+                 x=Undefined, x2=Undefined, xError=Undefined, xError2=Undefined, xOffset=Undefined,
+                 y=Undefined, y2=Undefined, yError=Undefined, yError2=Undefined, yOffset=Undefined,
+                 **kwds):
         super(FacetedEncoding, self).__init__(angle=angle, color=color, column=column,
                                               description=description, detail=detail, facet=facet,
                                               fill=fill, fillOpacity=fillOpacity, href=href, key=key,
@@ -5199,58 +5631,137 @@ class FacetedEncoding(VegaLiteSchema):
                                               stroke=stroke, strokeDash=strokeDash,
                                               strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
                                               text=text, theta=theta, theta2=theta2, tooltip=tooltip,
-                                              url=url, x=x, x2=x2, xError=xError, xError2=xError2, y=y,
-                                              y2=y2, yError=yError, yError2=yError2, **kwds)
+                                              url=url, x=x, x2=x2, xError=xError, xError2=xError2,
+                                              xOffset=xOffset, y=y, y2=y2, yError=yError,
+                                              yError2=yError2, yOffset=yOffset, **kwds)
 
 
-class Field(VegaLiteSchema):
-    """Field schema wrapper
+class Feature(VegaLiteSchema):
+    """Feature schema wrapper
 
-    anyOf(:class:`FieldName`, :class:`RepeatRef`)
+    Mapping(required=[geometry, properties, type])
+    A feature object which contains a geometry and associated properties.
+    https://tools.ietf.org/html/rfc7946#section-3.2
+
+    Parameters
+    ----------
+
+    geometry : :class:`Geometry`
+        The feature's geometry
+    properties : :class:`GeoJsonProperties`
+        Properties associated with this feature.
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    id : anyOf(string, float)
+        A value that uniquely identifies this feature in a
+        https://tools.ietf.org/html/rfc7946#section-3.2.
     """
-    _schema = {'$ref': '#/definitions/Field'}
+    _schema = {'$ref': '#/definitions/Feature'}
 
-    def __init__(self, *args, **kwds):
-        super(Field, self).__init__(*args, **kwds)
+    def __init__(self, geometry=Undefined, properties=Undefined, type=Undefined, bbox=Undefined,
+                 id=Undefined, **kwds):
+        super(Feature, self).__init__(geometry=geometry, properties=properties, type=type, bbox=bbox,
+                                      id=id, **kwds)
 
 
-class FieldDefWithoutScale(VegaLiteSchema):
-    """FieldDefWithoutScale schema wrapper
+class FeatureCollection(VegaLiteSchema):
+    """FeatureCollection schema wrapper
 
-    Mapping(required=[])
-    Definition object for a data field, its type and transformation of an encoding channel.
+    Mapping(required=[features, type])
+    A collection of feature objects.  https://tools.ietf.org/html/rfc7946#section-3.3
 
-    Attributes
+    Parameters
     ----------
 
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
+    features : List(:class:`FeatureGeometryGeoJsonProperties`)
 
-        **Default value:** ``undefined`` (None)
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/FeatureCollection'}
 
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    def __init__(self, features=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(FeatureCollection, self).__init__(features=features, type=type, bbox=bbox, **kwds)
+
+
+class FeatureGeometryGeoJsonProperties(VegaLiteSchema):
+    """FeatureGeometryGeoJsonProperties schema wrapper
+
+    Mapping(required=[geometry, properties, type])
+    A feature object which contains a geometry and associated properties.
+    https://tools.ietf.org/html/rfc7946#section-3.2
+
+    Parameters
+    ----------
+
+    geometry : :class:`Geometry`
+        The feature's geometry
+    properties : :class:`GeoJsonProperties`
+        Properties associated with this feature.
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    id : anyOf(string, float)
+        A value that uniquely identifies this feature in a
+        https://tools.ietf.org/html/rfc7946#section-3.2.
+    """
+    _schema = {'$ref': '#/definitions/Feature<Geometry,GeoJsonProperties>'}
+
+    def __init__(self, geometry=Undefined, properties=Undefined, type=Undefined, bbox=Undefined,
+                 id=Undefined, **kwds):
+        super(FeatureGeometryGeoJsonProperties, self).__init__(geometry=geometry, properties=properties,
+                                                               type=type, bbox=bbox, id=id, **kwds)
+
+
+class Field(VegaLiteSchema):
+    """Field schema wrapper
+
+    anyOf(:class:`FieldName`, :class:`RepeatRef`)
+    """
+    _schema = {'$ref': '#/definitions/Field'}
+
+    def __init__(self, *args, **kwds):
+        super(Field, self).__init__(*args, **kwds)
+
+
+class FieldDefWithoutScale(VegaLiteSchema):
+    """FieldDefWithoutScale schema wrapper
+
+    Mapping(required=[])
+    Definition object for a data field, its type and transformation of an encoding channel.
+
+    Parameters
+    ----------
+
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
+
+        **Default value:** ``undefined`` (None)
+
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -5303,7 +5814,7 @@ class FieldDefWithoutScale(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -5323,54 +5834,67 @@ class FieldDefWithoutScale(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldDefWithoutScale'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
                  timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(FieldDefWithoutScale, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                                   timeUnit=timeUnit, title=title, type=type, **kwds)
+        super(FieldDefWithoutScale, self).__init__(aggregate=aggregate, bandPosition=bandPosition,
+                                                   bin=bin, field=field, timeUnit=timeUnit, title=title,
+                                                   type=type, **kwds)
 
 
 class FieldName(Field):
@@ -5388,10 +5912,8 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
     """FieldOrDatumDefWithConditionStringFieldDefstring schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -5402,26 +5924,19 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -5434,9 +5949,8 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
 
         **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringExprRef`,
-    List(:class:`ConditionalValueDefstringExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    condition : anyOf(:class:`ConditionalValueDefstringExprRef`, List(:class:`ConditionalValueDefstringExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
@@ -5457,14 +5971,14 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -5485,15 +5999,12 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        **Default value:**
 
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
         Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
         field. or `a temporal field that gets casted as ordinal
@@ -5519,7 +6030,7 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -5539,65 +6050,94 @@ class FieldOrDatumDefWithConditionStringFieldDefstring(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<StringFieldDef,string>'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, condition=Undefined,
+                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
         super(FieldOrDatumDefWithConditionStringFieldDefstring, self).__init__(aggregate=aggregate,
-                                                                               band=band, bin=bin,
+                                                                               bandPosition=bandPosition,
+                                                                               bin=bin,
                                                                                condition=condition,
                                                                                field=field,
                                                                                format=format,
                                                                                formatType=formatType,
-                                                                               labelExpr=labelExpr,
                                                                                timeUnit=timeUnit,
                                                                                title=title, type=type,
                                                                                **kwds)
 
 
+class FieldRange(VegaLiteSchema):
+    """FieldRange schema wrapper
+
+    Mapping(required=[field])
+
+    Parameters
+    ----------
+
+    field : string
+
+    """
+    _schema = {'$ref': '#/definitions/FieldRange'}
+
+    def __init__(self, field=Undefined, **kwds):
+        super(FieldRange, self).__init__(field=field, **kwds)
+
+
 class Fit(VegaLiteSchema):
     """Fit schema wrapper
 
@@ -5643,26 +6183,152 @@ class Generator(Data):
         super(Generator, self).__init__(*args, **kwds)
 
 
+class GenericUnitSpecEncodingAnyMark(VegaLiteSchema):
+    """GenericUnitSpecEncodingAnyMark schema wrapper
+
+    Mapping(required=[mark])
+    Base interface for a unit (single-view) specification.
+
+    Parameters
+    ----------
+
+    mark : :class:`AnyMark`
+        A string describing the mark type (one of ``"bar"``, ``"circle"``, ``"square"``,
+        ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"rule"``, ``"geoshape"``, and
+        ``"text"`` ) or a `mark definition object
+        <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
+    data : anyOf(:class:`Data`, None)
+        An object describing the data source. Set to ``null`` to ignore the parent's data
+        source. If no data is set, it is derived from the parent.
+    description : string
+        Description of this mark for commenting purpose.
+    encoding : :class:`Encoding`
+        A key-value mapping between encoding channels and definition of fields.
+    name : string
+        Name of the visualization for later reference.
+    params : List(:class:`SelectionParameter`)
+        An array of parameters that may either be simple variables, or more complex
+        selections that map user input to data queries.
+    projection : :class:`Projection`
+        An object defining properties of geographic projection, which will be applied to
+        ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"``
+        channels for other marks.
+    title : anyOf(:class:`Text`, :class:`TitleParams`)
+        Title for the plot.
+    transform : List(:class:`Transform`)
+        An array of data transformations such as filter and new field calculation.
+    """
+    _schema = {'$ref': '#/definitions/GenericUnitSpec<Encoding,AnyMark>'}
+
+    def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined,
+                 name=Undefined, params=Undefined, projection=Undefined, title=Undefined,
+                 transform=Undefined, **kwds):
+        super(GenericUnitSpecEncodingAnyMark, self).__init__(mark=mark, data=data,
+                                                             description=description, encoding=encoding,
+                                                             name=name, params=params,
+                                                             projection=projection, title=title,
+                                                             transform=transform, **kwds)
+
+
 class GeoJsonFeature(Fit):
     """GeoJsonFeature schema wrapper
 
-    Any
+    Mapping(required=[geometry, properties, type])
+    A feature object which contains a geometry and associated properties.
+    https://tools.ietf.org/html/rfc7946#section-3.2
+
+    Parameters
+    ----------
+
+    geometry : :class:`Geometry`
+        The feature's geometry
+    properties : :class:`GeoJsonProperties`
+        Properties associated with this feature.
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    id : anyOf(string, float)
+        A value that uniquely identifies this feature in a
+        https://tools.ietf.org/html/rfc7946#section-3.2.
     """
     _schema = {'$ref': '#/definitions/GeoJsonFeature'}
 
-    def __init__(self, *args, **kwds):
-        super(GeoJsonFeature, self).__init__(*args, **kwds)
+    def __init__(self, geometry=Undefined, properties=Undefined, type=Undefined, bbox=Undefined,
+                 id=Undefined, **kwds):
+        super(GeoJsonFeature, self).__init__(geometry=geometry, properties=properties, type=type,
+                                             bbox=bbox, id=id, **kwds)
 
 
 class GeoJsonFeatureCollection(Fit):
     """GeoJsonFeatureCollection schema wrapper
 
-    Any
+    Mapping(required=[features, type])
+    A collection of feature objects.  https://tools.ietf.org/html/rfc7946#section-3.3
+
+    Parameters
+    ----------
+
+    features : List(:class:`FeatureGeometryGeoJsonProperties`)
+
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
     """
     _schema = {'$ref': '#/definitions/GeoJsonFeatureCollection'}
 
+    def __init__(self, features=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(GeoJsonFeatureCollection, self).__init__(features=features, type=type, bbox=bbox, **kwds)
+
+
+class GeoJsonProperties(VegaLiteSchema):
+    """GeoJsonProperties schema wrapper
+
+    anyOf(Mapping(required=[]), None)
+    """
+    _schema = {'$ref': '#/definitions/GeoJsonProperties'}
+
+    def __init__(self, *args, **kwds):
+        super(GeoJsonProperties, self).__init__(*args, **kwds)
+
+
+class Geometry(VegaLiteSchema):
+    """Geometry schema wrapper
+
+    anyOf(:class:`Point`, :class:`MultiPoint`, :class:`LineString`, :class:`MultiLineString`,
+    :class:`Polygon`, :class:`MultiPolygon`, :class:`GeometryCollection`)
+    Union of geometry objects. https://tools.ietf.org/html/rfc7946#section-3
+    """
+    _schema = {'$ref': '#/definitions/Geometry'}
+
     def __init__(self, *args, **kwds):
-        super(GeoJsonFeatureCollection, self).__init__(*args, **kwds)
+        super(Geometry, self).__init__(*args, **kwds)
+
+
+class GeometryCollection(Geometry):
+    """GeometryCollection schema wrapper
+
+    Mapping(required=[geometries, type])
+    Geometry Collection https://tools.ietf.org/html/rfc7946#section-3.1.8
+
+    Parameters
+    ----------
+
+    geometries : List(:class:`Geometry`)
+
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/GeometryCollection'}
+
+    def __init__(self, geometries=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(GeometryCollection, self).__init__(geometries=geometries, type=type, bbox=bbox, **kwds)
 
 
 class Gradient(VegaLiteSchema):
@@ -5681,7 +6347,7 @@ class GradientStop(VegaLiteSchema):
 
     Mapping(required=[offset, color])
 
-    Attributes
+    Parameters
     ----------
 
     color : :class:`Color`
@@ -5700,7 +6366,7 @@ class GraticuleGenerator(Generator):
 
     Mapping(required=[graticule])
 
-    Attributes
+    Parameters
     ----------
 
     graticule : anyOf(boolean, :class:`GraticuleParams`)
@@ -5719,7 +6385,7 @@ class GraticuleParams(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     extent : :class:`Vector2Vector2number`
@@ -5758,17 +6424,17 @@ class Header(VegaLiteSchema):
     Mapping(required=[])
     Headers of row / column channels for faceted plots.
 
-    Attributes
+    Parameters
     ----------
 
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -5789,9 +6455,12 @@ class Header(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     labelAlign : anyOf(:class:`Align`, :class:`ExprRef`)
         Horizontal text alignment of header labels. One of ``"left"``, ``"center"``, or
         ``"right"``.
@@ -5862,7 +6531,7 @@ class Header(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -5947,17 +6616,17 @@ class HeaderConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -5978,9 +6647,12 @@ class HeaderConfig(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     labelAlign : anyOf(:class:`Align`, :class:`ExprRef`)
         Horizontal text alignment of header labels. One of ``"left"``, ``"center"``, or
         ``"right"``.
@@ -6140,10 +6812,10 @@ class ImputeParams(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    frame : List([anyOf(None, float), anyOf(None, float)])
+    frame : List(anyOf(None, float))
         A frame specification as a two-element array used to control the window over which
         the specified method is applied. The array entries should either be a number
         indicating the offset from the current data object, or null to indicate unbounded
@@ -6184,7 +6856,7 @@ class ImputeSequence(VegaLiteSchema):
 
     Mapping(required=[stop])
 
-    Attributes
+    Parameters
     ----------
 
     stop : float
@@ -6206,7 +6878,7 @@ class InlineData(DataSource):
 
     Mapping(required=[values])
 
-    Attributes
+    Parameters
     ----------
 
     values : :class:`InlineDataset`
@@ -6236,38 +6908,6 @@ class InlineDataset(VegaLiteSchema):
         super(InlineDataset, self).__init__(*args, **kwds)
 
 
-class InputBinding(Binding):
-    """InputBinding schema wrapper
-
-    Mapping(required=[])
-
-    Attributes
-    ----------
-
-    autocomplete : string
-
-    debounce : float
-
-    element : :class:`Element`
-
-    input : string
-
-    name : string
-
-    placeholder : string
-
-    type : string
-
-    """
-    _schema = {'$ref': '#/definitions/InputBinding'}
-
-    def __init__(self, autocomplete=Undefined, debounce=Undefined, element=Undefined, input=Undefined,
-                 name=Undefined, placeholder=Undefined, type=Undefined, **kwds):
-        super(InputBinding, self).__init__(autocomplete=autocomplete, debounce=debounce,
-                                           element=element, input=input, name=name,
-                                           placeholder=placeholder, type=type, **kwds)
-
-
 class Interpolate(VegaLiteSchema):
     """Interpolate schema wrapper
 
@@ -6284,97 +6924,201 @@ class Interpolate(VegaLiteSchema):
 class IntervalSelectionConfig(VegaLiteSchema):
     """IntervalSelectionConfig schema wrapper
 
-    Mapping(required=[])
+    Mapping(required=[type])
 
-    Attributes
+    Parameters
     ----------
 
-    bind : string
-        Establishes a two-way binding between the interval selection and the scales used
-        within the same view. This allows a user to interactively pan and zoom the view.
+    type : string
+        Determines the default event processing and data query for the selection. Vega-Lite
+        currently supports two selection types:
 
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
+
+        * ``"point"`` -- to select multiple discrete data values; the first value is
+          selected on ``click`` and additional values toggled on shift-click.
+        * ``"interval"`` -- to select a continuous range of data values on ``drag``.
     clear : anyOf(:class:`Stream`, string, boolean)
-        Clears the selection, emptying it of all values. Can be a `Event Stream
-        <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable.
+        Clears the selection, emptying it of all values. This property can be a `Event
+        Stream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable
+        clear.
 
         **Default value:** ``dblclick``.
 
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
+        **See also:** `clear examples
+        <https://vega.github.io/vega-lite/docs/selection.html#clear>`__ in the
         documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
     encodings : List(:class:`SingleDefUnitChannel`)
         An array of encoding channels. The corresponding data field values must match for a
         data tuple to fall within the selection.
 
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
+        **See also:** The `projection with encodings and fields section
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ in the
         documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to fall within the
-        selection.
+    mark : :class:`BrushConfig`
+        An interval selection also adds a rectangle mark to depict the extents of the
+        interval. The ``mark`` property can be used to customize the appearance of the mark.
+
+        **See also:** `mark examples
+        <https://vega.github.io/vega-lite/docs/selection.html#mark>`__ in the documentation.
+    on : anyOf(:class:`Stream`, string)
+        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
+        selector) that triggers the selection. For interval selections, the event stream
+        must specify a `start and end
+        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
+
+        **See also:** `on examples
+        <https://vega.github.io/vega-lite/docs/selection.html#on>`__ in the documentation.
+    resolve : :class:`SelectionResolution`
+        With layered and multi-view displays, a strategy that determines how selections'
+        data queries are resolved when applied in a filter transform, conditional encoding
+        rule, or scale domain.
+
+        One of:
+
 
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
+        * ``"global"`` -- only one brush exists for the entire SPLOM. When the user begins
+          to drag, any previous brushes are cleared, and a new one is constructed.
+        * ``"union"`` -- each cell contains its own brush, and points are highlighted if
+          they lie within *any* of these individual brushes.
+        * ``"intersect"`` -- each cell contains its own brush, and points are highlighted
+          only if they fall within *all* of these individual brushes.
+
+        **Default value:** ``global``.
+
+        **See also:** `resolve examples
+        <https://vega.github.io/vega-lite/docs/selection.html#resolve>`__ in the
         documentation.
-    init : :class:`SelectionInitIntervalMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and arrays of initial
-        values.
+    translate : anyOf(string, boolean)
+        When truthy, allows a user to interactively move an interval selection
+        back-and-forth. Can be ``true``, ``false`` (to disable panning), or a `Vega event
+        stream definition <https://vega.github.io/vega/docs/event-streams/>`__ which must
+        include a start and end event to trigger continuous panning. Discrete panning (e.g.,
+        pressing the left/right arrow keys) will be supported in future versions.
+
+        **Default value:** ``true``, which corresponds to ``[mousedown, window:mouseup] >
+        window:mousemove!``. This default allows users to clicks and drags within an
+        interval selection to reposition it.
+
+        **See also:** `translate examples
+        <https://vega.github.io/vega-lite/docs/selection.html#translate>`__ in the
+        documentation.
+    zoom : anyOf(string, boolean)
+        When truthy, allows a user to interactively resize an interval selection. Can be
+        ``true``, ``false`` (to disable zooming), or a `Vega event stream definition
+        <https://vega.github.io/vega/docs/event-streams/>`__. Currently, only ``wheel``
+        events are supported, but custom event streams can still be used to specify filters,
+        debouncing, and throttling. Future versions will expand the set of events that can
+        trigger this transformation.
+
+        **Default value:** ``true``, which corresponds to ``wheel!``. This default allows
+        users to use the mouse wheel to resize an interval selection.
+
+        **See also:** `zoom examples
+        <https://vega.github.io/vega-lite/docs/selection.html#zoom>`__ in the documentation.
+    """
+    _schema = {'$ref': '#/definitions/IntervalSelectionConfig'}
+
+    def __init__(self, type=Undefined, clear=Undefined, encodings=Undefined, mark=Undefined,
+                 on=Undefined, resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds):
+        super(IntervalSelectionConfig, self).__init__(type=type, clear=clear, encodings=encodings,
+                                                      mark=mark, on=on, resolve=resolve,
+                                                      translate=translate, zoom=zoom, **kwds)
+
+
+class IntervalSelectionConfigWithoutType(VegaLiteSchema):
+    """IntervalSelectionConfigWithoutType schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    clear : anyOf(:class:`Stream`, string, boolean)
+        Clears the selection, emptying it of all values. This property can be a `Event
+        Stream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable
+        clear.
+
+        **Default value:** ``dblclick``.
+
+        **See also:** `clear examples
+        <https://vega.github.io/vega-lite/docs/selection.html#clear>`__ in the
+        documentation.
+    encodings : List(:class:`SingleDefUnitChannel`)
+        An array of encoding channels. The corresponding data field values must match for a
+        data tuple to fall within the selection.
 
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
+        **See also:** The `projection with encodings and fields section
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ in the
         documentation.
     mark : :class:`BrushConfig`
         An interval selection also adds a rectangle mark to depict the extents of the
         interval. The ``mark`` property can be used to customize the appearance of the mark.
 
-        **See also:** `mark <https://vega.github.io/vega-lite/docs/selection-mark.html>`__
-        documentation.
+        **See also:** `mark examples
+        <https://vega.github.io/vega-lite/docs/selection.html#mark>`__ in the documentation.
     on : anyOf(:class:`Stream`, string)
         A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
         selector) that triggers the selection. For interval selections, the event stream
         must specify a `start and end
         <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
+
+        **See also:** `on examples
+        <https://vega.github.io/vega-lite/docs/selection.html#on>`__ in the documentation.
     resolve : :class:`SelectionResolution`
         With layered and multi-view displays, a strategy that determines how selections'
         data queries are resolved when applied in a filter transform, conditional encoding
         rule, or scale domain.
 
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
+        One of:
+
+
+        * ``"global"`` -- only one brush exists for the entire SPLOM. When the user begins
+          to drag, any previous brushes are cleared, and a new one is constructed.
+        * ``"union"`` -- each cell contains its own brush, and points are highlighted if
+          they lie within *any* of these individual brushes.
+        * ``"intersect"`` -- each cell contains its own brush, and points are highlighted
+          only if they fall within *all* of these individual brushes.
+
+        **Default value:** ``global``.
+
+        **See also:** `resolve examples
+        <https://vega.github.io/vega-lite/docs/selection.html#resolve>`__ in the
+        documentation.
     translate : anyOf(string, boolean)
         When truthy, allows a user to interactively move an interval selection
         back-and-forth. Can be ``true``, ``false`` (to disable panning), or a `Vega event
         stream definition <https://vega.github.io/vega/docs/event-streams/>`__ which must
-        include a start and end event to trigger continuous panning.
+        include a start and end event to trigger continuous panning. Discrete panning (e.g.,
+        pressing the left/right arrow keys) will be supported in future versions.
 
         **Default value:** ``true``, which corresponds to ``[mousedown, window:mouseup] >
-        window:mousemove!`` which corresponds to clicks and dragging within an interval
-        selection to reposition it.
+        window:mousemove!``. This default allows users to clicks and drags within an
+        interval selection to reposition it.
 
-        **See also:** `translate <https://vega.github.io/vega-lite/docs/translate.html>`__
+        **See also:** `translate examples
+        <https://vega.github.io/vega-lite/docs/selection.html#translate>`__ in the
         documentation.
     zoom : anyOf(string, boolean)
         When truthy, allows a user to interactively resize an interval selection. Can be
         ``true``, ``false`` (to disable zooming), or a `Vega event stream definition
         <https://vega.github.io/vega/docs/event-streams/>`__. Currently, only ``wheel``
-        events are supported.
+        events are supported, but custom event streams can still be used to specify filters,
+        debouncing, and throttling. Future versions will expand the set of events that can
+        trigger this transformation.
 
-        **Default value:** ``true``, which corresponds to ``wheel!``.
+        **Default value:** ``true``, which corresponds to ``wheel!``. This default allows
+        users to use the mouse wheel to resize an interval selection.
 
-        **See also:** `zoom <https://vega.github.io/vega-lite/docs/zoom.html>`__
-        documentation.
+        **See also:** `zoom examples
+        <https://vega.github.io/vega-lite/docs/selection.html#zoom>`__ in the documentation.
     """
-    _schema = {'$ref': '#/definitions/IntervalSelectionConfig'}
+    _schema = {'$ref': '#/definitions/IntervalSelectionConfigWithoutType'}
 
-    def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined,
-                 fields=Undefined, init=Undefined, mark=Undefined, on=Undefined, resolve=Undefined,
-                 translate=Undefined, zoom=Undefined, **kwds):
-        super(IntervalSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty,
-                                                      encodings=encodings, fields=fields, init=init,
-                                                      mark=mark, on=on, resolve=resolve,
-                                                      translate=translate, zoom=zoom, **kwds)
+    def __init__(self, clear=Undefined, encodings=Undefined, mark=Undefined, on=Undefined,
+                 resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds):
+        super(IntervalSelectionConfigWithoutType, self).__init__(clear=clear, encodings=encodings,
+                                                                 mark=mark, on=on, resolve=resolve,
+                                                                 translate=translate, zoom=zoom, **kwds)
 
 
 class JoinAggregateFieldDef(VegaLiteSchema):
@@ -6382,7 +7126,7 @@ class JoinAggregateFieldDef(VegaLiteSchema):
 
     Mapping(required=[op, as])
 
-    Attributes
+    Parameters
     ----------
 
     op : :class:`AggregateOp`
@@ -6406,7 +7150,7 @@ class JsonDataFormat(DataFormat):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     parse : anyOf(:class:`Parse`, None)
@@ -6418,7 +7162,7 @@ class JsonDataFormat(DataFormat):
         {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a
         Date value.
 
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
+        For ``"date"``, we parse data based using JavaScript's `Date.parse()
         <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
         For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
         the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
@@ -6456,7 +7200,7 @@ class LabelOverlap(VegaLiteSchema):
 class LatLongDef(VegaLiteSchema):
     """LatLongDef schema wrapper
 
-    anyOf(:class:`LatLongFieldDef`, :class:`DatumDef`, :class:`NumericValueDef`)
+    anyOf(:class:`LatLongFieldDef`, :class:`DatumDef`)
     """
     _schema = {'$ref': '#/definitions/LatLongDef'}
 
@@ -6469,7 +7213,7 @@ class LatLongFieldDef(LatLongDef):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -6480,26 +7224,19 @@ class LatLongFieldDef(LatLongDef):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : None
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -6552,7 +7289,7 @@ class LatLongFieldDef(LatLongDef):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -6572,54 +7309,67 @@ class LatLongFieldDef(LatLongDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/LatLongFieldDef'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
                  timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(LatLongFieldDef, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                              timeUnit=timeUnit, title=title, type=type, **kwds)
+        super(LatLongFieldDef, self).__init__(aggregate=aggregate, bandPosition=bandPosition, bin=bin,
+                                              field=field, timeUnit=timeUnit, title=title, type=type,
+                                              **kwds)
 
 
 class LayerRepeatMapping(VegaLiteSchema):
@@ -6627,7 +7377,7 @@ class LayerRepeatMapping(VegaLiteSchema):
 
     Mapping(required=[layer])
 
-    Attributes
+    Parameters
     ----------
 
     layer : List(string)
@@ -6660,38 +7410,54 @@ class Legend(VegaLiteSchema):
     Mapping(required=[])
     Properties of a legend or boolean flag for determining whether to show it.
 
-    Attributes
+    Parameters
     ----------
 
     aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG group, removing the legend from the ARIA accessibility tree.
 
+        **Default value:** ``true``
     clipHeight : anyOf(float, :class:`ExprRef`)
-
+        The height in pixels to clip symbol legend entries and limit their size.
     columnPadding : anyOf(float, :class:`ExprRef`)
+        The horizontal padding in pixels between symbol legend entries.
 
+        **Default value:** ``10``.
     columns : anyOf(float, :class:`ExprRef`)
-
+        The number of columns in which to arrange symbol legend entries. A value of ``0`` or
+        lower indicates a single row with one column per entry.
     cornerRadius : anyOf(float, :class:`ExprRef`)
-
+        Corner radius for the full legend.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of this legend for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If the ``aria`` property is true, for SVG output the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__
+        will be set to this description. If the description is unspecified it will be
+        automatically generated.
     direction : :class:`Orientation`
         The direction of the legend, one of ``"vertical"`` or ``"horizontal"``.
 
-        **Default value:** - For top-/bottom- ``orient`` ed legends, ``"horizontal"`` - For
-        left-/right- ``orient`` ed legends, ``"vertical"`` - For top/bottom-left/right-
-        ``orient`` ed legends, ``"horizontal"`` for gradient legends and ``"vertical"`` for
-        symbol legends.
-    fillColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        **Default value:**
+
 
-    format : anyOf(string, :class:`Dictunknown`)
+        * For top-/bottom- ``orient`` ed legends, ``"horizontal"``
+        * For left-/right- ``orient`` ed legends, ``"vertical"``
+        * For top/bottom-left/right- ``orient`` ed legends, ``"horizontal"`` for gradient
+          legends and ``"vertical"`` for symbol legends.
+    fillColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        Background fill color for the full legend.
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -6712,27 +7478,47 @@ class Legend(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
+        **Default value:**
+
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     gradientLength : anyOf(float, :class:`ExprRef`)
+        The length in pixels of the primary axis of a color gradient. This value corresponds
+        to the height of a vertical gradient or the width of a horizontal gradient.
 
+        **Default value:** ``200``.
     gradientOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the color gradient.
     gradientStrokeColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        The color of the gradient stroke, can be in hex color code or regular color name.
 
+        **Default value:** ``"lightGray"``.
     gradientStrokeWidth : anyOf(float, :class:`ExprRef`)
+        The width of the gradient stroke, in pixels.
 
+        **Default value:** ``0``.
     gradientThickness : anyOf(float, :class:`ExprRef`)
+        The thickness in pixels of the color gradient. This value corresponds to the width
+        of a vertical gradient or the height of a horizontal gradient.
 
+        **Default value:** ``16``.
     gridAlign : anyOf(:class:`LayoutAlign`, :class:`ExprRef`)
+        The alignment to apply to symbol legends rows and columns. The supported string
+        values are ``"all"``, ``"each"`` (the default), and ``none``. For more information,
+        see the `grid layout documentation <https://vega.github.io/vega/docs/layout>`__.
 
+        **Default value:** ``"each"``.
     labelAlign : anyOf(:class:`Align`, :class:`ExprRef`)
-
+        The alignment of the legend label, can be left, center, or right.
     labelBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
+        The position of the baseline of legend label, can be ``"top"``, ``"middle"``,
+        ``"bottom"``, or ``"alphabetic"``.
 
+        **Default value:** ``"middle"``.
     labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        The color of the legend label, can be in hex color code or regular color name.
     labelExpr : string
         `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
         labels.
@@ -6740,31 +7526,48 @@ class Legend(VegaLiteSchema):
         **Note:** The label text and value can be assessed via the ``label`` and ``value``
         properties of the legend's backing ``datum`` object.
     labelFont : anyOf(string, :class:`ExprRef`)
-
+        The font of the legend label.
     labelFontSize : anyOf(float, :class:`ExprRef`)
+        The font size of legend label.
 
+        **Default value:** ``10``.
     labelFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style of legend label.
     labelFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight of legend label.
     labelLimit : anyOf(float, :class:`ExprRef`)
+        Maximum allowed pixel width of legend tick labels.
 
+        **Default value:** ``160``.
     labelOffset : anyOf(float, :class:`ExprRef`)
+        The offset of the legend label.
 
+        **Default value:** ``4``.
     labelOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of labels.
     labelOverlap : anyOf(:class:`LabelOverlap`, :class:`ExprRef`)
+        The strategy to use for resolving overlap of labels in gradient legends. If
+        ``false``, no overlap reduction is attempted. If set to ``true`` (default) or
+        ``"parity"``, a strategy of removing every other label is used. If set to
+        ``"greedy"``, a linear scan of the labels is performed, removing any label that
+        overlaps with the last visible label (this often works better for log-scaled axes).
 
+        **Default value:** ``true``.
     labelPadding : anyOf(float, :class:`ExprRef`)
-
+        Padding in pixels between the legend and legend labels.
     labelSeparation : anyOf(float, :class:`ExprRef`)
-
+        The minimum separation that must be between label bounding boxes for them to be
+        considered non-overlapping (default ``0`` ). This property is ignored if
+        *labelOverlap* resolution is not enabled.
     legendX : anyOf(float, :class:`ExprRef`)
-
+        Custom x-position for legend with orient "none".
     legendY : anyOf(float, :class:`ExprRef`)
-
+        Custom y-position for legend with orient "none".
     offset : anyOf(float, :class:`ExprRef`)
+        The offset in pixels by which to displace the legend from the data rectangle and
+        axes.
 
+        **Default value:** ``18``.
     orient : :class:`LegendOrient`
         The orientation of the legend, which determines how the legend is positioned within
         the scene. One of ``"left"``, ``"right"``, ``"top"``, ``"bottom"``, ``"top-left"``,
@@ -6772,33 +7575,53 @@ class Legend(VegaLiteSchema):
 
         **Default value:** ``"right"``
     padding : anyOf(float, :class:`ExprRef`)
+        The padding between the border and content of the legend group.
 
+        **Default value:** ``0``.
     rowPadding : anyOf(float, :class:`ExprRef`)
+        The vertical padding in pixels between symbol legend entries.
 
+        **Default value:** ``2``.
     strokeColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Border stroke color for the full legend.
     symbolDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating [stroke, space] lengths for dashed symbol strokes.
     symbolDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The pixel offset at which to start drawing with the symbol stroke dash array.
     symbolFillColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        The color of the legend symbol,
     symbolLimit : anyOf(float, :class:`ExprRef`)
-
+        The maximum number of allowed entries for a symbol legend. Additional entries will
+        be dropped.
     symbolOffset : anyOf(float, :class:`ExprRef`)
+        Horizontal pixel offset for legend symbols.
 
+        **Default value:** ``0``.
     symbolOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the legend symbols.
     symbolSize : anyOf(float, :class:`ExprRef`)
+        The size of the legend symbol, in pixels.
 
+        **Default value:** ``100``.
     symbolStrokeColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Stroke color for legend symbols.
     symbolStrokeWidth : anyOf(float, :class:`ExprRef`)
+        The width of the symbol's stroke.
 
+        **Default value:** ``1.5``.
     symbolType : anyOf(:class:`SymbolShape`, :class:`ExprRef`)
-
+        The symbol shape. One of the plotting shapes ``circle`` (default), ``square``,
+        ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or
+        ``triangle-left``, the line symbol ``stroke``, or one of the centered directional
+        shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path
+        string <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ can be
+        provided. For correct sizing, custom shape paths should be defined within a square
+        bounding box with coordinates ranging from -1 to 1 along both the x and y
+        dimensions.
+
+        **Default value:** ``"circle"``.
     tickCount : anyOf(:class:`TickCount`, :class:`ExprRef`)
-
+        The desired number of tick values for quantitative legends.
     tickMinStep : anyOf(float, :class:`ExprRef`)
         The minimum desired step between legend ticks, in terms of scale domain values. For
         example, a value of ``1`` indicates that ticks should not be less than 1 unit apart.
@@ -6822,44 +7645,58 @@ class Legend(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
     titleAlign : anyOf(:class:`Align`, :class:`ExprRef`)
+        Horizontal text alignment for legend titles.
 
+        **Default value:** ``"left"``.
     titleAnchor : anyOf(:class:`TitleAnchor`, :class:`ExprRef`)
-
+        Text anchor position for placing legend titles.
     titleBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
+        Vertical text baseline for legend titles.  One of ``"alphabetic"`` (default),
+        ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The
+        ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and
+        ``"bottom"``, but are calculated relative to the *lineHeight* rather than *fontSize*
+        alone.
 
+        **Default value:** ``"top"``.
     titleColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        The color of the legend title, can be in hex color code or regular color name.
     titleFont : anyOf(string, :class:`ExprRef`)
-
+        The font of the legend title.
     titleFontSize : anyOf(float, :class:`ExprRef`)
-
+        The font size of the legend title.
     titleFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style of the legend title.
     titleFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight of the legend title. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     titleLimit : anyOf(float, :class:`ExprRef`)
+        Maximum allowed pixel width of legend titles.
 
+        **Default value:** ``180``.
     titleLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line title text or title text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     titleOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the legend title.
     titleOrient : anyOf(:class:`Orient`, :class:`ExprRef`)
-
+        Orientation of the legend title.
     titlePadding : anyOf(float, :class:`ExprRef`)
+        The padding, in pixels, between title and legend.
 
+        **Default value:** ``5``.
     type : enum('symbol', 'gradient')
         The type of the legend. Use ``"symbol"`` to create a discrete legend and
         ``"gradient"`` for a continuous color gradient.
 
         **Default value:** ``"gradient"`` for non-binned quantitative fields and temporal
         fields; ``"symbol"`` otherwise.
-    values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`),
-    :class:`ExprRef`)
+    values : anyOf(List(float), List(string), List(boolean), List(:class:`DateTime`), :class:`ExprRef`)
         Explicitly set the visible legend values.
     zindex : float
         A non-negative integer indicating the z-index of the legend. If zindex is 0, legend
@@ -6937,34 +7774,52 @@ class LegendConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG group, removing the legend from the ARIA accessibility tree.
 
+        **Default value:** ``true``
     clipHeight : anyOf(float, :class:`ExprRef`)
-
+        The height in pixels to clip symbol legend entries and limit their size.
     columnPadding : anyOf(float, :class:`ExprRef`)
+        The horizontal padding in pixels between symbol legend entries.
 
+        **Default value:** ``10``.
     columns : anyOf(float, :class:`ExprRef`)
-
+        The number of columns in which to arrange symbol legend entries. A value of ``0`` or
+        lower indicates a single row with one column per entry.
     cornerRadius : anyOf(float, :class:`ExprRef`)
-
+        Corner radius for the full legend.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of this legend for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If the ``aria`` property is true, for SVG output the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__
+        will be set to this description. If the description is unspecified it will be
+        automatically generated.
     direction : :class:`Orientation`
         The direction of the legend, one of ``"vertical"`` or ``"horizontal"``.
 
-        **Default value:** - For top-/bottom- ``orient`` ed legends, ``"horizontal"`` - For
-        left-/right- ``orient`` ed legends, ``"vertical"`` - For top/bottom-left/right-
-        ``orient`` ed legends, ``"horizontal"`` for gradient legends and ``"vertical"`` for
-        symbol legends.
+        **Default value:**
+
+
+        * For top-/bottom- ``orient`` ed legends, ``"horizontal"``
+        * For left-/right- ``orient`` ed legends, ``"vertical"``
+        * For top/bottom-left/right- ``orient`` ed legends, ``"horizontal"`` for gradient
+          legends and ``"vertical"`` for symbol legends.
     disable : boolean
         Disable legend by default
     fillColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Background fill color for the full legend.
     gradientDirection : anyOf(:class:`Orientation`, :class:`ExprRef`)
+        The default direction ( ``"horizontal"`` or ``"vertical"`` ) for gradient legends.
 
+        **Default value:** ``"vertical"``.
     gradientHorizontalMaxLength : float
         Max legend length for a horizontal gradient when ``config.legend.gradientLength`` is
         undefined.
@@ -6976,19 +7831,31 @@ class LegendConfig(VegaLiteSchema):
 
         **Default value:** ``100``
     gradientLabelLimit : anyOf(float, :class:`ExprRef`)
-
+        The maximum allowed length in pixels of color ramp gradient labels.
     gradientLabelOffset : anyOf(float, :class:`ExprRef`)
+        Vertical offset in pixels for color ramp gradient labels.
 
+        **Default value:** ``2``.
     gradientLength : anyOf(float, :class:`ExprRef`)
+        The length in pixels of the primary axis of a color gradient. This value corresponds
+        to the height of a vertical gradient or the width of a horizontal gradient.
 
+        **Default value:** ``200``.
     gradientOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the color gradient.
     gradientStrokeColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        The color of the gradient stroke, can be in hex color code or regular color name.
 
+        **Default value:** ``"lightGray"``.
     gradientStrokeWidth : anyOf(float, :class:`ExprRef`)
+        The width of the gradient stroke, in pixels.
 
+        **Default value:** ``0``.
     gradientThickness : anyOf(float, :class:`ExprRef`)
+        The thickness in pixels of the color gradient. This value corresponds to the width
+        of a vertical gradient or the height of a horizontal gradient.
 
+        **Default value:** ``16``.
     gradientVerticalMaxLength : float
         Max legend length for a vertical gradient when ``config.legend.gradientLength`` is
         undefined.
@@ -7000,27 +7867,40 @@ class LegendConfig(VegaLiteSchema):
 
         **Default value:** ``100``
     gridAlign : anyOf(:class:`LayoutAlign`, :class:`ExprRef`)
+        The alignment to apply to symbol legends rows and columns. The supported string
+        values are ``"all"``, ``"each"`` (the default), and ``none``. For more information,
+        see the `grid layout documentation <https://vega.github.io/vega/docs/layout>`__.
 
+        **Default value:** ``"each"``.
     labelAlign : anyOf(:class:`Align`, :class:`ExprRef`)
-
+        The alignment of the legend label, can be left, center, or right.
     labelBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
+        The position of the baseline of legend label, can be ``"top"``, ``"middle"``,
+        ``"bottom"``, or ``"alphabetic"``.
 
+        **Default value:** ``"middle"``.
     labelColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        The color of the legend label, can be in hex color code or regular color name.
     labelFont : anyOf(string, :class:`ExprRef`)
-
+        The font of the legend label.
     labelFontSize : anyOf(float, :class:`ExprRef`)
+        The font size of legend label.
 
+        **Default value:** ``10``.
     labelFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style of legend label.
     labelFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight of legend label.
     labelLimit : anyOf(float, :class:`ExprRef`)
+        Maximum allowed pixel width of legend tick labels.
 
+        **Default value:** ``160``.
     labelOffset : anyOf(float, :class:`ExprRef`)
+        The offset of the legend label.
 
+        **Default value:** ``4``.
     labelOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of labels.
     labelOverlap : anyOf(:class:`LabelOverlap`, :class:`ExprRef`)
         The strategy to use for resolving overlap of labels in gradient legends. If
         ``false``, no overlap reduction is attempted. If set to ``true`` or ``"parity"``, a
@@ -7030,17 +7910,22 @@ class LegendConfig(VegaLiteSchema):
 
         **Default value:** ``"greedy"`` for ``log scales otherwise`` true`.
     labelPadding : anyOf(float, :class:`ExprRef`)
-
+        Padding in pixels between the legend and legend labels.
     labelSeparation : anyOf(float, :class:`ExprRef`)
-
+        The minimum separation that must be between label bounding boxes for them to be
+        considered non-overlapping (default ``0`` ). This property is ignored if
+        *labelOverlap* resolution is not enabled.
     layout : :class:`ExprRef`
 
     legendX : anyOf(float, :class:`ExprRef`)
-
+        Custom x-position for legend with orient "none".
     legendY : anyOf(float, :class:`ExprRef`)
-
+        Custom y-position for legend with orient "none".
     offset : anyOf(float, :class:`ExprRef`)
+        The offset in pixels by which to displace the legend from the data rectangle and
+        axes.
 
+        **Default value:** ``18``.
     orient : :class:`LegendOrient`
         The orientation of the legend, which determines how the legend is positioned within
         the scene. One of ``"left"``, ``"right"``, ``"top"``, ``"bottom"``, ``"top-left"``,
@@ -7048,77 +7933,121 @@ class LegendConfig(VegaLiteSchema):
 
         **Default value:** ``"right"``
     padding : anyOf(float, :class:`ExprRef`)
+        The padding between the border and content of the legend group.
 
+        **Default value:** ``0``.
     rowPadding : anyOf(float, :class:`ExprRef`)
+        The vertical padding in pixels between symbol legend entries.
 
+        **Default value:** ``2``.
     strokeColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Border stroke color for the full legend.
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        Border stroke dash pattern for the full legend.
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        Border stroke width for the full legend.
     symbolBaseFillColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        Default fill color for legend symbols. Only applied if there is no ``"fill"`` scale
+        color encoding for the legend.
 
+        **Default value:** ``"transparent"``.
     symbolBaseStrokeColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
+        Default stroke color for legend symbols. Only applied if there is no ``"fill"``
+        scale color encoding for the legend.
 
+        **Default value:** ``"gray"``.
     symbolDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating [stroke, space] lengths for dashed symbol strokes.
     symbolDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The pixel offset at which to start drawing with the symbol stroke dash array.
     symbolDirection : anyOf(:class:`Orientation`, :class:`ExprRef`)
+        The default direction ( ``"horizontal"`` or ``"vertical"`` ) for symbol legends.
 
+        **Default value:** ``"vertical"``.
     symbolFillColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        The color of the legend symbol,
     symbolLimit : anyOf(float, :class:`ExprRef`)
-
+        The maximum number of allowed entries for a symbol legend. Additional entries will
+        be dropped.
     symbolOffset : anyOf(float, :class:`ExprRef`)
+        Horizontal pixel offset for legend symbols.
 
+        **Default value:** ``0``.
     symbolOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the legend symbols.
     symbolSize : anyOf(float, :class:`ExprRef`)
+        The size of the legend symbol, in pixels.
 
+        **Default value:** ``100``.
     symbolStrokeColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Stroke color for legend symbols.
     symbolStrokeWidth : anyOf(float, :class:`ExprRef`)
+        The width of the symbol's stroke.
 
+        **Default value:** ``1.5``.
     symbolType : anyOf(:class:`SymbolShape`, :class:`ExprRef`)
-
+        The symbol shape. One of the plotting shapes ``circle`` (default), ``square``,
+        ``cross``, ``diamond``, ``triangle-up``, ``triangle-down``, ``triangle-right``, or
+        ``triangle-left``, the line symbol ``stroke``, or one of the centered directional
+        shapes ``arrow``, ``wedge``, or ``triangle``. Alternatively, a custom `SVG path
+        string <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ can be
+        provided. For correct sizing, custom shape paths should be defined within a square
+        bounding box with coordinates ranging from -1 to 1 along both the x and y
+        dimensions.
+
+        **Default value:** ``"circle"``.
     tickCount : anyOf(:class:`TickCount`, :class:`ExprRef`)
-
+        The desired number of tick values for quantitative legends.
     title : None
         Set to null to disable title for the axis, legend, or header.
     titleAlign : anyOf(:class:`Align`, :class:`ExprRef`)
+        Horizontal text alignment for legend titles.
 
+        **Default value:** ``"left"``.
     titleAnchor : anyOf(:class:`TitleAnchor`, :class:`ExprRef`)
-
+        Text anchor position for placing legend titles.
     titleBaseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
+        Vertical text baseline for legend titles.  One of ``"alphabetic"`` (default),
+        ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or ``"line-bottom"``. The
+        ``"line-top"`` and ``"line-bottom"`` values operate similarly to ``"top"`` and
+        ``"bottom"``, but are calculated relative to the *lineHeight* rather than *fontSize*
+        alone.
 
+        **Default value:** ``"top"``.
     titleColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        The color of the legend title, can be in hex color code or regular color name.
     titleFont : anyOf(string, :class:`ExprRef`)
-
+        The font of the legend title.
     titleFontSize : anyOf(float, :class:`ExprRef`)
-
+        The font size of the legend title.
     titleFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style of the legend title.
     titleFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight of the legend title. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     titleLimit : anyOf(float, :class:`ExprRef`)
+        Maximum allowed pixel width of legend titles.
 
+        **Default value:** ``180``.
     titleLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line title text or title text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     titleOpacity : anyOf(float, :class:`ExprRef`)
-
+        Opacity of the legend title.
     titleOrient : anyOf(:class:`Orient`, :class:`ExprRef`)
-
+        Orientation of the legend title.
     titlePadding : anyOf(float, :class:`ExprRef`)
+        The padding, in pixels, between title and legend.
 
+        **Default value:** ``5``.
     unselectedOpacity : float
         The opacity of unselected legend entries.
 
         **Default value:** 0.35.
     zindex : anyOf(float, :class:`ExprRef`)
-
+        The integer z-index indicating the layering of the legend group relative to other
+        axis, mark, and legend groups.
     """
     _schema = {'$ref': '#/definitions/LegendConfig'}
 
@@ -7210,7 +8139,7 @@ class LegendResolveMap(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     angle : :class:`ResolveMode`
@@ -7253,7 +8182,7 @@ class LegendStreamBinding(LegendBinding):
 
     Mapping(required=[legend])
 
-    Attributes
+    Parameters
     ----------
 
     legend : anyOf(string, :class:`Stream`)
@@ -7270,7 +8199,7 @@ class LineConfig(AnyMarkConfig):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(:class:`Align`, :class:`ExprRef`)
@@ -7279,15 +8208,25 @@ class LineConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     angle : anyOf(float, :class:`ExprRef`)
-
+        The rotation angle of the text, in degrees.
     aria : anyOf(boolean, :class:`ExprRef`)
-
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
     ariaRole : anyOf(string, :class:`ExprRef`)
-
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
     ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
     aspect : anyOf(boolean, :class:`ExprRef`)
-
+        Whether to keep aspect ratio of image marks.
     baseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
         For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
         ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
@@ -7300,48 +8239,80 @@ class LineConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
         Default color.
 
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
+        **Default value:** ``"ltr"``
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     endAngle : anyOf(float, :class:`ExprRef`)
-
+        The end angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -7353,34 +8324,68 @@ class LineConfig(AnyMarkConfig):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
     height : anyOf(float, :class:`ExprRef`)
-
+        Height of the marks.
     href : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -7391,17 +8396,22 @@ class LineConfig(AnyMarkConfig):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     point : anyOf(boolean, :class:`OverlayMarkDef`, string)
         A flag for overlaying points on top of line or area marks, or an object defining the
         properties of the overlayed points.
@@ -7422,49 +8432,87 @@ class LineConfig(AnyMarkConfig):
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
 
+
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
+
+
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
 
-    startAngle : anyOf(float, :class:`ExprRef`)
 
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
+    startAngle : anyOf(float, :class:`ExprRef`)
+        The start angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -7474,32 +8522,33 @@ class LineConfig(AnyMarkConfig):
     theta2 : anyOf(float, :class:`ExprRef`)
         The end angle of arc marks in radians. A value of 0 indicates up or “north”,
         increasing values proceed clockwise.
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        The URL of the image file for image marks.
     width : anyOf(float, :class:`ExprRef`)
-
+        Width of the marks.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -7541,7 +8590,7 @@ class LineConfig(AnyMarkConfig):
                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
                  strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
-                 timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
+                 timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined,
                  url=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined,
                  **kwds):
         super(LineConfig, self).__init__(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
@@ -7567,9 +8616,32 @@ class LineConfig(AnyMarkConfig):
                                          strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                                          strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
                                          tension=tension, text=text, theta=theta, theta2=theta2,
-                                         timeUnitBand=timeUnitBand,
-                                         timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
-                                         url=url, width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+                                         timeUnitBandPosition=timeUnitBandPosition,
+                                         timeUnitBandSize=timeUnitBandSize, tooltip=tooltip, url=url,
+                                         width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+
+
+class LineString(Geometry):
+    """LineString schema wrapper
+
+    Mapping(required=[coordinates, type])
+    LineString geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.4
+
+    Parameters
+    ----------
+
+    coordinates : List(:class:`Position`)
+
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/LineString'}
+
+    def __init__(self, coordinates=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(LineString, self).__init__(coordinates=coordinates, type=type, bbox=bbox, **kwds)
 
 
 class LinearGradient(Gradient):
@@ -7577,7 +8649,7 @@ class LinearGradient(Gradient):
 
     Mapping(required=[gradient, stops])
 
-    Attributes
+    Parameters
     ----------
 
     gradient : string
@@ -7611,12 +8683,31 @@ class LinearGradient(Gradient):
                                              y2=y2, **kwds)
 
 
+class Locale(VegaLiteSchema):
+    """Locale schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    number : :class:`NumberLocale`
+        Locale definition for formatting numbers.
+    time : :class:`TimeLocale`
+        Locale definition for formatting dates and times.
+    """
+    _schema = {'$ref': '#/definitions/Locale'}
+
+    def __init__(self, number=Undefined, time=Undefined, **kwds):
+        super(Locale, self).__init__(number=number, time=time, **kwds)
+
+
 class LookupData(VegaLiteSchema):
     """LookupData schema wrapper
 
     Mapping(required=[data, key])
 
-    Attributes
+    Parameters
     ----------
 
     data : :class:`Data`
@@ -7636,23 +8727,23 @@ class LookupData(VegaLiteSchema):
 class LookupSelection(VegaLiteSchema):
     """LookupSelection schema wrapper
 
-    Mapping(required=[key, selection])
+    Mapping(required=[key, param])
 
-    Attributes
+    Parameters
     ----------
 
     key : :class:`FieldName`
         Key in data to lookup.
-    selection : string
-        Selection name to look up.
+    param : :class:`ParameterName`
+        Selection parameter name to look up.
     fields : List(:class:`FieldName`)
         Fields in foreign data or selection to lookup. If not specified, the entire object
         is queried.
     """
     _schema = {'$ref': '#/definitions/LookupSelection'}
 
-    def __init__(self, key=Undefined, selection=Undefined, fields=Undefined, **kwds):
-        super(LookupSelection, self).__init__(key=key, selection=selection, fields=fields, **kwds)
+    def __init__(self, key=Undefined, param=Undefined, fields=Undefined, **kwds):
+        super(LookupSelection, self).__init__(key=key, param=param, fields=fields, **kwds)
 
 
 class Mark(AnyMark):
@@ -7673,7 +8764,7 @@ class MarkConfig(AnyMarkConfig):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(:class:`Align`, :class:`ExprRef`)
@@ -7682,15 +8773,25 @@ class MarkConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     angle : anyOf(float, :class:`ExprRef`)
-
+        The rotation angle of the text, in degrees.
     aria : anyOf(boolean, :class:`ExprRef`)
-
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
     ariaRole : anyOf(string, :class:`ExprRef`)
-
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
     ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
     aspect : anyOf(boolean, :class:`ExprRef`)
-
+        Whether to keep aspect ratio of image marks.
     baseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
         For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
         ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
@@ -7703,48 +8804,80 @@ class MarkConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
         Default color.
 
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
+        **Default value:** ``"ltr"``
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     endAngle : anyOf(float, :class:`ExprRef`)
-
+        The end angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -7756,34 +8889,68 @@ class MarkConfig(AnyMarkConfig):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
     height : anyOf(float, :class:`ExprRef`)
-
+        Height of the marks.
     href : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -7794,65 +8961,108 @@ class MarkConfig(AnyMarkConfig):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     radius : anyOf(float, :class:`ExprRef`)
         For arc mark, the primary (outer) radius in pixels.
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
+
 
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
 
-    startAngle : anyOf(float, :class:`ExprRef`)
 
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
+
+
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
+    startAngle : anyOf(float, :class:`ExprRef`)
+        The start angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -7862,32 +9072,33 @@ class MarkConfig(AnyMarkConfig):
     theta2 : anyOf(float, :class:`ExprRef`)
         The end angle of arc marks in radians. A value of 0 indicates up or “north”,
         increasing values proceed clockwise.
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        The URL of the image file for image marks.
     width : anyOf(float, :class:`ExprRef`)
-
+        Width of the marks.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -7929,7 +9140,7 @@ class MarkConfig(AnyMarkConfig):
                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
                  strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
-                 timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
+                 timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined,
                  url=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined,
                  **kwds):
         super(MarkConfig, self).__init__(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
@@ -7955,345 +9166,51 @@ class MarkConfig(AnyMarkConfig):
                                          strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                                          strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
                                          tension=tension, text=text, theta=theta, theta2=theta2,
-                                         timeUnitBand=timeUnitBand,
-                                         timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
-                                         url=url, width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+                                         timeUnitBandPosition=timeUnitBandPosition,
+                                         timeUnitBandSize=timeUnitBandSize, tooltip=tooltip, url=url,
+                                         width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
 
 
-class MarkConfigExprOrSignalRef(VegaLiteSchema):
-    """MarkConfigExprOrSignalRef schema wrapper
+class MarkDef(AnyMark):
+    """MarkDef schema wrapper
 
-    Mapping(required=[])
+    Mapping(required=[type])
 
-    Attributes
+    Parameters
     ----------
 
-    align : anyOf(:class:`Align`, :class:`ExprOrSignalRef`)
+    type : :class:`Mark`
+        The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``,
+        ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``,
+        ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``,
+        ``"errorband"``, ``"errorbar"`` ).
+    align : anyOf(:class:`Align`, :class:`ExprRef`)
         The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule).
         One of ``"left"``, ``"right"``, ``"center"``.
 
         **Note:** Expression reference is *not* supported for range marks.
-    angle : anyOf(float, :class:`ExprOrSignalRef`)
-
-    aria : anyOf(boolean, :class:`ExprOrSignalRef`)
-
-    ariaRole : anyOf(string, :class:`ExprOrSignalRef`)
-
-    ariaRoleDescription : anyOf(string, :class:`ExprOrSignalRef`)
-
-    aspect : anyOf(boolean, :class:`ExprOrSignalRef`)
-
-    baseline : anyOf(:class:`TextBaseline`, :class:`ExprOrSignalRef`)
-        For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
-        ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
-        expression reference that provides one of the valid values. The ``"line-top"`` and
-        ``"line-bottom"`` values operate similarly to ``"top"`` and ``"bottom"``, but are
-        calculated relative to the ``lineHeight`` rather than ``fontSize`` alone.
-
-        For range marks, the vertical alignment of the marks. One of ``"top"``,
-        ``"middle"``, ``"bottom"``.
-
-        **Note:** Expression reference is *not* supported for range marks.
-    blend : anyOf(:class:`Blend`, :class:`ExprOrSignalRef`)
-
-    color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprOrSignalRef`)
-        Default color.
-
-        **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
-        ``"#4682b4"``
-
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
-    cornerRadius : anyOf(float, :class:`ExprOrSignalRef`)
-
-    cornerRadiusBottomLeft : anyOf(float, :class:`ExprOrSignalRef`)
-
-    cornerRadiusBottomRight : anyOf(float, :class:`ExprOrSignalRef`)
-
-    cornerRadiusTopLeft : anyOf(float, :class:`ExprOrSignalRef`)
-
-    cornerRadiusTopRight : anyOf(float, :class:`ExprOrSignalRef`)
-
-    cursor : anyOf(:class:`Cursor`, :class:`ExprOrSignalRef`)
-
-    description : anyOf(string, :class:`ExprOrSignalRef`)
-
-    dir : anyOf(:class:`TextDirection`, :class:`ExprOrSignalRef`)
-
-    dx : anyOf(float, :class:`ExprOrSignalRef`)
-
-    dy : anyOf(float, :class:`ExprOrSignalRef`)
-
-    ellipsis : anyOf(string, :class:`ExprOrSignalRef`)
-
-    endAngle : anyOf(float, :class:`ExprOrSignalRef`)
-
-    fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprOrSignalRef`)
-        Default fill color. This property has higher precedence than ``config.color``. Set
-        to ``null`` to remove fill.
-
-        **Default value:** (None)
-    fillOpacity : anyOf(float, :class:`ExprOrSignalRef`)
-
-    filled : boolean
-        Whether the mark's color should be used as fill color instead of stroke color.
-
-        **Default value:** ``false`` for all ``point``, ``line``, and ``rule`` marks as well
-        as ``geoshape`` marks for `graticule
-        <https://vega.github.io/vega-lite/docs/data.html#graticule>`__ data sources;
-        otherwise, ``true``.
-
-        **Note:** This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
-    font : anyOf(string, :class:`ExprOrSignalRef`)
-
-    fontSize : anyOf(float, :class:`ExprOrSignalRef`)
-
-    fontStyle : anyOf(:class:`FontStyle`, :class:`ExprOrSignalRef`)
-
-    fontWeight : anyOf(:class:`FontWeight`, :class:`ExprOrSignalRef`)
-
-    height : anyOf(float, :class:`ExprOrSignalRef`)
-
-    href : anyOf(:class:`URI`, :class:`ExprOrSignalRef`)
-
-    innerRadius : anyOf(float, :class:`ExprOrSignalRef`)
-        The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
-        ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprOrSignalRef`)
-
-    invalid : enum('filter', None)
-        Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
-    limit : anyOf(float, :class:`ExprOrSignalRef`)
-
-    lineBreak : anyOf(string, :class:`ExprOrSignalRef`)
-
-    lineHeight : anyOf(float, :class:`ExprOrSignalRef`)
-
-    opacity : anyOf(float, :class:`ExprOrSignalRef`)
-        The overall opacity (value between [0,1]).
-
-        **Default value:** ``0.7`` for non-aggregate plots with ``point``, ``tick``,
-        ``circle``, or ``square`` marks or layered ``bar`` charts and ``1`` otherwise.
-    order : anyOf(None, boolean)
-        For line and trail marks, this ``order`` property can be set to ``null`` or
-        ``false`` to make the lines use the original order in the data sources.
-    orient : :class:`Orientation`
-        The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
-    outerRadius : anyOf(float, :class:`ExprOrSignalRef`)
-        The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprOrSignalRef`)
-
-    radius : anyOf(float, :class:`ExprOrSignalRef`)
-        For arc mark, the primary (outer) radius in pixels.
-
-        For text marks, polar coordinate radial offset, in pixels, of the text from the
-        origin determined by the ``x`` and ``y`` properties.
-    radius2 : anyOf(float, :class:`ExprOrSignalRef`)
-        The secondary (inner) radius in pixels of arc marks.
-    shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprOrSignalRef`)
-
-    size : anyOf(float, :class:`ExprOrSignalRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprOrSignalRef`)
-
-    startAngle : anyOf(float, :class:`ExprOrSignalRef`)
-
-    stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprOrSignalRef`)
-        Default stroke color. This property has higher precedence than ``config.color``. Set
-        to ``null`` to remove stroke.
-
-        **Default value:** (None)
-    strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprOrSignalRef`)
-
-    strokeDash : anyOf(List(float), :class:`ExprOrSignalRef`)
-
-    strokeDashOffset : anyOf(float, :class:`ExprOrSignalRef`)
-
-    strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprOrSignalRef`)
-
-    strokeMiterLimit : anyOf(float, :class:`ExprOrSignalRef`)
-
-    strokeOffset : anyOf(float, :class:`ExprOrSignalRef`)
-
-    strokeOpacity : anyOf(float, :class:`ExprOrSignalRef`)
-
-    strokeWidth : anyOf(float, :class:`ExprOrSignalRef`)
-
-    tension : anyOf(float, :class:`ExprOrSignalRef`)
-
-    text : anyOf(:class:`Text`, :class:`ExprOrSignalRef`)
-
-    theta : anyOf(float, :class:`ExprOrSignalRef`)
-        For arc marks, the arc length in radians if theta2 is not specified, otherwise the
-        start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
-        clockwise.)
-
-        For text marks, polar coordinate angle in radians.
-    theta2 : anyOf(float, :class:`ExprOrSignalRef`)
-        The end angle of arc marks in radians. A value of 0 indicates up or “north”,
-        increasing values proceed clockwise.
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
-    timeUnitBandPosition : float
-        Default relative band position for a time unit. If set to ``0``, the marks will be
-        positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
-        will be positioned in the middle of the time unit band step.
-    tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprOrSignalRef`,
-    None)
-        The tooltip text string to show upon mouse hover or an object defining which fields
-        should the tooltip be derived from.
-
-
-        * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
-
-        See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
-        documentation for a detailed discussion about tooltip  in Vega-Lite.
-
-        **Default value:** ``null``
-    url : anyOf(:class:`URI`, :class:`ExprOrSignalRef`)
-
-    width : anyOf(float, :class:`ExprOrSignalRef`)
-
-    x : anyOf(float, string, :class:`ExprOrSignalRef`)
-        X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
-        specified ``x2`` or ``width``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    x2 : anyOf(float, string, :class:`ExprOrSignalRef`)
-        X2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"width"`` for the width
-        of the plot.
-    y : anyOf(float, string, :class:`ExprOrSignalRef`)
-        Y coordinates of the marks, or height of vertical ``"bar"`` and ``"area"`` without
-        specified ``y2`` or ``height``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    y2 : anyOf(float, string, :class:`ExprOrSignalRef`)
-        Y2 coordinates for ranged ``"area"``, ``"bar"``, ``"rect"``, and  ``"rule"``.
-
-        The ``value`` of this channel can be a number or a string ``"height"`` for the
-        height of the plot.
-    """
-    _schema = {'$ref': '#/definitions/MarkConfig<ExprOrSignalRef>'}
-
-    def __init__(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined,
-                 ariaRoleDescription=Undefined, aspect=Undefined, baseline=Undefined, blend=Undefined,
-                 color=Undefined, cornerRadius=Undefined, cornerRadiusBottomLeft=Undefined,
-                 cornerRadiusBottomRight=Undefined, cornerRadiusTopLeft=Undefined,
-                 cornerRadiusTopRight=Undefined, cursor=Undefined, description=Undefined, dir=Undefined,
-                 dx=Undefined, dy=Undefined, ellipsis=Undefined, endAngle=Undefined, fill=Undefined,
-                 fillOpacity=Undefined, filled=Undefined, font=Undefined, fontSize=Undefined,
-                 fontStyle=Undefined, fontWeight=Undefined, height=Undefined, href=Undefined,
-                 innerRadius=Undefined, interpolate=Undefined, invalid=Undefined, limit=Undefined,
-                 lineBreak=Undefined, lineHeight=Undefined, opacity=Undefined, order=Undefined,
-                 orient=Undefined, outerRadius=Undefined, padAngle=Undefined, radius=Undefined,
-                 radius2=Undefined, shape=Undefined, size=Undefined, smooth=Undefined,
-                 startAngle=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
-                 strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
-                 strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                 tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
-                 timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
-                 url=Undefined, width=Undefined, x=Undefined, x2=Undefined, y=Undefined, y2=Undefined,
-                 **kwds):
-        super(MarkConfigExprOrSignalRef, self).__init__(align=align, angle=angle, aria=aria,
-                                                        ariaRole=ariaRole,
-                                                        ariaRoleDescription=ariaRoleDescription,
-                                                        aspect=aspect, baseline=baseline, blend=blend,
-                                                        color=color, cornerRadius=cornerRadius,
-                                                        cornerRadiusBottomLeft=cornerRadiusBottomLeft,
-                                                        cornerRadiusBottomRight=cornerRadiusBottomRight,
-                                                        cornerRadiusTopLeft=cornerRadiusTopLeft,
-                                                        cornerRadiusTopRight=cornerRadiusTopRight,
-                                                        cursor=cursor, description=description, dir=dir,
-                                                        dx=dx, dy=dy, ellipsis=ellipsis,
-                                                        endAngle=endAngle, fill=fill,
-                                                        fillOpacity=fillOpacity, filled=filled,
-                                                        font=font, fontSize=fontSize,
-                                                        fontStyle=fontStyle, fontWeight=fontWeight,
-                                                        height=height, href=href,
-                                                        innerRadius=innerRadius,
-                                                        interpolate=interpolate, invalid=invalid,
-                                                        limit=limit, lineBreak=lineBreak,
-                                                        lineHeight=lineHeight, opacity=opacity,
-                                                        order=order, orient=orient,
-                                                        outerRadius=outerRadius, padAngle=padAngle,
-                                                        radius=radius, radius2=radius2, shape=shape,
-                                                        size=size, smooth=smooth, startAngle=startAngle,
-                                                        stroke=stroke, strokeCap=strokeCap,
-                                                        strokeDash=strokeDash,
-                                                        strokeDashOffset=strokeDashOffset,
-                                                        strokeJoin=strokeJoin,
-                                                        strokeMiterLimit=strokeMiterLimit,
-                                                        strokeOffset=strokeOffset,
-                                                        strokeOpacity=strokeOpacity,
-                                                        strokeWidth=strokeWidth, tension=tension,
-                                                        text=text, theta=theta, theta2=theta2,
-                                                        timeUnitBand=timeUnitBand,
-                                                        timeUnitBandPosition=timeUnitBandPosition,
-                                                        tooltip=tooltip, url=url, width=width, x=x,
-                                                        x2=x2, y=y, y2=y2, **kwds)
-
-
-class MarkDef(AnyMark):
-    """MarkDef schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : :class:`Mark`
-        The mark type. This could a primitive mark type (one of ``"bar"``, ``"circle"``,
-        ``"square"``, ``"tick"``, ``"line"``, ``"area"``, ``"point"``, ``"geoshape"``,
-        ``"rule"``, and ``"text"`` ) or a composite mark type ( ``"boxplot"``,
-        ``"errorband"``, ``"errorbar"`` ).
-    align : anyOf(:class:`Align`, :class:`ExprRef`)
-        The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule).
-        One of ``"left"``, ``"right"``, ``"center"``.
-
-        **Note:** Expression reference is *not* supported for range marks.
-    angle : anyOf(float, :class:`ExprRef`)
-
-    aria : anyOf(boolean, :class:`ExprRef`)
-
-    ariaRole : anyOf(string, :class:`ExprRef`)
-
-    ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
-    aspect : anyOf(boolean, :class:`ExprRef`)
-
-    bandSize : float
-        The width of the ticks.
+    angle : anyOf(float, :class:`ExprRef`)
+        The rotation angle of the text, in degrees.
+    aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
+    ariaRole : anyOf(string, :class:`ExprRef`)
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
+    ariaRoleDescription : anyOf(string, :class:`ExprRef`)
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
+    aspect : anyOf(boolean, :class:`ExprRef`)
+        Whether to keep aspect ratio of image marks.
+    bandSize : float
+        The width of the ticks.
 
         **Default value:**  3/4 of step (width step for horizontal ticks and height step for
         vertical ticks).
@@ -8314,7 +9231,11 @@ class MarkDef(AnyMark):
 
         **Default value:** ``1``
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     clip : boolean
         Whether a mark be clipped to the enclosing group’s width and height.
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
@@ -8323,49 +9244,77 @@ class MarkDef(AnyMark):
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     continuousBandSize : float
         The default size of the bars on continuous scales.
 
         **Default value:** ``5``
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusEnd : anyOf(float, :class:`ExprRef`)
-        * For vertical bars, top-left and top-right corner radius. - For horizontal bars,
-          top-right and bottom-right corner radius.
+        For vertical bars, top-left and top-right corner radius.
+
+        For horizontal bars, top-right and bottom-right corner radius.
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
-    discreteBandSize : float
+        **Default value:** ``"ltr"``
+    discreteBandSize : anyOf(float, :class:`RelativeBandSize`)
         The default size of the bars with discrete dimensions. If unspecified, the default
         size is  ``step-2``, which provides 2 pixel offset between bars.
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -8377,30 +9326,68 @@ class MarkDef(AnyMark):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
+    height : anyOf(float, :class:`ExprRef`, :class:`RelativeBandSize`)
+        Height of the marks.  One of:
 
-    height : anyOf(float, :class:`ExprRef`)
 
-    href : anyOf(:class:`URI`, :class:`ExprRef`)
+        A number representing a fixed pixel height.
 
+        A relative band size definition.  For example, ``{band: 0.5}`` represents half of
+        the band
+    href : anyOf(:class:`URI`, :class:`ExprRef`)
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     line : anyOf(boolean, :class:`OverlayMarkDef`)
         A flag for overlaying line on top of area marks, or an object defining the
         properties of the overlayed lines.
@@ -8413,9 +9400,11 @@ class MarkDef(AnyMark):
 
         **Default value:** ``false``.
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -8426,17 +9415,22 @@ class MarkDef(AnyMark):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     point : anyOf(boolean, :class:`OverlayMarkDef`, string)
         A flag for overlaying points on top of line or area marks, or an object defining the
         properties of the overlayed points.
@@ -8457,47 +9451,83 @@ class MarkDef(AnyMark):
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     radius2Offset : anyOf(float, :class:`ExprRef`)
         Offset for radius2.
     radiusOffset : anyOf(float, :class:`ExprRef`)
         Offset for radius.
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
+
 
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
 
+
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
+
+
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     style : anyOf(string, List(string))
         A string or array of strings indicating the name of custom styles to apply to the
         mark. A style is a named collection of mark property defaults defined within the
@@ -8513,9 +9543,10 @@ class MarkDef(AnyMark):
         ``config.style.bar`` and ``config.style.foo`` (the specified style ``"foo"`` has
         higher precedence).
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -8533,32 +9564,39 @@ class MarkDef(AnyMark):
         Thickness of the tick mark.
 
         **Default value:**  ``1``
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
+        The URL of the image file for image marks.
+    width : anyOf(float, :class:`ExprRef`, :class:`RelativeBandSize`)
+        Width of the marks.  One of:
 
-    width : anyOf(float, :class:`ExprRef`)
 
+        A number representing a fixed pixel width.
+
+        A relative band size definition.  For example, ``{band: 0.5}`` represents half of
+        the band.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -8612,7 +9650,7 @@ class MarkDef(AnyMark):
                  strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
                  theta2Offset=Undefined, thetaOffset=Undefined, thickness=Undefined,
-                 timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
+                 timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined,
                  url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined,
                  xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined,
                  **kwds):
@@ -8644,11 +9682,10 @@ class MarkDef(AnyMark):
                                       strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style,
                                       tension=tension, text=text, theta=theta, theta2=theta2,
                                       theta2Offset=theta2Offset, thetaOffset=thetaOffset,
-                                      thickness=thickness, timeUnitBand=timeUnitBand,
-                                      timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
-                                      url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
-                                      xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset,
-                                      **kwds)
+                                      thickness=thickness, timeUnitBandPosition=timeUnitBandPosition,
+                                      timeUnitBandSize=timeUnitBandSize, tooltip=tooltip, url=url,
+                                      width=width, x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y,
+                                      y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
 
 
 class MarkPropDefGradientstringnull(VegaLiteSchema):
@@ -8668,42 +9705,51 @@ class FieldOrDatumDefWithConditionDatumDefGradientstringnull(ColorDef, MarkPropD
     """FieldOrDatumDefWithConditionDatumDefGradientstringnull schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
         value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
         since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
         A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
 
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
         has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
         type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
         scale for a field with ``bin`` or ``timeUnit``.
@@ -8712,54 +9758,68 @@ class FieldOrDatumDefWithConditionDatumDefGradientstringnull(ColorDef, MarkPropD
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<DatumDef,(Gradient|string|null)>'}
 
-    def __init__(self, band=Undefined, condition=Undefined, datum=Undefined, type=Undefined, **kwds):
-        super(FieldOrDatumDefWithConditionDatumDefGradientstringnull, self).__init__(band=band,
+    def __init__(self, bandPosition=Undefined, condition=Undefined, datum=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(FieldOrDatumDefWithConditionDatumDefGradientstringnull, self).__init__(bandPosition=bandPosition,
                                                                                      condition=condition,
                                                                                      datum=datum,
+                                                                                     title=title,
                                                                                      type=type, **kwds)
 
 
@@ -8767,10 +9827,8 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull(ColorDef, M
     """FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -8781,26 +9839,19 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull(ColorDef, M
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -8813,9 +9864,8 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull(ColorDef, M
 
         **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
-    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    condition : anyOf(:class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
@@ -8864,25 +9914,31 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull(ColorDef, M
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -8916,7 +9972,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull(ColorDef, M
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -8936,55 +9992,67 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull(ColorDef, M
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef,(Gradient|string|null)>'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, condition=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, condition=Undefined,
                  field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
                  title=Undefined, type=Undefined, **kwds):
         super(FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull, self).__init__(aggregate=aggregate,
-                                                                                             band=band,
+                                                                                             bandPosition=bandPosition,
                                                                                              bin=bin,
                                                                                              condition=condition,
                                                                                              field=field,
@@ -9059,94 +10127,73 @@ class Month(VegaLiteSchema):
         super(Month, self).__init__(*args)
 
 
-class MultiSelectionConfig(VegaLiteSchema):
-    """MultiSelectionConfig schema wrapper
+class MultiLineString(Geometry):
+    """MultiLineString schema wrapper
 
-    Mapping(required=[])
+    Mapping(required=[coordinates, type])
+    MultiLineString geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.5
 
-    Attributes
+    Parameters
     ----------
 
-    bind : :class:`LegendBinding`
-        When set, a selection is populated by interacting with the corresponding legend.
-        Direct manipulation interaction is disabled by default; to re-enable it, set the
-        selection's `on
-        <https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties>`__
-        property.
+    coordinates : List(List(:class:`Position`))
 
-        Legend bindings are restricted to selections that only specify a single field or
-        encoding.
-    clear : anyOf(:class:`Stream`, string, boolean)
-        Clears the selection, emptying it of all values. Can be a `Event Stream
-        <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable.
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/MultiLineString'}
 
-        **Default value:** ``dblclick``.
+    def __init__(self, coordinates=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(MultiLineString, self).__init__(coordinates=coordinates, type=type, bbox=bbox, **kwds)
 
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values must match for a
-        data tuple to fall within the selection.
 
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to fall within the
-        selection.
+class MultiPoint(Geometry):
+    """MultiPoint schema wrapper
 
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : List(:class:`SelectionInitMapping`)
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and an initial value (or
-        array of values).
+    Mapping(required=[coordinates, type])
+    MultiPoint geometry object.  https://tools.ietf.org/html/rfc7946#section-3.1.3
 
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
+    Parameters
+    ----------
 
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
-        documentation.
-    on : anyOf(:class:`Stream`, string)
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection. For interval selections, the event stream
-        must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how selections'
-        data queries are resolved when applied in a filter transform, conditional encoding
-        rule, or scale domain.
+    coordinates : List(:class:`Position`)
 
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    toggle : anyOf(string, boolean)
-        Controls whether data values should be toggled or only ever inserted into multi
-        selections. Can be ``true``, ``false`` (for insertion only), or a `Vega expression
-        <https://vega.github.io/vega/docs/expressions/>`__.
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/MultiPoint'}
 
-        **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e., data
-        values are toggled when a user interacts with the shift-key pressed).
+    def __init__(self, coordinates=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(MultiPoint, self).__init__(coordinates=coordinates, type=type, bbox=bbox, **kwds)
 
-        Setting the value to the Vega expression ``"true"`` will toggle data values without
-        the user pressing the shift-key.
 
-        **See also:** `toggle <https://vega.github.io/vega-lite/docs/toggle.html>`__
-        documentation.
+class MultiPolygon(Geometry):
+    """MultiPolygon schema wrapper
+
+    Mapping(required=[coordinates, type])
+    MultiPolygon geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.7
+
+    Parameters
+    ----------
+
+    coordinates : List(List(List(:class:`Position`)))
+
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
     """
-    _schema = {'$ref': '#/definitions/MultiSelectionConfig'}
+    _schema = {'$ref': '#/definitions/MultiPolygon'}
 
-    def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined,
-                 fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined,
-                 toggle=Undefined, **kwds):
-        super(MultiSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty,
-                                                   encodings=encodings, fields=fields, init=init,
-                                                   nearest=nearest, on=on, resolve=resolve,
-                                                   toggle=toggle, **kwds)
+    def __init__(self, coordinates=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(MultiPolygon, self).__init__(coordinates=coordinates, type=type, bbox=bbox, **kwds)
 
 
 class NamedData(DataSource):
@@ -9154,11 +10201,16 @@ class NamedData(DataSource):
 
     Mapping(required=[name])
 
-    Attributes
+    Parameters
     ----------
 
     name : string
         Provide a placeholder name and bind data at runtime.
+
+        New data may change the layout but Vega does not always resize the chart. To update
+        the layout when the data updates, set `autosize
+        <https://vega.github.io/vega-lite/docs/size.html#autosize>`__ or explicitly use
+        `view.resize <https://vega.github.io/vega/docs/api/view/#view_resize>`__.
     format : :class:`DataFormat`
         An object that specifies the format for parsing the data.
     """
@@ -9181,512 +10233,244 @@ class NonArgAggregateOp(Aggregate):
         super(NonArgAggregateOp, self).__init__(*args)
 
 
-class NormalizedSpec(VegaLiteSchema):
-    """NormalizedSpec schema wrapper
+class NonNormalizedSpec(VegaLiteSchema):
+    """NonNormalizedSpec schema wrapper
 
-    anyOf(:class:`FacetedUnitSpec`, :class:`LayerSpec`, :class:`RepeatSpec`,
-    :class:`NormalizedFacetSpec`, :class:`NormalizedConcatSpecGenericSpec`,
-    :class:`NormalizedVConcatSpecGenericSpec`, :class:`NormalizedHConcatSpecGenericSpec`)
+    anyOf(:class:`FacetedUnitSpec`, :class:`LayerSpec`, :class:`RepeatSpec`, :class:`FacetSpec`,
+    :class:`ConcatSpecGenericSpec`, :class:`VConcatSpecGenericSpec`,
+    :class:`HConcatSpecGenericSpec`)
     Any specification in Vega-Lite.
     """
-    _schema = {'$ref': '#/definitions/NormalizedSpec'}
+    _schema = {'$ref': '#/definitions/NonNormalizedSpec'}
 
     def __init__(self, *args, **kwds):
-        super(NormalizedSpec, self).__init__(*args, **kwds)
+        super(NonNormalizedSpec, self).__init__(*args, **kwds)
 
 
-class NormalizedConcatSpecGenericSpec(NormalizedSpec):
-    """NormalizedConcatSpecGenericSpec schema wrapper
+class NumberLocale(VegaLiteSchema):
+    """NumberLocale schema wrapper
 
-    Mapping(required=[concat])
-    Base interface for a generalized concatenation specification.
+    Mapping(required=[decimal, thousands, grouping, currency])
+    Locale definition for formatting numbers.
 
-    Attributes
+    Parameters
     ----------
 
-    concat : List(:class:`NormalizedSpec`)
-        A list of views to be concatenated.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns. The supported string values are
-        ``"all"``, ``"each"``, and ``"none"``.
+    currency : :class:`Vector2string`
+        The currency prefix and suffix (e.g., ["$", ""]).
+    decimal : string
+        The decimal point (e.g., ".").
+    grouping : List(float)
+        The array of group sizes (e.g., [3]), cycled as needed.
+    thousands : string
+        The group separator (e.g., ",").
+    minus : string
+        The minus sign (defaults to hyphen-minus, "-").
+    nan : string
+        The not-a-number value (defaults to "NaN").
+    numerals : :class:`Vector10string`
+        An array of ten strings to replace the numerals 0-9.
+    percent : string
+        The percent sign (defaults to "%").
+    """
+    _schema = {'$ref': '#/definitions/NumberLocale'}
+
+    def __init__(self, currency=Undefined, decimal=Undefined, grouping=Undefined, thousands=Undefined,
+                 minus=Undefined, nan=Undefined, numerals=Undefined, percent=Undefined, **kwds):
+        super(NumberLocale, self).__init__(currency=currency, decimal=decimal, grouping=grouping,
+                                           thousands=thousands, minus=minus, nan=nan, numerals=numerals,
+                                           percent=percent, **kwds)
 
 
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
+class NumericArrayMarkPropDef(VegaLiteSchema):
+    """NumericArrayMarkPropDef schema wrapper
 
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
+    anyOf(:class:`FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray`,
+    :class:`FieldOrDatumDefWithConditionDatumDefnumberArray`,
+    :class:`ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray`)
+    """
+    _schema = {'$ref': '#/definitions/NumericArrayMarkPropDef'}
 
-        **Default value:** ``"all"``.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
+    def __init__(self, *args, **kwds):
+        super(NumericArrayMarkPropDef, self).__init__(*args, **kwds)
 
 
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+class FieldOrDatumDefWithConditionDatumDefnumberArray(MarkPropDefnumberArray, NumericArrayMarkPropDef):
+    """FieldOrDatumDefWithConditionDatumDefnumberArray schema wrapper
 
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
+    Mapping(required=[])
 
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
+    Parameters
+    ----------
 
-        **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`, List(:class:`ConditionalValueDefnumberArrayExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using
-        the ``column`` channel (for ``facet`` and ``repeat`` ).
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
 
-        **Note** :
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        **Notes** :
 
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator. An object of
-        the form ``{"row": number, "column": number}`` can be used to set different spacing
-        values for rows and columns.
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(:class:`Text`, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/NormalizedConcatSpec<GenericSpec>'}
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
 
-    def __init__(self, concat=Undefined, align=Undefined, bounds=Undefined, center=Undefined,
-                 columns=Undefined, data=Undefined, description=Undefined, name=Undefined,
-                 resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined, **kwds):
-        super(NormalizedConcatSpecGenericSpec, self).__init__(concat=concat, align=align, bounds=bounds,
-                                                              center=center, columns=columns, data=data,
-                                                              description=description, name=name,
-                                                              resolve=resolve, spacing=spacing,
-                                                              title=title, transform=transform, **kwds)
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
 
+        **Default value:**
 
-class NormalizedFacetSpec(NormalizedSpec):
-    """NormalizedFacetSpec schema wrapper
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
-    Mapping(required=[facet, spec])
-    Base interface for a facet specification.
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<DatumDef,number[]>'}
 
-    Attributes
-    ----------
+    def __init__(self, bandPosition=Undefined, condition=Undefined, datum=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(FieldOrDatumDefWithConditionDatumDefnumberArray, self).__init__(bandPosition=bandPosition,
+                                                                              condition=condition,
+                                                                              datum=datum, title=title,
+                                                                              type=type, **kwds)
 
-    facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`)
-        Definition for how to facet the data. One of: 1) `a field definition for faceting
-        the plot by one field
-        <https://vega.github.io/vega-lite/docs/facet.html#field-def>`__ 2) `An object that
-        maps row and column channels to their field definitions
-        <https://vega.github.io/vega-lite/docs/facet.html#mapping>`__
-    spec : anyOf(:class:`LayerSpec`, :class:`FacetedUnitSpec`)
-        A specification of the view that gets faceted.
-    align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
-        The alignment to apply to grid rows and columns. The supported string values are
-        ``"all"``, ``"each"``, and ``"none"``.
 
+class FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray(MarkPropDefnumberArray, NumericArrayMarkPropDef):
+    """FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray schema wrapper
 
-        * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
-          identically based on the maximum observed size. String values for this property
-          will be applied to both grid rows and columns.
+    Mapping(required=[])
 
-        Alternatively, an object value of the form ``{"row": string, "column": string}`` can
-        be used to supply different alignments for rows and columns.
+    Parameters
+    ----------
 
-        **Default value:** ``"all"``.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
 
+        **Default value:** ``undefined`` (None)
 
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
-        **Default value:** ``"full"``
-    center : anyOf(boolean, :class:`RowColboolean`)
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
 
-        An object value of the form ``{"row": boolean, "column": boolean}`` can be used to
-        supply different centering values for rows and columns.
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
 
         **Default value:** ``false``
-    columns : float
-        The number of columns to include in the view composition layout.
 
-        **Default value** : ``undefined`` -- An infinite number of columns (a single row)
-        will be assumed. This is equivalent to ``hconcat`` (for ``concat`` ) and to using
-        the ``column`` channel (for ``facet`` and ``repeat`` ).
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
+        documentation.
+    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`, List(:class:`ConditionalValueDefnumberArrayExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
+        <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
-        **Note** :
+        **Note:** A field definition's ``condition`` property can only contain `conditional
+        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
+        since Vega-Lite only allows at most one encoded field per encoding channel.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
-
-        2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
-        and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : anyOf(float, :class:`RowColnumber`)
-        The spacing in pixels between sub-views of the composition operator. An object of
-        the form ``{"row": number, "column": number}`` can be used to set different spacing
-        values for rows and columns.
-
-        **Default value** : Depends on ``"spacing"`` property of `the view composition
-        configuration <https://vega.github.io/vega-lite/docs/config.html#view-config>`__ (
-        ``20`` by default)
-    title : anyOf(:class:`Text`, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/NormalizedFacetSpec'}
-
-    def __init__(self, facet=Undefined, spec=Undefined, align=Undefined, bounds=Undefined,
-                 center=Undefined, columns=Undefined, data=Undefined, description=Undefined,
-                 name=Undefined, resolve=Undefined, spacing=Undefined, title=Undefined,
-                 transform=Undefined, **kwds):
-        super(NormalizedFacetSpec, self).__init__(facet=facet, spec=spec, align=align, bounds=bounds,
-                                                  center=center, columns=columns, data=data,
-                                                  description=description, name=name, resolve=resolve,
-                                                  spacing=spacing, title=title, transform=transform,
-                                                  **kwds)
-
-
-class NormalizedHConcatSpecGenericSpec(NormalizedSpec):
-    """NormalizedHConcatSpecGenericSpec schema wrapper
-
-    Mapping(required=[hconcat])
-    Base interface for a horizontal concatenation specification.
-
-    Attributes
-    ----------
-
-    hconcat : List(:class:`NormalizedSpec`)
-        A list of views to be concatenated and put into a row.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
-
-        **Default value:** ``"full"``
-    center : boolean
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        **Default value:** ``false``
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : float
-        The spacing in pixels between sub-views of the concat operator.
-
-        **Default value** : ``10``
-    title : anyOf(:class:`Text`, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/NormalizedHConcatSpec<GenericSpec>'}
-
-    def __init__(self, hconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined,
-                 description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined,
-                 title=Undefined, transform=Undefined, **kwds):
-        super(NormalizedHConcatSpecGenericSpec, self).__init__(hconcat=hconcat, bounds=bounds,
-                                                               center=center, data=data,
-                                                               description=description, name=name,
-                                                               resolve=resolve, spacing=spacing,
-                                                               title=title, transform=transform, **kwds)
-
-
-class NormalizedVConcatSpecGenericSpec(NormalizedSpec):
-    """NormalizedVConcatSpecGenericSpec schema wrapper
-
-    Mapping(required=[vconcat])
-    Base interface for a vertical concatenation specification.
-
-    Attributes
-    ----------
-
-    vconcat : List(:class:`NormalizedSpec`)
-        A list of views to be concatenated and put into a column.
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
-
-        **Default value:** ``"full"``
-    center : boolean
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        **Default value:** ``false``
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    description : string
-        Description of this mark for commenting purpose.
-    name : string
-        Name of the visualization for later reference.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    spacing : float
-        The spacing in pixels between sub-views of the concat operator.
-
-        **Default value** : ``10``
-    title : anyOf(:class:`Text`, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    """
-    _schema = {'$ref': '#/definitions/NormalizedVConcatSpec<GenericSpec>'}
-
-    def __init__(self, vconcat=Undefined, bounds=Undefined, center=Undefined, data=Undefined,
-                 description=Undefined, name=Undefined, resolve=Undefined, spacing=Undefined,
-                 title=Undefined, transform=Undefined, **kwds):
-        super(NormalizedVConcatSpecGenericSpec, self).__init__(vconcat=vconcat, bounds=bounds,
-                                                               center=center, data=data,
-                                                               description=description, name=name,
-                                                               resolve=resolve, spacing=spacing,
-                                                               title=title, transform=transform, **kwds)
-
-
-class NumericArrayMarkPropDef(VegaLiteSchema):
-    """NumericArrayMarkPropDef schema wrapper
-
-    anyOf(:class:`FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray`,
-    :class:`FieldOrDatumDefWithConditionDatumDefnumberArray`,
-    :class:`ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray`)
-    """
-    _schema = {'$ref': '#/definitions/NumericArrayMarkPropDef'}
-
-    def __init__(self, *args, **kwds):
-        super(NumericArrayMarkPropDef, self).__init__(*args, **kwds)
-
-
-class FieldOrDatumDefWithConditionDatumDefnumberArray(MarkPropDefnumberArray, NumericArrayMarkPropDef):
-    """FieldOrDatumDefWithConditionDatumDefnumberArray schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`,
-    List(:class:`ConditionalValueDefnumberArrayExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
-        A constant value in data domain.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
-
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
-
-        **Default value:**
-
-        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
-        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
-
-        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
-        documentation.
-    """
-    _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<DatumDef,number[]>'}
-
-    def __init__(self, band=Undefined, condition=Undefined, datum=Undefined, type=Undefined, **kwds):
-        super(FieldOrDatumDefWithConditionDatumDefnumberArray, self).__init__(band=band,
-                                                                              condition=condition,
-                                                                              datum=datum, type=type,
-                                                                              **kwds)
-
-
-class FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray(MarkPropDefnumberArray, NumericArrayMarkPropDef):
-    """FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray schema wrapper
-
-    Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
-
-    Attributes
-    ----------
-
-    aggregate : :class:`Aggregate`
-        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
-        ``"min"``, ``"max"``, ``"count"`` ).
-
-        **Default value:** ``undefined`` (None)
-
-        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
-        documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : anyOf(boolean, :class:`BinParams`, None)
-        A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
-
-
-        If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
-
-        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
-        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
-        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
-        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
-        set the axis's `tickMinStep
-        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
-
-        **Default value:** ``false``
-
-        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
-        documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberArrayExprRef`,
-    List(:class:`ConditionalValueDefnumberArrayExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
-        <https://vega.github.io/vega-lite/docs/condition.html>`__.
-
-        **Note:** A field definition's ``condition`` property can only contain `conditional
-        value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
-        since Vega-Lite only allows at most one encoded field per encoding channel.
-    field : :class:`Field`
-        **Required.** A string defining the name of the field from which to pull a data
-        value or an object defining iterated values from the `repeat
-        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
-
-        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
-        documentation.
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
+        documentation.
 
         **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
         nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
@@ -9723,25 +10507,31 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray(MarkPropDefnumberA
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -9775,7 +10565,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray(MarkPropDefnumberA
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -9795,55 +10585,67 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray(MarkPropDefnumberA
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef,number[]>'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, condition=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, condition=Undefined,
                  field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
                  title=Undefined, type=Undefined, **kwds):
         super(FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray, self).__init__(aggregate=aggregate,
-                                                                                      band=band,
+                                                                                      bandPosition=bandPosition,
                                                                                       bin=bin,
                                                                                       condition=condition,
                                                                                       field=field,
@@ -9872,34 +10674,43 @@ class FieldOrDatumDefWithConditionDatumDefnumber(MarkPropDefnumber, NumericMarkP
     """FieldOrDatumDefWithConditionDatumDefnumber schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
         value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
         since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
         A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
     type : :class:`Type`
         The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
         ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
@@ -9916,63 +10727,76 @@ class FieldOrDatumDefWithConditionDatumDefnumber(MarkPropDefnumber, NumericMarkP
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<DatumDef,number>'}
 
-    def __init__(self, band=Undefined, condition=Undefined, datum=Undefined, type=Undefined, **kwds):
-        super(FieldOrDatumDefWithConditionDatumDefnumber, self).__init__(band=band, condition=condition,
-                                                                         datum=datum, type=type, **kwds)
+    def __init__(self, bandPosition=Undefined, condition=Undefined, datum=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(FieldOrDatumDefWithConditionDatumDefnumber, self).__init__(bandPosition=bandPosition,
+                                                                         condition=condition,
+                                                                         datum=datum, title=title,
+                                                                         type=type, **kwds)
 
 
 class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(MarkPropDefnumber, NumericMarkPropDef):
     """FieldOrDatumDefWithConditionMarkPropFieldDefnumber schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -9983,26 +10807,19 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(MarkPropDefnumber, Nume
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -10015,9 +10832,8 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(MarkPropDefnumber, Nume
 
         **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
-    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`,
-    List(:class:`ConditionalValueDefnumberExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    condition : anyOf(:class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
@@ -10066,25 +10882,31 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(MarkPropDefnumber, Nume
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -10118,7 +10940,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(MarkPropDefnumber, Nume
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -10138,55 +10960,68 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(MarkPropDefnumber, Nume
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef,number>'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, condition=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, condition=Undefined,
                  field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
                  title=Undefined, type=Undefined, **kwds):
         super(FieldOrDatumDefWithConditionMarkPropFieldDefnumber, self).__init__(aggregate=aggregate,
-                                                                                 band=band, bin=bin,
+                                                                                 bandPosition=bandPosition,
+                                                                                 bin=bin,
                                                                                  condition=condition,
                                                                                  field=field,
                                                                                  legend=legend,
@@ -10196,25 +11031,15 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefnumber(MarkPropDefnumber, Nume
                                                                                  **kwds)
 
 
-class NumericValueDef(LatLongDef):
-    """NumericValueDef schema wrapper
-
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
-
-    Attributes
-    ----------
+class OffsetDef(VegaLiteSchema):
+    """OffsetDef schema wrapper
 
-    value : anyOf(float, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
+    anyOf(:class:`ScaleFieldDef`, :class:`ScaleDatumDef`, :class:`ValueDefnumber`)
     """
-    _schema = {'$ref': '#/definitions/NumericValueDef'}
+    _schema = {'$ref': '#/definitions/OffsetDef'}
 
-    def __init__(self, value=Undefined, **kwds):
-        super(NumericValueDef, self).__init__(value=value, **kwds)
+    def __init__(self, *args, **kwds):
+        super(OffsetDef, self).__init__(*args, **kwds)
 
 
 class OrderFieldDef(VegaLiteSchema):
@@ -10222,7 +11047,7 @@ class OrderFieldDef(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -10233,26 +11058,19 @@ class OrderFieldDef(VegaLiteSchema):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -10307,7 +11125,7 @@ class OrderFieldDef(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -10327,54 +11145,67 @@ class OrderFieldDef(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/OrderFieldDef'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
                  sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(OrderFieldDef, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                            sort=sort, timeUnit=timeUnit, title=title, type=type, **kwds)
+        super(OrderFieldDef, self).__init__(aggregate=aggregate, bandPosition=bandPosition, bin=bin,
+                                            field=field, sort=sort, timeUnit=timeUnit, title=title,
+                                            type=type, **kwds)
 
 
 class OrderValueDef(VegaLiteSchema):
@@ -10382,16 +11213,15 @@ class OrderValueDef(VegaLiteSchema):
 
     Mapping(required=[value])
 
-    Attributes
+    Parameters
     ----------
 
     value : anyOf(float, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
-    condition : anyOf(:class:`ConditionalValueDefnumber`,
-    List(:class:`ConditionalValueDefnumber`))
-        One or more value definition(s) with `a selection or a test predicate
+    condition : anyOf(:class:`ConditionalValueDefnumber`, List(:class:`ConditionalValueDefnumber`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
@@ -10431,7 +11261,7 @@ class OverlayMarkDef(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(:class:`Align`, :class:`ExprRef`)
@@ -10440,15 +11270,25 @@ class OverlayMarkDef(VegaLiteSchema):
 
         **Note:** Expression reference is *not* supported for range marks.
     angle : anyOf(float, :class:`ExprRef`)
-
+        The rotation angle of the text, in degrees.
     aria : anyOf(boolean, :class:`ExprRef`)
-
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
     ariaRole : anyOf(string, :class:`ExprRef`)
-
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
     ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
     aspect : anyOf(boolean, :class:`ExprRef`)
-
+        Whether to keep aspect ratio of image marks.
     baseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
         For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
         ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
@@ -10461,7 +11301,11 @@ class OverlayMarkDef(VegaLiteSchema):
 
         **Note:** Expression reference is *not* supported for range marks.
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     clip : boolean
         Whether a mark be clipped to the enclosing group’s width and height.
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
@@ -10470,41 +11314,69 @@ class OverlayMarkDef(VegaLiteSchema):
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
+        **Default value:** ``"ltr"``
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     endAngle : anyOf(float, :class:`ExprRef`)
-
+        The end angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -10516,34 +11388,68 @@ class OverlayMarkDef(VegaLiteSchema):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
     height : anyOf(float, :class:`ExprRef`)
-
+        Height of the marks.
     href : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -10554,65 +11460,107 @@ class OverlayMarkDef(VegaLiteSchema):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     radius : anyOf(float, :class:`ExprRef`)
         For arc mark, the primary (outer) radius in pixels.
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     radius2Offset : anyOf(float, :class:`ExprRef`)
         Offset for radius2.
     radiusOffset : anyOf(float, :class:`ExprRef`)
         Offset for radius.
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
 
+
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
+
+
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
 
-    startAngle : anyOf(float, :class:`ExprRef`)
 
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
+    startAngle : anyOf(float, :class:`ExprRef`)
+        The start angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     style : anyOf(string, List(string))
         A string or array of strings indicating the name of custom styles to apply to the
         mark. A style is a named collection of mark property defaults defined within the
@@ -10628,9 +11576,10 @@ class OverlayMarkDef(VegaLiteSchema):
         ``config.style.bar`` and ``config.style.foo`` (the specified style ``"foo"`` has
         higher precedence).
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -10644,32 +11593,33 @@ class OverlayMarkDef(VegaLiteSchema):
         Offset for theta2.
     thetaOffset : anyOf(float, :class:`ExprRef`)
         Offset for theta.
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        The URL of the image file for image marks.
     width : anyOf(float, :class:`ExprRef`)
-
+        Width of the marks.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -10720,8 +11670,8 @@ class OverlayMarkDef(VegaLiteSchema):
                  strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
                  strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
-                 theta2Offset=Undefined, thetaOffset=Undefined, timeUnitBand=Undefined,
-                 timeUnitBandPosition=Undefined, tooltip=Undefined, url=Undefined, width=Undefined,
+                 theta2Offset=Undefined, thetaOffset=Undefined, timeUnitBandPosition=Undefined,
+                 timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined,
                  x=Undefined, x2=Undefined, x2Offset=Undefined, xOffset=Undefined, y=Undefined,
                  y2=Undefined, y2Offset=Undefined, yOffset=Undefined, **kwds):
         super(OverlayMarkDef, self).__init__(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
@@ -10751,8 +11701,8 @@ class OverlayMarkDef(VegaLiteSchema):
                                              strokeWidth=strokeWidth, style=style, tension=tension,
                                              text=text, theta=theta, theta2=theta2,
                                              theta2Offset=theta2Offset, thetaOffset=thetaOffset,
-                                             timeUnitBand=timeUnitBand,
-                                             timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
+                                             timeUnitBandPosition=timeUnitBandPosition,
+                                             timeUnitBandSize=timeUnitBandSize, tooltip=tooltip,
                                              url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
                                              xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
                                              yOffset=yOffset, **kwds)
@@ -10769,39 +11719,26 @@ class Padding(VegaLiteSchema):
         super(Padding, self).__init__(*args, **kwds)
 
 
-class Parameter(VegaLiteSchema):
-    """Parameter schema wrapper
+class ParameterExtent(BinExtent):
+    """ParameterExtent schema wrapper
 
-    Mapping(required=[name])
+    anyOf(Mapping(required=[param]), Mapping(required=[param]))
+    """
+    _schema = {'$ref': '#/definitions/ParameterExtent'}
 
-    Attributes
-    ----------
+    def __init__(self, *args, **kwds):
+        super(ParameterExtent, self).__init__(*args, **kwds)
 
-    name : string
-        Required. A unique name for the parameter. Parameter names should be valid
-        JavaScript identifiers: they should contain only alphanumeric characters (or “$”, or
-        “_”) and may not start with a digit. Reserved keywords that may not be used as
-        parameter names are "datum", "event", "item", and "parent".
-    bind : :class:`Binding`
-        Binds the parameter to an external input element such as a slider, selection list or
-        radio button group.
-    description : string
-        A text description of the parameter, useful for inline documentation.
-    expr : :class:`Expr`
-        An expression for the value of the parameter. This expression may include other
-        parameters, in which case the parameter will automatically update in response to
-        upstream parameter changes.
-    value : Any
-        The initial value of the parameter.
 
-        **Default value:** ``undefined``
+class ParameterName(VegaLiteSchema):
+    """ParameterName schema wrapper
+
+    string
     """
-    _schema = {'$ref': '#/definitions/Parameter'}
+    _schema = {'$ref': '#/definitions/ParameterName'}
 
-    def __init__(self, name=Undefined, bind=Undefined, description=Undefined, expr=Undefined,
-                 value=Undefined, **kwds):
-        super(Parameter, self).__init__(name=name, bind=bind, description=description, expr=expr,
-                                        value=value, **kwds)
+    def __init__(self, *args):
+        super(ParameterName, self).__init__(*args)
 
 
 class Parse(VegaLiteSchema):
@@ -10826,6 +11763,247 @@ class ParseValue(VegaLiteSchema):
         super(ParseValue, self).__init__(*args, **kwds)
 
 
+class Point(Geometry):
+    """Point schema wrapper
+
+    Mapping(required=[coordinates, type])
+    Point geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.2
+
+    Parameters
+    ----------
+
+    coordinates : :class:`Position`
+        A Position is an array of coordinates.
+        https://tools.ietf.org/html/rfc7946#section-3.1.1 Array should contain between two
+        and three elements. The previous GeoJSON specification allowed more elements (e.g.,
+        which could be used to represent M values), but the current specification only
+        allows X, Y, and (optionally) Z to be defined.
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/Point'}
+
+    def __init__(self, coordinates=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(Point, self).__init__(coordinates=coordinates, type=type, bbox=bbox, **kwds)
+
+
+class PointSelectionConfig(VegaLiteSchema):
+    """PointSelectionConfig schema wrapper
+
+    Mapping(required=[type])
+
+    Parameters
+    ----------
+
+    type : string
+        Determines the default event processing and data query for the selection. Vega-Lite
+        currently supports two selection types:
+
+
+        * ``"point"`` -- to select multiple discrete data values; the first value is
+          selected on ``click`` and additional values toggled on shift-click.
+        * ``"interval"`` -- to select a continuous range of data values on ``drag``.
+    clear : anyOf(:class:`Stream`, string, boolean)
+        Clears the selection, emptying it of all values. This property can be a `Event
+        Stream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable
+        clear.
+
+        **Default value:** ``dblclick``.
+
+        **See also:** `clear examples
+        <https://vega.github.io/vega-lite/docs/selection.html#clear>`__ in the
+        documentation.
+    encodings : List(:class:`SingleDefUnitChannel`)
+        An array of encoding channels. The corresponding data field values must match for a
+        data tuple to fall within the selection.
+
+        **See also:** The `projection with encodings and fields section
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ in the
+        documentation.
+    fields : List(:class:`FieldName`)
+        An array of field names whose values must match for a data tuple to fall within the
+        selection.
+
+        **See also:** The `projection with encodings and fields section
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ in the
+        documentation.
+    nearest : boolean
+        When true, an invisible voronoi diagram is computed to accelerate discrete
+        selection. The data value *nearest* the mouse cursor is added to the selection.
+
+        **Default value:** ``false``, which means that data values must be interacted with
+        directly (e.g., clicked on) to be added to the selection.
+
+        **See also:** `nearest examples
+        <https://vega.github.io/vega-lite/docs/selection.html#nearest>`__ documentation.
+    on : anyOf(:class:`Stream`, string)
+        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
+        selector) that triggers the selection. For interval selections, the event stream
+        must specify a `start and end
+        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
+
+        **See also:** `on examples
+        <https://vega.github.io/vega-lite/docs/selection.html#on>`__ in the documentation.
+    resolve : :class:`SelectionResolution`
+        With layered and multi-view displays, a strategy that determines how selections'
+        data queries are resolved when applied in a filter transform, conditional encoding
+        rule, or scale domain.
+
+        One of:
+
+
+        * ``"global"`` -- only one brush exists for the entire SPLOM. When the user begins
+          to drag, any previous brushes are cleared, and a new one is constructed.
+        * ``"union"`` -- each cell contains its own brush, and points are highlighted if
+          they lie within *any* of these individual brushes.
+        * ``"intersect"`` -- each cell contains its own brush, and points are highlighted
+          only if they fall within *all* of these individual brushes.
+
+        **Default value:** ``global``.
+
+        **See also:** `resolve examples
+        <https://vega.github.io/vega-lite/docs/selection.html#resolve>`__ in the
+        documentation.
+    toggle : anyOf(string, boolean)
+        Controls whether data values should be toggled (inserted or removed from a point
+        selection) or only ever inserted into point selections.
+
+        One of:
+
+
+        * ``true`` -- the default behavior, which corresponds to ``"event.shiftKey"``.  As a
+          result, data values are toggled when the user interacts with the shift-key
+          pressed.
+        * ``false`` -- disables toggling behaviour; the selection will only ever contain a
+          single data value corresponding to the most recent interaction.
+        * A `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ which is
+          re-evaluated as the user interacts. If the expression evaluates to ``true``, the
+          data value is toggled into or out of the point selection. If the expression
+          evaluates to ``false``, the point selection is first cleared, and the data value
+          is then inserted. For example, setting the value to the Vega expression ``"true"``
+          will toggle data values without the user pressing the shift-key.
+
+        **Default value:** ``true``
+
+        **See also:** `toggle examples
+        <https://vega.github.io/vega-lite/docs/selection.html#toggle>`__ in the
+        documentation.
+    """
+    _schema = {'$ref': '#/definitions/PointSelectionConfig'}
+
+    def __init__(self, type=Undefined, clear=Undefined, encodings=Undefined, fields=Undefined,
+                 nearest=Undefined, on=Undefined, resolve=Undefined, toggle=Undefined, **kwds):
+        super(PointSelectionConfig, self).__init__(type=type, clear=clear, encodings=encodings,
+                                                   fields=fields, nearest=nearest, on=on,
+                                                   resolve=resolve, toggle=toggle, **kwds)
+
+
+class PointSelectionConfigWithoutType(VegaLiteSchema):
+    """PointSelectionConfigWithoutType schema wrapper
+
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    clear : anyOf(:class:`Stream`, string, boolean)
+        Clears the selection, emptying it of all values. This property can be a `Event
+        Stream <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable
+        clear.
+
+        **Default value:** ``dblclick``.
+
+        **See also:** `clear examples
+        <https://vega.github.io/vega-lite/docs/selection.html#clear>`__ in the
+        documentation.
+    encodings : List(:class:`SingleDefUnitChannel`)
+        An array of encoding channels. The corresponding data field values must match for a
+        data tuple to fall within the selection.
+
+        **See also:** The `projection with encodings and fields section
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ in the
+        documentation.
+    fields : List(:class:`FieldName`)
+        An array of field names whose values must match for a data tuple to fall within the
+        selection.
+
+        **See also:** The `projection with encodings and fields section
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ in the
+        documentation.
+    nearest : boolean
+        When true, an invisible voronoi diagram is computed to accelerate discrete
+        selection. The data value *nearest* the mouse cursor is added to the selection.
+
+        **Default value:** ``false``, which means that data values must be interacted with
+        directly (e.g., clicked on) to be added to the selection.
+
+        **See also:** `nearest examples
+        <https://vega.github.io/vega-lite/docs/selection.html#nearest>`__ documentation.
+    on : anyOf(:class:`Stream`, string)
+        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
+        selector) that triggers the selection. For interval selections, the event stream
+        must specify a `start and end
+        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
+
+        **See also:** `on examples
+        <https://vega.github.io/vega-lite/docs/selection.html#on>`__ in the documentation.
+    resolve : :class:`SelectionResolution`
+        With layered and multi-view displays, a strategy that determines how selections'
+        data queries are resolved when applied in a filter transform, conditional encoding
+        rule, or scale domain.
+
+        One of:
+
+
+        * ``"global"`` -- only one brush exists for the entire SPLOM. When the user begins
+          to drag, any previous brushes are cleared, and a new one is constructed.
+        * ``"union"`` -- each cell contains its own brush, and points are highlighted if
+          they lie within *any* of these individual brushes.
+        * ``"intersect"`` -- each cell contains its own brush, and points are highlighted
+          only if they fall within *all* of these individual brushes.
+
+        **Default value:** ``global``.
+
+        **See also:** `resolve examples
+        <https://vega.github.io/vega-lite/docs/selection.html#resolve>`__ in the
+        documentation.
+    toggle : anyOf(string, boolean)
+        Controls whether data values should be toggled (inserted or removed from a point
+        selection) or only ever inserted into point selections.
+
+        One of:
+
+
+        * ``true`` -- the default behavior, which corresponds to ``"event.shiftKey"``.  As a
+          result, data values are toggled when the user interacts with the shift-key
+          pressed.
+        * ``false`` -- disables toggling behaviour; the selection will only ever contain a
+          single data value corresponding to the most recent interaction.
+        * A `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ which is
+          re-evaluated as the user interacts. If the expression evaluates to ``true``, the
+          data value is toggled into or out of the point selection. If the expression
+          evaluates to ``false``, the point selection is first cleared, and the data value
+          is then inserted. For example, setting the value to the Vega expression ``"true"``
+          will toggle data values without the user pressing the shift-key.
+
+        **Default value:** ``true``
+
+        **See also:** `toggle examples
+        <https://vega.github.io/vega-lite/docs/selection.html#toggle>`__ in the
+        documentation.
+    """
+    _schema = {'$ref': '#/definitions/PointSelectionConfigWithoutType'}
+
+    def __init__(self, clear=Undefined, encodings=Undefined, fields=Undefined, nearest=Undefined,
+                 on=Undefined, resolve=Undefined, toggle=Undefined, **kwds):
+        super(PointSelectionConfigWithoutType, self).__init__(clear=clear, encodings=encodings,
+                                                              fields=fields, nearest=nearest, on=on,
+                                                              resolve=resolve, toggle=toggle, **kwds)
+
+
 class PolarDef(VegaLiteSchema):
     """PolarDef schema wrapper
 
@@ -10838,6 +12016,44 @@ class PolarDef(VegaLiteSchema):
         super(PolarDef, self).__init__(*args, **kwds)
 
 
+class Polygon(Geometry):
+    """Polygon schema wrapper
+
+    Mapping(required=[coordinates, type])
+    Polygon geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.6
+
+    Parameters
+    ----------
+
+    coordinates : List(List(:class:`Position`))
+
+    type : string
+        Specifies the type of GeoJSON object.
+    bbox : :class:`BBox`
+        Bounding box of the coordinate range of the object's Geometries, Features, or
+        Feature Collections. https://tools.ietf.org/html/rfc7946#section-5
+    """
+    _schema = {'$ref': '#/definitions/Polygon'}
+
+    def __init__(self, coordinates=Undefined, type=Undefined, bbox=Undefined, **kwds):
+        super(Polygon, self).__init__(coordinates=coordinates, type=type, bbox=bbox, **kwds)
+
+
+class Position(VegaLiteSchema):
+    """Position schema wrapper
+
+    List(float)
+    A Position is an array of coordinates. https://tools.ietf.org/html/rfc7946#section-3.1.1
+    Array should contain between two and three elements. The previous GeoJSON specification
+    allowed more elements (e.g., which could be used to represent M values), but the current
+    specification only allows X, Y, and (optionally) Z to be defined.
+    """
+    _schema = {'$ref': '#/definitions/Position'}
+
+    def __init__(self, *args):
+        super(Position, self).__init__(*args)
+
+
 class Position2Def(VegaLiteSchema):
     """Position2Def schema wrapper
 
@@ -10854,23 +12070,35 @@ class DatumDef(LatLongDef, Position2Def):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
         A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
     type : :class:`Type`
         The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
         ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
@@ -10887,52 +12115,65 @@ class DatumDef(LatLongDef, Position2Def):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/DatumDef'}
 
-    def __init__(self, band=Undefined, datum=Undefined, type=Undefined, **kwds):
-        super(DatumDef, self).__init__(band=band, datum=datum, type=type, **kwds)
+    def __init__(self, bandPosition=Undefined, datum=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(DatumDef, self).__init__(bandPosition=bandPosition, datum=datum, title=title, type=type,
+                                       **kwds)
 
 
 class PositionDatumDefBase(PolarDef):
@@ -10940,22 +12181,14 @@ class PositionDatumDefBase(PolarDef):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
         A constant value in data domain.
     scale : anyOf(:class:`Scale`, None)
         An object defining properties of the channel's scale, which is the function that
@@ -10976,17 +12209,23 @@ class PositionDatumDefBase(PolarDef):
         example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
         chart.
 
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
 
         **Default value:** ``zero`` for plots with all of the following conditions are true:
         (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
@@ -10995,70 +12234,102 @@ class PositionDatumDefBase(PolarDef):
 
         **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
         documentation.
-    type : :class:`Type`
-        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
-        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
-        be a ``"geojson"`` type for encoding `'geoshape'
-        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
 
-        Vega-Lite automatically infers data types in many cases as discussed below. However,
-        type is required for a field if: (1) the field is not nominal and the field encoding
-        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
-        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
-        scale for a field with ``bin`` or ``timeUnit``.
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
 
         **Default value:**
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/PositionDatumDefBase'}
 
-    def __init__(self, band=Undefined, datum=Undefined, scale=Undefined, stack=Undefined,
-                 type=Undefined, **kwds):
-        super(PositionDatumDefBase, self).__init__(band=band, datum=datum, scale=scale, stack=stack,
-                                                   type=type, **kwds)
+    def __init__(self, bandPosition=Undefined, datum=Undefined, scale=Undefined, stack=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
+        super(PositionDatumDefBase, self).__init__(bandPosition=bandPosition, datum=datum, scale=scale,
+                                                   stack=stack, title=title, type=type, **kwds)
 
 
 class PositionDef(VegaLiteSchema):
@@ -11077,7 +12348,7 @@ class PositionDatumDef(PositionDef):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     axis : anyOf(:class:`Axis`, None)
@@ -11089,19 +12360,11 @@ class PositionDatumDef(PositionDef):
 
         **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
         A constant value in data domain.
     impute : anyOf(:class:`ImputeParams`, None)
         An object defining the properties of the Impute Operation to be applied. The field
@@ -11130,17 +12393,23 @@ class PositionDatumDef(PositionDef):
         example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
         chart.
 
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
 
         **Default value:** ``zero`` for plots with all of the following conditions are true:
         (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
@@ -11149,6 +12418,26 @@ class PositionDatumDef(PositionDef):
 
         **See also:** `stack <https://vega.github.io/vega-lite/docs/stack.html>`__
         documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
     type : :class:`Type`
         The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
         ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
@@ -11165,54 +12454,67 @@ class PositionDatumDef(PositionDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/PositionDatumDef'}
 
-    def __init__(self, axis=Undefined, band=Undefined, datum=Undefined, impute=Undefined,
-                 scale=Undefined, stack=Undefined, type=Undefined, **kwds):
-        super(PositionDatumDef, self).__init__(axis=axis, band=band, datum=datum, impute=impute,
-                                               scale=scale, stack=stack, type=type, **kwds)
+    def __init__(self, axis=Undefined, bandPosition=Undefined, datum=Undefined, impute=Undefined,
+                 scale=Undefined, stack=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(PositionDatumDef, self).__init__(axis=axis, bandPosition=bandPosition, datum=datum,
+                                               impute=impute, scale=scale, stack=stack, title=title,
+                                               type=type, **kwds)
 
 
 class PositionFieldDef(PositionDef):
@@ -11220,7 +12522,7 @@ class PositionFieldDef(PositionDef):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -11240,26 +12542,19 @@ class PositionFieldDef(PositionDef):
 
         **See also:** `axis <https://vega.github.io/vega-lite/docs/axis.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -11314,25 +12609,31 @@ class PositionFieldDef(PositionDef):
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -11347,17 +12648,23 @@ class PositionFieldDef(PositionDef):
         example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
         chart.
 
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
 
         **Default value:** ``zero`` for plots with all of the following conditions are true:
         (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
@@ -11391,7 +12698,7 @@ class PositionFieldDef(PositionDef):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -11411,57 +12718,69 @@ class PositionFieldDef(PositionDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/PositionFieldDef'}
 
-    def __init__(self, aggregate=Undefined, axis=Undefined, band=Undefined, bin=Undefined,
+    def __init__(self, aggregate=Undefined, axis=Undefined, bandPosition=Undefined, bin=Undefined,
                  field=Undefined, impute=Undefined, scale=Undefined, sort=Undefined, stack=Undefined,
                  timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(PositionFieldDef, self).__init__(aggregate=aggregate, axis=axis, band=band, bin=bin,
-                                               field=field, impute=impute, scale=scale, sort=sort,
-                                               stack=stack, timeUnit=timeUnit, title=title, type=type,
-                                               **kwds)
+        super(PositionFieldDef, self).__init__(aggregate=aggregate, axis=axis,
+                                               bandPosition=bandPosition, bin=bin, field=field,
+                                               impute=impute, scale=scale, sort=sort, stack=stack,
+                                               timeUnit=timeUnit, title=title, type=type, **kwds)
 
 
 class PositionFieldDefBase(PolarDef):
@@ -11469,7 +12788,7 @@ class PositionFieldDefBase(PolarDef):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -11480,26 +12799,19 @@ class PositionFieldDefBase(PolarDef):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -11546,25 +12858,31 @@ class PositionFieldDefBase(PolarDef):
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -11579,17 +12897,23 @@ class PositionFieldDefBase(PolarDef):
         example, ``stack`` of ``y`` can be used to customize stacking for a vertical bar
         chart.
 
-        ``stack`` can be one of the following values: - ``"zero"`` or `true`: stacking with
-        baseline offset at zero value of the scale (for creating typical stacked
-        [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
-        <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart). - ``"normalize"``
-        - stacking with normalized domain (for creating `normalized stacked bar and area
-        charts <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__.
-        :raw-html:`<br/>` - ``"center"`` - stacking with center baseline (for `streamgraph
-        <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ). - ``null`` or
-        ``false`` - No-stacking. This will produce layered `bar
-        <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
-        chart.
+        ``stack`` can be one of the following values:
+
+
+        * ``"zero"`` or `true`: stacking with baseline offset at zero value of the scale
+          (for creating typical stacked
+          [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and `area
+          <https://vega.github.io/vega-lite/docs/stack.html#area>`__ chart).
+        * ``"normalize"`` - stacking with normalized domain (for creating `normalized
+          stacked bar and area charts
+          <https://vega.github.io/vega-lite/docs/stack.html#normalized>`__ and pie charts
+          `with percentage tooltip
+          <https://vega.github.io/vega-lite/docs/arc.html#tooltip>`__ ). :raw-html:`<br/>`
+        * ``"center"`` - stacking with center baseline (for `streamgraph
+          <https://vega.github.io/vega-lite/docs/stack.html#streamgraph>`__ ).
+        * ``null`` or ``false`` - No-stacking. This will produce layered `bar
+          <https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart>`__ and area
+          chart.
 
         **Default value:** ``zero`` for plots with all of the following conditions are true:
         (1) the mark is ``bar``, ``area``, or ``arc`` ; (2) the stacked measure channel (x
@@ -11623,7 +12947,7 @@ class PositionFieldDefBase(PolarDef):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -11643,56 +12967,69 @@ class PositionFieldDefBase(PolarDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/PositionFieldDefBase'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
                  scale=Undefined, sort=Undefined, stack=Undefined, timeUnit=Undefined, title=Undefined,
                  type=Undefined, **kwds):
-        super(PositionFieldDefBase, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                                   scale=scale, sort=sort, stack=stack,
-                                                   timeUnit=timeUnit, title=title, type=type, **kwds)
+        super(PositionFieldDefBase, self).__init__(aggregate=aggregate, bandPosition=bandPosition,
+                                                   bin=bin, field=field, scale=scale, sort=sort,
+                                                   stack=stack, timeUnit=timeUnit, title=title,
+                                                   type=type, **kwds)
 
 
 class PositionValueDef(PolarDef, Position2Def, PositionDef):
@@ -11702,7 +13039,7 @@ class PositionValueDef(PolarDef, Position2Def, PositionDef):
     Definition object for a constant value (primitive value or gradient definition) of an
     encoding channel.
 
-    Attributes
+    Parameters
     ----------
 
     value : anyOf(float, string, string, :class:`ExprRef`)
@@ -11733,7 +13070,7 @@ class LogicalAndPredicate(PredicateComposition):
 
     Mapping(required=[and])
 
-    Attributes
+    Parameters
     ----------
 
     and : List(:class:`PredicateComposition`)
@@ -11750,7 +13087,7 @@ class LogicalNotPredicate(PredicateComposition):
 
     Mapping(required=[not])
 
-    Attributes
+    Parameters
     ----------
 
     not : :class:`PredicateComposition`
@@ -11767,7 +13104,7 @@ class LogicalOrPredicate(PredicateComposition):
 
     Mapping(required=[or])
 
-    Attributes
+    Parameters
     ----------
 
     or : List(:class:`PredicateComposition`)
@@ -11785,7 +13122,7 @@ class Predicate(PredicateComposition):
     anyOf(:class:`FieldEqualPredicate`, :class:`FieldRangePredicate`,
     :class:`FieldOneOfPredicate`, :class:`FieldLTPredicate`, :class:`FieldGTPredicate`,
     :class:`FieldLTEPredicate`, :class:`FieldGTEPredicate`, :class:`FieldValidPredicate`,
-    :class:`SelectionPredicate`, string)
+    :class:`ParameterPredicate`, string)
     """
     _schema = {'$ref': '#/definitions/Predicate'}
 
@@ -11798,7 +13135,7 @@ class FieldEqualPredicate(Predicate):
 
     Mapping(required=[equal, field])
 
-    Attributes
+    Parameters
     ----------
 
     equal : anyOf(string, float, boolean, :class:`DateTime`, :class:`ExprRef`)
@@ -11819,7 +13156,7 @@ class FieldGTEPredicate(Predicate):
 
     Mapping(required=[field, gte])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -11840,7 +13177,7 @@ class FieldGTPredicate(Predicate):
 
     Mapping(required=[field, gt])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -11861,7 +13198,7 @@ class FieldLTEPredicate(Predicate):
 
     Mapping(required=[field, lte])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -11882,7 +13219,7 @@ class FieldLTPredicate(Predicate):
 
     Mapping(required=[field, lt])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -11903,7 +13240,7 @@ class FieldOneOfPredicate(Predicate):
 
     Mapping(required=[field, oneOf])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -11925,13 +13262,12 @@ class FieldRangePredicate(Predicate):
 
     Mapping(required=[field, range])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
         Field to be tested.
-    range : anyOf(List(anyOf(float, :class:`DateTime`, None, :class:`ExprRef`)),
-    :class:`ExprRef`)
+    range : anyOf(List(anyOf(float, :class:`DateTime`, None, :class:`ExprRef`)), :class:`ExprRef`)
         An array of inclusive minimum and maximum values for a field value of a data item to
         be included in the filtered data.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
@@ -11948,7 +13284,7 @@ class FieldValidPredicate(Predicate):
 
     Mapping(required=[field, valid])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -11966,94 +13302,134 @@ class FieldValidPredicate(Predicate):
         super(FieldValidPredicate, self).__init__(field=field, valid=valid, timeUnit=timeUnit, **kwds)
 
 
+class ParameterPredicate(Predicate):
+    """ParameterPredicate schema wrapper
+
+    Mapping(required=[param])
+
+    Parameters
+    ----------
+
+    param : :class:`ParameterName`
+        Filter using a parameter name.
+    empty : boolean
+        For selection parameters, the predicate of empty selections returns true by default.
+        Override this behavior, by setting this property ``empty: false``.
+    """
+    _schema = {'$ref': '#/definitions/ParameterPredicate'}
+
+    def __init__(self, param=Undefined, empty=Undefined, **kwds):
+        super(ParameterPredicate, self).__init__(param=param, empty=empty, **kwds)
+
+
 class Projection(VegaLiteSchema):
     """Projection schema wrapper
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    center : :class:`Vector2number`
+    center : anyOf(:class:`Vector2number`, :class:`ExprRef`)
         The projection's center, a two-element array of longitude and latitude in degrees.
 
         **Default value:** ``[0, 0]``
-    clipAngle : float
+    clipAngle : anyOf(float, :class:`ExprRef`)
         The projection's clipping circle radius to the specified angle in degrees. If
         ``null``, switches to `antimeridian <http://bl.ocks.org/mbostock/3788999>`__ cutting
         rather than small-circle clipping.
-    clipExtent : :class:`Vector2Vector2number`
+    clipExtent : anyOf(:class:`Vector2Vector2number`, :class:`ExprRef`)
         The projection's viewport clip extent to the specified bounds in pixels. The extent
         bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is the
         left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is the
         bottom. If ``null``, no viewport clipping is performed.
-    coefficient : float
-
-    distance : float
-
-    extent : :class:`Vector2Vector2number`
-
-    fit : anyOf(:class:`Fit`, List(:class:`Fit`))
-
-    fraction : float
-
-    lobes : float
-
-    parallel : float
+    coefficient : anyOf(float, :class:`ExprRef`)
+        The coefficient parameter for the ``hammer`` projection.
 
-    parallels : List(float)
+        **Default value:** ``2``
+    distance : anyOf(float, :class:`ExprRef`)
+        For the ``satellite`` projection, the distance from the center of the sphere to the
+        point of view, as a proportion of the sphere’s radius. The recommended maximum clip
+        angle for a given ``distance`` is acos(1 / distance) converted to degrees. If tilt
+        is also applied, then more conservative clipping may be necessary.
+
+        **Default value:** ``2.0``
+    extent : anyOf(:class:`Vector2Vector2number`, :class:`ExprRef`)
+
+    fit : anyOf(:class:`Fit`, List(:class:`Fit`), :class:`ExprRef`)
+
+    fraction : anyOf(float, :class:`ExprRef`)
+        The fraction parameter for the ``bottomley`` projection.
+
+        **Default value:** ``0.5``, corresponding to a sin(ψ) where ψ = π/6.
+    lobes : anyOf(float, :class:`ExprRef`)
+        The number of lobes in projections that support multi-lobe views: ``berghaus``,
+        ``gingery``, or ``healpix``. The default value varies based on the projection type.
+    parallel : anyOf(float, :class:`ExprRef`)
+        The parallel parameter for projections that support it: ``armadillo``, ``bonne``,
+        ``craig``, ``cylindricalEqualArea``, ``cylindricalStereographic``,
+        ``hammerRetroazimuthal``, ``loximuthal``, or ``rectangularPolyconic``. The default
+        value varies based on the projection type.
+    parallels : anyOf(List(float), :class:`ExprRef`)
         For conic projections, the `two standard parallels
         <https://en.wikipedia.org/wiki/Map_projection#Conic>`__ that define the map layout.
         The default depends on the specific conic projection used.
-    pointRadius : float
+    pointRadius : anyOf(float, :class:`ExprRef`)
         The default radius (in pixels) to use when drawing GeoJSON ``Point`` and
         ``MultiPoint`` geometries. This parameter sets a constant default value. To modify
         the point radius in response to data, see the corresponding parameter of the GeoPath
         and GeoShape transforms.
 
         **Default value:** ``4.5``
-    precision : float
+    precision : anyOf(float, :class:`ExprRef`)
         The threshold for the projection's `adaptive resampling
         <http://bl.ocks.org/mbostock/3795544>`__ to the specified value in pixels. This
         value corresponds to the `Douglas–Peucker distance
         <http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm>`__.
         If precision is not specified, returns the projection's current resampling precision
         which defaults to ``√0.5 ≅ 0.70710…``.
-    radius : float
-
-    ratio : float
-
-    reflectX : boolean
-
-    reflectY : boolean
-
-    rotate : anyOf(:class:`Vector2number`, :class:`Vector3number`)
+    radius : anyOf(float, :class:`ExprRef`)
+        The radius parameter for the ``airy`` or ``gingery`` projection. The default value
+        varies based on the projection type.
+    ratio : anyOf(float, :class:`ExprRef`)
+        The ratio parameter for the ``hill``, ``hufnagel``, or ``wagner`` projections. The
+        default value varies based on the projection type.
+    reflectX : anyOf(boolean, :class:`ExprRef`)
+        Sets whether or not the x-dimension is reflected (negated) in the output.
+    reflectY : anyOf(boolean, :class:`ExprRef`)
+        Sets whether or not the y-dimension is reflected (negated) in the output.
+    rotate : anyOf(anyOf(:class:`Vector2number`, :class:`Vector3number`), :class:`ExprRef`)
         The projection's three-axis rotation to the specified angles, which must be a two-
         or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying the
         rotation angles in degrees about each spherical axis. (These correspond to yaw,
         pitch and roll.)
 
         **Default value:** ``[0, 0, 0]``
-    scale : float
+    scale : anyOf(float, :class:`ExprRef`)
         The projection’s scale (zoom) factor, overriding automatic fitting. The default
         scale is projection-specific. The scale factor corresponds linearly to the distance
         between projected points; however, scale factor values are not equivalent across
         projections.
-    size : :class:`Vector2number`
-
-    spacing : float
+    size : anyOf(:class:`Vector2number`, :class:`ExprRef`)
+        Used in conjunction with fit, provides the width and height in pixels of the area to
+        which the projection should be automatically fit.
+    spacing : anyOf(float, :class:`ExprRef`)
+        The spacing parameter for the ``lagrange`` projection.
 
-    tilt : float
+        **Default value:** ``0.5``
+    tilt : anyOf(float, :class:`ExprRef`)
+        The tilt angle (in degrees) for the ``satellite`` projection.
 
-    translate : :class:`Vector2number`
+        **Default value:** ``0``.
+    translate : anyOf(:class:`Vector2number`, :class:`ExprRef`)
         The projection’s translation offset as a two-element array ``[tx, ty]``.
-    type : :class:`ProjectionType`
+    type : anyOf(:class:`ProjectionType`, :class:`ExprRef`)
         The cartographic projection to use. This value is case-insensitive, for example
         ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all
         valid projection types `in the documentation
         <https://vega.github.io/vega-lite/docs/projection.html#projection-types>`__.
 
-        **Default value:** ``mercator``
+        **Default value:** ``equalEarth``
     """
     _schema = {'$ref': '#/definitions/Projection'}
 
@@ -12079,89 +13455,109 @@ class ProjectionConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    center : :class:`Vector2number`
+    center : anyOf(:class:`Vector2number`, :class:`ExprRef`)
         The projection's center, a two-element array of longitude and latitude in degrees.
 
         **Default value:** ``[0, 0]``
-    clipAngle : float
+    clipAngle : anyOf(float, :class:`ExprRef`)
         The projection's clipping circle radius to the specified angle in degrees. If
         ``null``, switches to `antimeridian <http://bl.ocks.org/mbostock/3788999>`__ cutting
         rather than small-circle clipping.
-    clipExtent : :class:`Vector2Vector2number`
+    clipExtent : anyOf(:class:`Vector2Vector2number`, :class:`ExprRef`)
         The projection's viewport clip extent to the specified bounds in pixels. The extent
         bounds are specified as an array ``[[x0, y0], [x1, y1]]``, where ``x0`` is the
         left-side of the viewport, ``y0`` is the top, ``x1`` is the right and ``y1`` is the
         bottom. If ``null``, no viewport clipping is performed.
-    coefficient : float
-
-    distance : float
-
-    extent : :class:`Vector2Vector2number`
-
-    fit : anyOf(:class:`Fit`, List(:class:`Fit`))
-
-    fraction : float
+    coefficient : anyOf(float, :class:`ExprRef`)
+        The coefficient parameter for the ``hammer`` projection.
 
-    lobes : float
-
-    parallel : float
-
-    parallels : List(float)
+        **Default value:** ``2``
+    distance : anyOf(float, :class:`ExprRef`)
+        For the ``satellite`` projection, the distance from the center of the sphere to the
+        point of view, as a proportion of the sphere’s radius. The recommended maximum clip
+        angle for a given ``distance`` is acos(1 / distance) converted to degrees. If tilt
+        is also applied, then more conservative clipping may be necessary.
+
+        **Default value:** ``2.0``
+    extent : anyOf(:class:`Vector2Vector2number`, :class:`ExprRef`)
+
+    fit : anyOf(:class:`Fit`, List(:class:`Fit`), :class:`ExprRef`)
+
+    fraction : anyOf(float, :class:`ExprRef`)
+        The fraction parameter for the ``bottomley`` projection.
+
+        **Default value:** ``0.5``, corresponding to a sin(ψ) where ψ = π/6.
+    lobes : anyOf(float, :class:`ExprRef`)
+        The number of lobes in projections that support multi-lobe views: ``berghaus``,
+        ``gingery``, or ``healpix``. The default value varies based on the projection type.
+    parallel : anyOf(float, :class:`ExprRef`)
+        The parallel parameter for projections that support it: ``armadillo``, ``bonne``,
+        ``craig``, ``cylindricalEqualArea``, ``cylindricalStereographic``,
+        ``hammerRetroazimuthal``, ``loximuthal``, or ``rectangularPolyconic``. The default
+        value varies based on the projection type.
+    parallels : anyOf(List(float), :class:`ExprRef`)
         For conic projections, the `two standard parallels
         <https://en.wikipedia.org/wiki/Map_projection#Conic>`__ that define the map layout.
         The default depends on the specific conic projection used.
-    pointRadius : float
+    pointRadius : anyOf(float, :class:`ExprRef`)
         The default radius (in pixels) to use when drawing GeoJSON ``Point`` and
         ``MultiPoint`` geometries. This parameter sets a constant default value. To modify
         the point radius in response to data, see the corresponding parameter of the GeoPath
         and GeoShape transforms.
 
         **Default value:** ``4.5``
-    precision : float
+    precision : anyOf(float, :class:`ExprRef`)
         The threshold for the projection's `adaptive resampling
         <http://bl.ocks.org/mbostock/3795544>`__ to the specified value in pixels. This
         value corresponds to the `Douglas–Peucker distance
         <http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm>`__.
         If precision is not specified, returns the projection's current resampling precision
         which defaults to ``√0.5 ≅ 0.70710…``.
-    radius : float
-
-    ratio : float
-
-    reflectX : boolean
-
-    reflectY : boolean
-
-    rotate : anyOf(:class:`Vector2number`, :class:`Vector3number`)
+    radius : anyOf(float, :class:`ExprRef`)
+        The radius parameter for the ``airy`` or ``gingery`` projection. The default value
+        varies based on the projection type.
+    ratio : anyOf(float, :class:`ExprRef`)
+        The ratio parameter for the ``hill``, ``hufnagel``, or ``wagner`` projections. The
+        default value varies based on the projection type.
+    reflectX : anyOf(boolean, :class:`ExprRef`)
+        Sets whether or not the x-dimension is reflected (negated) in the output.
+    reflectY : anyOf(boolean, :class:`ExprRef`)
+        Sets whether or not the y-dimension is reflected (negated) in the output.
+    rotate : anyOf(anyOf(:class:`Vector2number`, :class:`Vector3number`), :class:`ExprRef`)
         The projection's three-axis rotation to the specified angles, which must be a two-
         or three-element array of numbers [ ``lambda``, ``phi``, ``gamma`` ] specifying the
         rotation angles in degrees about each spherical axis. (These correspond to yaw,
         pitch and roll.)
 
         **Default value:** ``[0, 0, 0]``
-    scale : float
+    scale : anyOf(float, :class:`ExprRef`)
         The projection’s scale (zoom) factor, overriding automatic fitting. The default
         scale is projection-specific. The scale factor corresponds linearly to the distance
         between projected points; however, scale factor values are not equivalent across
         projections.
-    size : :class:`Vector2number`
-
-    spacing : float
+    size : anyOf(:class:`Vector2number`, :class:`ExprRef`)
+        Used in conjunction with fit, provides the width and height in pixels of the area to
+        which the projection should be automatically fit.
+    spacing : anyOf(float, :class:`ExprRef`)
+        The spacing parameter for the ``lagrange`` projection.
 
-    tilt : float
+        **Default value:** ``0.5``
+    tilt : anyOf(float, :class:`ExprRef`)
+        The tilt angle (in degrees) for the ``satellite`` projection.
 
-    translate : :class:`Vector2number`
+        **Default value:** ``0``.
+    translate : anyOf(:class:`Vector2number`, :class:`ExprRef`)
         The projection’s translation offset as a two-element array ``[tx, ty]``.
-    type : :class:`ProjectionType`
+    type : anyOf(:class:`ProjectionType`, :class:`ExprRef`)
         The cartographic projection to use. This value is case-insensitive, for example
         ``"albers"`` and ``"Albers"`` indicate the same projection type. You can find all
         valid projection types `in the documentation
         <https://vega.github.io/vega-lite/docs/projection.html#projection-types>`__.
 
-        **Default value:** ``mercator``
+        **Default value:** ``equalEarth``
     """
     _schema = {'$ref': '#/definitions/ProjectionConfig'}
 
@@ -12202,7 +13598,7 @@ class RadialGradient(Gradient):
 
     Mapping(required=[gradient, stops])
 
-    Attributes
+    Parameters
     ----------
 
     gradient : string
@@ -12255,7 +13651,7 @@ class RangeConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     category : anyOf(:class:`RangeScheme`, List(:class:`Color`))
@@ -12334,7 +13730,7 @@ class RectConfig(AnyMarkConfig):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(:class:`Align`, :class:`ExprRef`)
@@ -12343,15 +13739,25 @@ class RectConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     angle : anyOf(float, :class:`ExprRef`)
-
+        The rotation angle of the text, in degrees.
     aria : anyOf(boolean, :class:`ExprRef`)
-
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
     ariaRole : anyOf(string, :class:`ExprRef`)
-
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
     ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
     aspect : anyOf(boolean, :class:`ExprRef`)
-
+        Whether to keep aspect ratio of image marks.
     baseline : anyOf(:class:`TextBaseline`, :class:`ExprRef`)
         For text marks, the vertical text baseline. One of ``"alphabetic"`` (default),
         ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, ``"line-bottom"``, or an
@@ -12369,55 +13775,87 @@ class RectConfig(AnyMarkConfig):
 
         **Default value:** ``1``
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
         Default color.
 
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     continuousBandSize : float
         The default size of the bars on continuous scales.
 
         **Default value:** ``5``
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
-    discreteBandSize : float
+        **Default value:** ``"ltr"``
+    discreteBandSize : anyOf(float, :class:`RelativeBandSize`)
         The default size of the bars with discrete dimensions. If unspecified, the default
         size is  ``step-2``, which provides 2 pixel offset between bars.
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     endAngle : anyOf(float, :class:`ExprRef`)
-
+        The end angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -12429,34 +13867,68 @@ class RectConfig(AnyMarkConfig):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
     height : anyOf(float, :class:`ExprRef`)
-
+        Height of the marks.
     href : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -12467,65 +13939,108 @@ class RectConfig(AnyMarkConfig):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     radius : anyOf(float, :class:`ExprRef`)
         For arc mark, the primary (outer) radius in pixels.
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
+
+
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
 
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
+
+
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
 
-    startAngle : anyOf(float, :class:`ExprRef`)
 
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
+    startAngle : anyOf(float, :class:`ExprRef`)
+        The start angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -12535,32 +14050,33 @@ class RectConfig(AnyMarkConfig):
     theta2 : anyOf(float, :class:`ExprRef`)
         The end angle of arc marks in radians. A value of 0 indicates up or “north”,
         increasing values proceed clockwise.
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        The URL of the image file for image marks.
     width : anyOf(float, :class:`ExprRef`)
-
+        Width of the marks.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -12603,8 +14119,8 @@ class RectConfig(AnyMarkConfig):
                  strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
                  strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined,
                  strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined,
-                 theta=Undefined, theta2=Undefined, timeUnitBand=Undefined,
-                 timeUnitBandPosition=Undefined, tooltip=Undefined, url=Undefined, width=Undefined,
+                 theta=Undefined, theta2=Undefined, timeUnitBandPosition=Undefined,
+                 timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined,
                  x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds):
         super(RectConfig, self).__init__(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                                          ariaRoleDescription=ariaRoleDescription, aspect=aspect,
@@ -12631,9 +14147,27 @@ class RectConfig(AnyMarkConfig):
                                          strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                                          strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
                                          tension=tension, text=text, theta=theta, theta2=theta2,
-                                         timeUnitBand=timeUnitBand,
-                                         timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
-                                         url=url, width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+                                         timeUnitBandPosition=timeUnitBandPosition,
+                                         timeUnitBandSize=timeUnitBandSize, tooltip=tooltip, url=url,
+                                         width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+
+
+class RelativeBandSize(VegaLiteSchema):
+    """RelativeBandSize schema wrapper
+
+    Mapping(required=[band])
+
+    Parameters
+    ----------
+
+    band : float
+        The relative band size.  For example ``0.5`` means half of the band scale's band
+        width.
+    """
+    _schema = {'$ref': '#/definitions/RelativeBandSize'}
+
+    def __init__(self, band=Undefined, **kwds):
+        super(RelativeBandSize, self).__init__(band=band, **kwds)
 
 
 class RepeatMapping(VegaLiteSchema):
@@ -12641,7 +14175,7 @@ class RepeatMapping(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     column : List(string)
@@ -12661,7 +14195,7 @@ class RepeatRef(Field):
     Mapping(required=[repeat])
     Reference to a repeated value.
 
-    Attributes
+    Parameters
     ----------
 
     repeat : enum('row', 'column', 'repeat', 'layer')
@@ -12681,7 +14215,7 @@ class Resolve(VegaLiteSchema):
     mapping from ``scale``, ``axis``, and ``legend`` to a mapping from channels to resolutions.
     Scales and guides can be resolved to be ``"independent"`` or ``"shared"``.
 
-    Attributes
+    Parameters
     ----------
 
     axis : :class:`AxisResolveMap`
@@ -12713,7 +14247,7 @@ class RowColLayoutAlign(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     column : :class:`LayoutAlign`
@@ -12732,7 +14266,7 @@ class RowColboolean(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     column : boolean
@@ -12751,7 +14285,7 @@ class RowColnumber(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     column : float
@@ -12770,7 +14304,7 @@ class RowColumnEncodingFieldDef(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -12787,33 +14321,27 @@ class RowColumnEncodingFieldDef(VegaLiteSchema):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
         **Default value:** ``"all"``.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -12846,7 +14374,7 @@ class RowColumnEncodingFieldDef(VegaLiteSchema):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    header : :class:`Header`
+    header : anyOf(:class:`Header`, None)
         An object defining properties of a facet's header.
     sort : anyOf(:class:`SortArray`, :class:`SortOrder`, :class:`EncodingSortField`, None)
         Sort order for the encoded field.
@@ -12854,18 +14382,23 @@ class RowColumnEncodingFieldDef(VegaLiteSchema):
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -12901,7 +14434,7 @@ class RowColumnEncodingFieldDef(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -12921,58 +14454,70 @@ class RowColumnEncodingFieldDef(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/RowColumnEncodingFieldDef'}
 
-    def __init__(self, aggregate=Undefined, align=Undefined, band=Undefined, bin=Undefined,
+    def __init__(self, aggregate=Undefined, align=Undefined, bandPosition=Undefined, bin=Undefined,
                  center=Undefined, field=Undefined, header=Undefined, sort=Undefined, spacing=Undefined,
                  timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(RowColumnEncodingFieldDef, self).__init__(aggregate=aggregate, align=align, band=band,
-                                                        bin=bin, center=center, field=field,
-                                                        header=header, sort=sort, spacing=spacing,
-                                                        timeUnit=timeUnit, title=title, type=type,
-                                                        **kwds)
+        super(RowColumnEncodingFieldDef, self).__init__(aggregate=aggregate, align=align,
+                                                        bandPosition=bandPosition, bin=bin,
+                                                        center=center, field=field, header=header,
+                                                        sort=sort, spacing=spacing, timeUnit=timeUnit,
+                                                        title=title, type=type, **kwds)
 
 
 class Scale(VegaLiteSchema):
@@ -12980,7 +14525,7 @@ class Scale(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(float, :class:`ExprRef`)
@@ -12995,15 +14540,19 @@ class Scale(VegaLiteSchema):
         The logarithm base of the ``log`` scale (default ``10`` ).
     bins : :class:`ScaleBins`
         Bin boundaries can be provided to scales as either an explicit array of bin
-        boundaries or as a bin specification object. The legal values are: - An `array
-        <../types/#Array>`__ literal of bin boundary values. For example, ``[0, 5, 10, 15,
-        20]``. The array must include both starting and ending boundaries. The previous
-        example uses five values to indicate a total of four bin intervals: [0-5), [5-10),
-        [10-15), [15-20]. Array literals may include signal references as elements. - A `bin
-        specification object <https://vega.github.io/vega-lite/docs/scale.html#bins>`__ that
-        indicates the bin *step* size, and optionally the *start* and *stop* boundaries. -
-        An array of bin boundaries over the scale domain. If provided, axes and legends will
-        use the bin boundaries to inform the choice of tick marks and text labels.
+        boundaries or as a bin specification object. The legal values are:
+
+
+        * An `array <../types/#Array>`__ literal of bin boundary values. For example, ``[0,
+          5, 10, 15, 20]``. The array must include both starting and ending boundaries. The
+          previous example uses five values to indicate a total of four bin intervals:
+          [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as
+          elements.
+        * A `bin specification object
+          <https://vega.github.io/vega-lite/docs/scale.html#bins>`__ that indicates the bin
+          *step* size, and optionally the *start* and *stop* boundaries.
+        * An array of bin boundaries over the scale domain. If provided, axes and legends
+          will use the bin boundaries to inform the choice of tick marks and text labels.
     clamp : anyOf(boolean, :class:`ExprRef`)
         If ``true``, values that exceed the data domain are clamped to either the minimum or
         maximum range value
@@ -13016,22 +14565,20 @@ class Scale(VegaLiteSchema):
         ``symlog`` scales.
 
         **Default value:** ``1``
-    domain : anyOf(List(anyOf(None, string, float, boolean, :class:`DateTime`,
-    :class:`ExprRef`)), string, :class:`SelectionExtent`, :class:`DomainUnionWith`,
-    :class:`ExprRef`)
+    domain : anyOf(List(anyOf(None, string, float, boolean, :class:`DateTime`, :class:`ExprRef`)), string, :class:`ParameterExtent`, :class:`DomainUnionWith`, :class:`ExprRef`)
         Customized domain values in the form of constant values or dynamic values driven by
-        a selection.
+        a parameter.
 
         1) Constant ``domain`` for *quantitative* fields can take one of the following
         forms:
 
 
         * A two-element array with minimum and maximum values. To create a diverging scale,
-          this two-element array can be combined with the ``domainMid`` property. - An array
-          with more than two entries, for `Piecewise quantitative scales
-          <https://vega.github.io/vega-lite/docs/scale.html#piecewise>`__. - A string value
-          ``"unaggregated"``, if the input field is aggregated, to indicate that the domain
-          should include the raw data values prior to the aggregation.
+          this two-element array can be combined with the ``domainMid`` property.
+        * An array with more than two entries, for `Piecewise quantitative scales
+          <https://vega.github.io/vega-lite/docs/scale.html#piecewise>`__.
+        * A string value ``"unaggregated"``, if the input field is aggregated, to indicate
+          that the domain should include the raw data values prior to the aggregation.
 
         2) Constant ``domain`` for *temporal* fields can be a two-element array with minimum
         and maximum values, in the form of either timestamps or the `DateTime definition
@@ -13046,7 +14593,7 @@ class Scale(VegaLiteSchema):
         means that the scale domain always includes ``[0, 100]``, but will include other
         values in the fields beyond ``[0, 100]``.
 
-        5) Domain can also takes an object defining a field or encoding of a selection that
+        5) Domain can also takes an object defining a field or encoding of a parameter that
         `interactively determines
         <https://vega.github.io/vega-lite/docs/selection.html#scale-domains>`__ the scale
         domain.
@@ -13065,8 +14612,7 @@ class Scale(VegaLiteSchema):
         property is only intended for use with scales having continuous domains.
     exponent : anyOf(float, :class:`ExprRef`)
         The exponent of the ``pow`` scale.
-    interpolate : anyOf(:class:`ScaleInterpolateEnum`, :class:`ExprRef`,
-    :class:`ScaleInterpolateParams`)
+    interpolate : anyOf(:class:`ScaleInterpolateEnum`, :class:`ExprRef`, :class:`ScaleInterpolateParams`)
         The interpolation method for range values. By default, a general interpolator for
         numbers, dates, strings and colors (in HCL space) is used. For color ranges, this
         property allows interpolation in alternative color spaces. Legal values include
@@ -13079,8 +14625,7 @@ class Scale(VegaLiteSchema):
 
 
         * **Default value:** ``hcl``
-    nice : anyOf(boolean, float, :class:`TimeInterval`, :class:`TimeIntervalStep`,
-    :class:`ExprRef`)
+    nice : anyOf(boolean, float, :class:`TimeInterval`, :class:`TimeIntervalStep`, :class:`ExprRef`)
         Extending the domain so that it starts and ends on nice round values. This method
         typically modifies the scale’s domain, and may only extend the bounds to the nearest
         round value. Nicing is useful if the domain is computed from data and may be
@@ -13100,7 +14645,8 @@ class Scale(VegaLiteSchema):
         a desired number of interval steps. Here, the domain would snap to quarter (Jan,
         Apr, Jul, Oct) boundaries.
 
-        **Default value:** ``true`` for unbinned *quantitative* fields; ``false`` otherwise.
+        **Default value:** ``true`` for unbinned *quantitative* fields without explicit
+        domain bounds; ``false`` otherwise.
     padding : anyOf(float, :class:`ExprRef`)
         For * `continuous <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ *
         scales, expands the scale domain to accommodate the specified number of pixels on
@@ -13138,8 +14684,7 @@ class Scale(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/scale.html#config>`__ 's ``bandPaddingOuter``
         for band scales and ``pointPadding`` for point scales. By default, Vega-Lite sets
         outer padding such that *width/height = number of unique values * step*.
-    range : anyOf(:class:`RangeEnum`, List(anyOf(float, string, List(float), :class:`ExprRef`)),
-    Mapping(required=[field]))
+    range : anyOf(:class:`RangeEnum`, List(anyOf(float, string, List(float), :class:`ExprRef`)), :class:`FieldRange`)
         The range of the scale. One of:
 
 
@@ -13266,7 +14811,7 @@ class ScaleBinParams(ScaleBins):
 
     Mapping(required=[step])
 
-    Attributes
+    Parameters
     ----------
 
     step : float
@@ -13291,19 +14836,33 @@ class ScaleConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     bandPaddingInner : anyOf(float, :class:`ExprRef`)
-        Default inner padding for ``x`` and ``y`` band-ordinal scales.
+        Default inner padding for ``x`` and ``y`` band scales.
+
+        **Default value:**
+
 
-        **Default value:** - ``barBandPaddingInner`` for bar marks ( ``0.1`` by default) -
-        ``rectBandPaddingInner`` for rect and other marks ( ``0`` by default)
+        * ``nestedOffsetPaddingInner`` for x/y scales with nested x/y offset scales.
+        * ``barBandPaddingInner`` for bar marks ( ``0.1`` by default)
+        * ``rectBandPaddingInner`` for rect and other marks ( ``0`` by default)
     bandPaddingOuter : anyOf(float, :class:`ExprRef`)
-        Default outer padding for ``x`` and ``y`` band-ordinal scales.
+        Default outer padding for ``x`` and ``y`` band scales.
 
         **Default value:** ``paddingInner/2`` (which makes *width/height = number of unique
         values * step* )
+    bandWithNestedOffsetPaddingInner : anyOf(float, :class:`ExprRef`)
+        Default inner padding for ``x`` and ``y`` band scales with nested ``xOffset`` and
+        ``yOffset`` encoding.
+
+        **Default value:** ``0.2``
+    bandWithNestedOffsetPaddingOuter : anyOf(float, :class:`ExprRef`)
+        Default outer padding for ``x`` and ``y`` band scales with nested ``xOffset`` and
+        ``yOffset`` encoding.
+
+        **Default value:** ``0.2``
     barBandPaddingInner : anyOf(float, :class:`ExprRef`)
         Default inner padding for ``x`` and ``y`` band-ordinal scales of ``"bar"`` marks.
 
@@ -13312,10 +14871,10 @@ class ScaleConfig(VegaLiteSchema):
         If true, values that exceed the data domain are clamped to either the minimum or
         maximum range value
     continuousPadding : anyOf(float, :class:`ExprRef`)
-        Default padding for continuous scales.
+        Default padding for continuous x/y scales.
 
-        **Default:** ``5`` for continuous x-scale of a vertical bar and continuous y-scale
-        of a horizontal bar.; ``0`` otherwise.
+        **Default:** The bar width for continuous x-scale of a vertical bar and continuous
+        y-scale of a horizontal bar.; ``0`` otherwise.
     maxBandSize : float
         The default max value for mapping quantitative fields to bar's size/bandSize.
 
@@ -13358,6 +14917,14 @@ class ScaleConfig(VegaLiteSchema):
         of size for trail marks with zero=false.
 
         **Default value:** ``1``
+    offsetBandPaddingInner : anyOf(float, :class:`ExprRef`)
+        Default padding inner for xOffset/yOffset's band scales.
+
+        **Default Value:** ``0``
+    offsetBandPaddingOuter : anyOf(float, :class:`ExprRef`)
+        Default padding outer for xOffset/yOffset's band scales.
+
+        **Default Value:** ``0``
     pointPadding : anyOf(float, :class:`ExprRef`)
         Default outer padding for ``x`` and ``y`` point-ordinal scales.
 
@@ -13395,162 +14962,176 @@ class ScaleConfig(VegaLiteSchema):
         **Default value:** ``false``
     xReverse : anyOf(boolean, :class:`ExprRef`)
         Reverse x-scale by default (useful for right-to-left charts).
+    zero : boolean
+        Default ``scale.zero`` for `continuous
+        <https://vega.github.io/vega-lite/docs/scale.html#continuous>`__ scales except for
+        (1) x/y-scales of non-ranged bar or area charts and (2) size scales.
+
+        **Default value:** ``true``
     """
     _schema = {'$ref': '#/definitions/ScaleConfig'}
 
     def __init__(self, bandPaddingInner=Undefined, bandPaddingOuter=Undefined,
+                 bandWithNestedOffsetPaddingInner=Undefined, bandWithNestedOffsetPaddingOuter=Undefined,
                  barBandPaddingInner=Undefined, clamp=Undefined, continuousPadding=Undefined,
                  maxBandSize=Undefined, maxFontSize=Undefined, maxOpacity=Undefined, maxSize=Undefined,
                  maxStrokeWidth=Undefined, minBandSize=Undefined, minFontSize=Undefined,
                  minOpacity=Undefined, minSize=Undefined, minStrokeWidth=Undefined,
+                 offsetBandPaddingInner=Undefined, offsetBandPaddingOuter=Undefined,
                  pointPadding=Undefined, quantileCount=Undefined, quantizeCount=Undefined,
                  rectBandPaddingInner=Undefined, round=Undefined, useUnaggregatedDomain=Undefined,
-                 xReverse=Undefined, **kwds):
+                 xReverse=Undefined, zero=Undefined, **kwds):
         super(ScaleConfig, self).__init__(bandPaddingInner=bandPaddingInner,
                                           bandPaddingOuter=bandPaddingOuter,
+                                          bandWithNestedOffsetPaddingInner=bandWithNestedOffsetPaddingInner,
+                                          bandWithNestedOffsetPaddingOuter=bandWithNestedOffsetPaddingOuter,
                                           barBandPaddingInner=barBandPaddingInner, clamp=clamp,
                                           continuousPadding=continuousPadding, maxBandSize=maxBandSize,
                                           maxFontSize=maxFontSize, maxOpacity=maxOpacity,
                                           maxSize=maxSize, maxStrokeWidth=maxStrokeWidth,
                                           minBandSize=minBandSize, minFontSize=minFontSize,
                                           minOpacity=minOpacity, minSize=minSize,
-                                          minStrokeWidth=minStrokeWidth, pointPadding=pointPadding,
-                                          quantileCount=quantileCount, quantizeCount=quantizeCount,
+                                          minStrokeWidth=minStrokeWidth,
+                                          offsetBandPaddingInner=offsetBandPaddingInner,
+                                          offsetBandPaddingOuter=offsetBandPaddingOuter,
+                                          pointPadding=pointPadding, quantileCount=quantileCount,
+                                          quantizeCount=quantizeCount,
                                           rectBandPaddingInner=rectBandPaddingInner, round=round,
                                           useUnaggregatedDomain=useUnaggregatedDomain,
-                                          xReverse=xReverse, **kwds)
+                                          xReverse=xReverse, zero=zero, **kwds)
 
 
-class ScaleInterpolateEnum(VegaLiteSchema):
-    """ScaleInterpolateEnum schema wrapper
+class ScaleDatumDef(OffsetDef):
+    """ScaleDatumDef schema wrapper
 
-    enum('rgb', 'lab', 'hcl', 'hsl', 'hsl-long', 'hcl-long', 'cubehelix', 'cubehelix-long')
-    """
-    _schema = {'$ref': '#/definitions/ScaleInterpolateEnum'}
+    Mapping(required=[])
 
-    def __init__(self, *args):
-        super(ScaleInterpolateEnum, self).__init__(*args)
+    Parameters
+    ----------
 
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
+        A constant value in data domain.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
 
-class ScaleInterpolateParams(VegaLiteSchema):
-    """ScaleInterpolateParams schema wrapper
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
 
-    Mapping(required=[type])
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
 
-    Attributes
-    ----------
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
 
-    type : enum('rgb', 'cubehelix', 'cubehelix-long')
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
 
-    gamma : float
+        **Notes** :
 
-    """
-    _schema = {'$ref': '#/definitions/ScaleInterpolateParams'}
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
-    def __init__(self, type=Undefined, gamma=Undefined, **kwds):
-        super(ScaleInterpolateParams, self).__init__(type=type, gamma=gamma, **kwds)
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
+    type : :class:`Type`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
 
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
 
-class ScaleResolveMap(VegaLiteSchema):
-    """ScaleResolveMap schema wrapper
+        **Default value:**
 
-    Mapping(required=[])
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
-    Attributes
-    ----------
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
+    """
+    _schema = {'$ref': '#/definitions/ScaleDatumDef'}
 
-    angle : :class:`ResolveMode`
-
-    color : :class:`ResolveMode`
-
-    fill : :class:`ResolveMode`
-
-    fillOpacity : :class:`ResolveMode`
-
-    opacity : :class:`ResolveMode`
-
-    radius : :class:`ResolveMode`
-
-    shape : :class:`ResolveMode`
-
-    size : :class:`ResolveMode`
-
-    stroke : :class:`ResolveMode`
-
-    strokeDash : :class:`ResolveMode`
-
-    strokeOpacity : :class:`ResolveMode`
-
-    strokeWidth : :class:`ResolveMode`
-
-    theta : :class:`ResolveMode`
-
-    x : :class:`ResolveMode`
-
-    y : :class:`ResolveMode`
-
-    """
-    _schema = {'$ref': '#/definitions/ScaleResolveMap'}
-
-    def __init__(self, angle=Undefined, color=Undefined, fill=Undefined, fillOpacity=Undefined,
-                 opacity=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
-                 strokeDash=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, theta=Undefined,
-                 x=Undefined, y=Undefined, **kwds):
-        super(ScaleResolveMap, self).__init__(angle=angle, color=color, fill=fill,
-                                              fillOpacity=fillOpacity, opacity=opacity, radius=radius,
-                                              shape=shape, size=size, stroke=stroke,
-                                              strokeDash=strokeDash, strokeOpacity=strokeOpacity,
-                                              strokeWidth=strokeWidth, theta=theta, x=x, y=y, **kwds)
-
-
-class ScaleType(VegaLiteSchema):
-    """ScaleType schema wrapper
-
-    enum('linear', 'log', 'pow', 'sqrt', 'symlog', 'identity', 'sequential', 'time', 'utc',
-    'quantile', 'quantize', 'threshold', 'bin-ordinal', 'ordinal', 'point', 'band')
-    """
-    _schema = {'$ref': '#/definitions/ScaleType'}
-
-    def __init__(self, *args):
-        super(ScaleType, self).__init__(*args)
-
-
-class SchemeParams(VegaLiteSchema):
-    """SchemeParams schema wrapper
-
-    Mapping(required=[name])
-
-    Attributes
-    ----------
-
-    name : string
-        A color scheme name for ordinal scales (e.g., ``"category10"`` or ``"blues"`` ).
-
-        For the full list of supported schemes, please refer to the `Vega Scheme
-        <https://vega.github.io/vega/docs/schemes/#reference>`__ reference.
-    count : float
-        The number of colors to use in the scheme. This can be useful for scale types such
-        as ``"quantize"``, which use the length of the scale range to determine the number
-        of discrete bins for the scale domain.
-    extent : List(float)
-        The extent of the color range to use. For example ``[0.2, 1]`` will rescale the
-        color scheme such that color values in the range *[0, 0.2)* are excluded from the
-        scheme.
-    """
-    _schema = {'$ref': '#/definitions/SchemeParams'}
-
-    def __init__(self, name=Undefined, count=Undefined, extent=Undefined, **kwds):
-        super(SchemeParams, self).__init__(name=name, count=count, extent=extent, **kwds)
+    def __init__(self, bandPosition=Undefined, datum=Undefined, scale=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(ScaleDatumDef, self).__init__(bandPosition=bandPosition, datum=datum, scale=scale,
+                                            title=title, type=type, **kwds)
 
 
-class SecondaryFieldDef(Position2Def):
-    """SecondaryFieldDef schema wrapper
+class ScaleFieldDef(OffsetDef):
+    """ScaleFieldDef schema wrapper
 
     Mapping(required=[])
-    A field definition of a secondary channel that shares a scale with another primary channel.
-    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -13561,26 +15142,19 @@ class SecondaryFieldDef(Position2Def):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    bin : None
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : anyOf(boolean, :class:`BinParams`, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -13608,6 +15182,58 @@ class SecondaryFieldDef(Position2Def):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
+    scale : anyOf(:class:`Scale`, None)
+        An object defining properties of the channel's scale, which is the function that
+        transforms values in the data domain (numbers, dates, strings, etc) to visual values
+        (pixels, colors, sizes) of the encoding channels.
+
+        If ``null``, the scale will be `disabled and the data value will be directly encoded
+        <https://vega.github.io/vega-lite/docs/scale.html#disable>`__.
+
+        **Default value:** If undefined, default `scale properties
+        <https://vega.github.io/vega-lite/docs/scale.html>`__ are applied.
+
+        **See also:** `scale <https://vega.github.io/vega-lite/docs/scale.html>`__
+        documentation.
+    sort : :class:`Sort`
+        Sort order for the encoded field.
+
+        For continuous fields (quantitative or temporal), ``sort`` can be either
+        ``"ascending"`` or ``"descending"``.
+
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
+
+        **Default value:** ``"ascending"``
+
+        **Note:** ``null`` and sorting by another channel is not supported for ``row`` and
+        ``column``.
+
+        **See also:** `sort <https://vega.github.io/vega-lite/docs/sort.html>`__
+        documentation.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
         Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
         field. or `a temporal field that gets casted as ordinal
@@ -13633,310 +15259,342 @@ class SecondaryFieldDef(Position2Def):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
+    type : :class:`StandardType`
+        The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
+        ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
+        be a ``"geojson"`` type for encoding `'geoshape'
+        <https://vega.github.io/vega-lite/docs/geoshape.html>`__.
+
+        Vega-Lite automatically infers data types in many cases as discussed below. However,
+        type is required for a field if: (1) the field is not nominal and the field encoding
+        has no specified ``aggregate`` (except ``argmin`` and ``argmax`` ), ``bin``, scale
+        type, custom ``sort`` order, nor ``timeUnit`` or (2) if you wish to use an ordinal
+        scale for a field with ``bin`` or ``timeUnit``.
+
+        **Default value:**
+
+        1) For a data ``field``, ``"nominal"`` is the default data type unless the field
+        encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
+
+        **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
+        documentation.
     """
-    _schema = {'$ref': '#/definitions/SecondaryFieldDef'}
+    _schema = {'$ref': '#/definitions/ScaleFieldDef'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
-                 timeUnit=Undefined, title=Undefined, **kwds):
-        super(SecondaryFieldDef, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                                timeUnit=timeUnit, title=title, **kwds)
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
+                 scale=Undefined, sort=Undefined, timeUnit=Undefined, title=Undefined, type=Undefined,
+                 **kwds):
+        super(ScaleFieldDef, self).__init__(aggregate=aggregate, bandPosition=bandPosition, bin=bin,
+                                            field=field, scale=scale, sort=sort, timeUnit=timeUnit,
+                                            title=title, type=type, **kwds)
 
 
-class SelectionComposition(VegaLiteSchema):
-    """SelectionComposition schema wrapper
+class ScaleInterpolateEnum(VegaLiteSchema):
+    """ScaleInterpolateEnum schema wrapper
 
-    anyOf(:class:`SelectionNot`, :class:`SelectionAnd`, :class:`SelectionOr`, string)
+    enum('rgb', 'lab', 'hcl', 'hsl', 'hsl-long', 'hcl-long', 'cubehelix', 'cubehelix-long')
     """
-    _schema = {'$ref': '#/definitions/SelectionComposition'}
+    _schema = {'$ref': '#/definitions/ScaleInterpolateEnum'}
 
-    def __init__(self, *args, **kwds):
-        super(SelectionComposition, self).__init__(*args, **kwds)
+    def __init__(self, *args):
+        super(ScaleInterpolateEnum, self).__init__(*args)
 
 
-class SelectionAnd(SelectionComposition):
-    """SelectionAnd schema wrapper
+class ScaleInterpolateParams(VegaLiteSchema):
+    """ScaleInterpolateParams schema wrapper
 
-    Mapping(required=[and])
+    Mapping(required=[type])
 
-    Attributes
+    Parameters
     ----------
 
-    and : List(:class:`SelectionComposition`)
+    type : enum('rgb', 'cubehelix', 'cubehelix-long')
+
+    gamma : float
 
     """
-    _schema = {'$ref': '#/definitions/SelectionAnd'}
+    _schema = {'$ref': '#/definitions/ScaleInterpolateParams'}
 
-    def __init__(self, **kwds):
-        super(SelectionAnd, self).__init__(**kwds)
+    def __init__(self, type=Undefined, gamma=Undefined, **kwds):
+        super(ScaleInterpolateParams, self).__init__(type=type, gamma=gamma, **kwds)
 
 
-class SelectionConfig(VegaLiteSchema):
-    """SelectionConfig schema wrapper
+class ScaleResolveMap(VegaLiteSchema):
+    """ScaleResolveMap schema wrapper
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    interval : :class:`IntervalSelectionConfig`
-        The default definition for an `interval
-        <https://vega.github.io/vega-lite/docs/selection.html#type>`__ selection. All
-        properties and transformations for an interval selection definition (except ``type``
-        ) may be specified here.
+    angle : :class:`ResolveMode`
 
-        For instance, setting ``interval`` to ``{"translate": false}`` disables the ability
-        to move interval selections by default.
-    multi : :class:`MultiSelectionConfig`
-        The default definition for a `multi
-        <https://vega.github.io/vega-lite/docs/selection.html#type>`__ selection. All
-        properties and transformations for a multi selection definition (except ``type`` )
-        may be specified here.
+    color : :class:`ResolveMode`
 
-        For instance, setting ``multi`` to ``{"toggle": "event.altKey"}`` adds additional
-        values to multi selections when clicking with the alt-key pressed by default.
-    single : :class:`SingleSelectionConfig`
-        The default definition for a `single
-        <https://vega.github.io/vega-lite/docs/selection.html#type>`__ selection. All
-        properties and transformations   for a single selection definition (except ``type``
-        ) may be specified here.
+    fill : :class:`ResolveMode`
 
-        For instance, setting ``single`` to ``{"on": "dblclick"}`` populates single
-        selections on double-click by default.
-    """
-    _schema = {'$ref': '#/definitions/SelectionConfig'}
+    fillOpacity : :class:`ResolveMode`
 
-    def __init__(self, interval=Undefined, multi=Undefined, single=Undefined, **kwds):
-        super(SelectionConfig, self).__init__(interval=interval, multi=multi, single=single, **kwds)
+    opacity : :class:`ResolveMode`
 
+    radius : :class:`ResolveMode`
 
-class SelectionDef(VegaLiteSchema):
-    """SelectionDef schema wrapper
+    shape : :class:`ResolveMode`
 
-    anyOf(:class:`SingleSelection`, :class:`MultiSelection`, :class:`IntervalSelection`)
-    """
-    _schema = {'$ref': '#/definitions/SelectionDef'}
+    size : :class:`ResolveMode`
 
-    def __init__(self, *args, **kwds):
-        super(SelectionDef, self).__init__(*args, **kwds)
+    stroke : :class:`ResolveMode`
 
+    strokeDash : :class:`ResolveMode`
 
-class IntervalSelection(SelectionDef):
-    """IntervalSelection schema wrapper
+    strokeOpacity : :class:`ResolveMode`
 
-    Mapping(required=[type])
+    strokeWidth : :class:`ResolveMode`
 
-    Attributes
-    ----------
+    theta : :class:`ResolveMode`
 
-    type : string
-        Determines the default event processing and data query for the selection. Vega-Lite
-        currently supports three selection types:
+    x : :class:`ResolveMode`
 
+    xOffset : :class:`ResolveMode`
 
-        * ``"single"`` -- to select a single discrete data value on ``click``. - ``"multi"``
-          -- to select multiple discrete data value; the first value is selected on
-          ``click`` and additional values toggled on shift- ``click``. - ``"interval"`` --
-          to select a continuous range of data values on ``drag``.
-    bind : string
-        Establishes a two-way binding between the interval selection and the scales used
-        within the same view. This allows a user to interactively pan and zoom the view.
+    y : :class:`ResolveMode`
 
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
-    clear : anyOf(:class:`Stream`, string, boolean)
-        Clears the selection, emptying it of all values. Can be a `Event Stream
-        <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable.
+    yOffset : :class:`ResolveMode`
 
-        **Default value:** ``dblclick``.
+    """
+    _schema = {'$ref': '#/definitions/ScaleResolveMap'}
 
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values must match for a
-        data tuple to fall within the selection.
+    def __init__(self, angle=Undefined, color=Undefined, fill=Undefined, fillOpacity=Undefined,
+                 opacity=Undefined, radius=Undefined, shape=Undefined, size=Undefined, stroke=Undefined,
+                 strokeDash=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined, theta=Undefined,
+                 x=Undefined, xOffset=Undefined, y=Undefined, yOffset=Undefined, **kwds):
+        super(ScaleResolveMap, self).__init__(angle=angle, color=color, fill=fill,
+                                              fillOpacity=fillOpacity, opacity=opacity, radius=radius,
+                                              shape=shape, size=size, stroke=stroke,
+                                              strokeDash=strokeDash, strokeOpacity=strokeOpacity,
+                                              strokeWidth=strokeWidth, theta=theta, x=x,
+                                              xOffset=xOffset, y=y, yOffset=yOffset, **kwds)
 
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to fall within the
-        selection.
 
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : :class:`SelectionInitIntervalMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and arrays of initial
-        values.
+class ScaleType(VegaLiteSchema):
+    """ScaleType schema wrapper
 
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    mark : :class:`BrushConfig`
-        An interval selection also adds a rectangle mark to depict the extents of the
-        interval. The ``mark`` property can be used to customize the appearance of the mark.
+    enum('linear', 'log', 'pow', 'sqrt', 'symlog', 'identity', 'sequential', 'time', 'utc',
+    'quantile', 'quantize', 'threshold', 'bin-ordinal', 'ordinal', 'point', 'band')
+    """
+    _schema = {'$ref': '#/definitions/ScaleType'}
 
-        **See also:** `mark <https://vega.github.io/vega-lite/docs/selection-mark.html>`__
-        documentation.
-    on : anyOf(:class:`Stream`, string)
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection. For interval selections, the event stream
-        must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how selections'
-        data queries are resolved when applied in a filter transform, conditional encoding
-        rule, or scale domain.
+    def __init__(self, *args):
+        super(ScaleType, self).__init__(*args)
 
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    translate : anyOf(string, boolean)
-        When truthy, allows a user to interactively move an interval selection
-        back-and-forth. Can be ``true``, ``false`` (to disable panning), or a `Vega event
-        stream definition <https://vega.github.io/vega/docs/event-streams/>`__ which must
-        include a start and end event to trigger continuous panning.
 
-        **Default value:** ``true``, which corresponds to ``[mousedown, window:mouseup] >
-        window:mousemove!`` which corresponds to clicks and dragging within an interval
-        selection to reposition it.
+class SchemeParams(VegaLiteSchema):
+    """SchemeParams schema wrapper
 
-        **See also:** `translate <https://vega.github.io/vega-lite/docs/translate.html>`__
-        documentation.
-    zoom : anyOf(string, boolean)
-        When truthy, allows a user to interactively resize an interval selection. Can be
-        ``true``, ``false`` (to disable zooming), or a `Vega event stream definition
-        <https://vega.github.io/vega/docs/event-streams/>`__. Currently, only ``wheel``
-        events are supported.
+    Mapping(required=[name])
 
-        **Default value:** ``true``, which corresponds to ``wheel!``.
+    Parameters
+    ----------
 
-        **See also:** `zoom <https://vega.github.io/vega-lite/docs/zoom.html>`__
-        documentation.
+    name : string
+        A color scheme name for ordinal scales (e.g., ``"category10"`` or ``"blues"`` ).
+
+        For the full list of supported schemes, please refer to the `Vega Scheme
+        <https://vega.github.io/vega/docs/schemes/#reference>`__ reference.
+    count : float
+        The number of colors to use in the scheme. This can be useful for scale types such
+        as ``"quantize"``, which use the length of the scale range to determine the number
+        of discrete bins for the scale domain.
+    extent : List(float)
+        The extent of the color range to use. For example ``[0.2, 1]`` will rescale the
+        color scheme such that color values in the range *[0, 0.2)* are excluded from the
+        scheme.
     """
-    _schema = {'$ref': '#/definitions/IntervalSelection'}
+    _schema = {'$ref': '#/definitions/SchemeParams'}
 
-    def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined,
-                 encodings=Undefined, fields=Undefined, init=Undefined, mark=Undefined, on=Undefined,
-                 resolve=Undefined, translate=Undefined, zoom=Undefined, **kwds):
-        super(IntervalSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty,
-                                                encodings=encodings, fields=fields, init=init,
-                                                mark=mark, on=on, resolve=resolve, translate=translate,
-                                                zoom=zoom, **kwds)
+    def __init__(self, name=Undefined, count=Undefined, extent=Undefined, **kwds):
+        super(SchemeParams, self).__init__(name=name, count=count, extent=extent, **kwds)
 
 
-class MultiSelection(SelectionDef):
-    """MultiSelection schema wrapper
+class SecondaryFieldDef(Position2Def):
+    """SecondaryFieldDef schema wrapper
 
-    Mapping(required=[type])
+    Mapping(required=[])
+    A field definition of a secondary channel that shares a scale with another primary channel.
+    For example, ``x2``, ``xError`` and ``xError2`` share the same scale with ``x``.
 
-    Attributes
+    Parameters
     ----------
 
-    type : string
-        Determines the default event processing and data query for the selection. Vega-Lite
-        currently supports three selection types:
+    aggregate : :class:`Aggregate`
+        Aggregation function for the field (e.g., ``"mean"``, ``"sum"``, ``"median"``,
+        ``"min"``, ``"max"``, ``"count"`` ).
 
+        **Default value:** ``undefined`` (None)
 
-        * ``"single"`` -- to select a single discrete data value on ``click``. - ``"multi"``
-          -- to select multiple discrete data value; the first value is selected on
-          ``click`` and additional values toggled on shift- ``click``. - ``"interval"`` --
-          to select a continuous range of data values on ``drag``.
-    bind : :class:`LegendBinding`
-        When set, a selection is populated by interacting with the corresponding legend.
-        Direct manipulation interaction is disabled by default; to re-enable it, set the
-        selection's `on
-        <https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties>`__
-        property.
+        **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
+        documentation.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    bin : None
+        A flag for binning a ``quantitative`` field, `an object defining binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
-        Legend bindings are restricted to selections that only specify a single field or
-        encoding.
-    clear : anyOf(:class:`Stream`, string, boolean)
-        Clears the selection, emptying it of all values. Can be a `Event Stream
-        <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable.
 
-        **Default value:** ``dblclick``.
+        If ``true``, default `binning parameters
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
+
+        If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
+        already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
+        field to ``x2`` (or ``y2`` ). The scale and axis will be formatted similar to
+        binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also
+        set the axis's `tickMinStep
+        <https://vega.github.io/vega-lite/docs/axis.html#ticks>`__ property.
 
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
+        **Default value:** ``false``
+
+        **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values must match for a
-        data tuple to fall within the selection.
+    field : :class:`Field`
+        **Required.** A string defining the name of the field from which to pull a data
+        value or an object defining iterated values from the `repeat
+        <https://vega.github.io/vega-lite/docs/repeat.html>`__ operator.
 
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
+        **See also:** `field <https://vega.github.io/vega-lite/docs/field.html>`__
         documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to fall within the
-        selection.
 
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : List(:class:`SelectionInitMapping`)
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and an initial value (or
-        array of values).
+        **Notes:** 1)  Dots ( ``.`` ) and brackets ( ``[`` and ``]`` ) can be used to access
+        nested objects (e.g., ``"field": "foo.bar"`` and ``"field": "foo['bar']"`` ). If
+        field names contain dots or brackets but are not nested, you can use ``\\`` to
+        escape dots and brackets (e.g., ``"a\\.b"`` and ``"a\\[0\\]"`` ). See more details
+        about escaping in the `field documentation
+        <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
+        if ``aggregate`` is ``count``.
+    timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
+        Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
+        field. or `a temporal field that gets casted as ordinal
+        <https://vega.github.io/vega-lite/docs/type.html#cast>`__.
 
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
+        **Default value:** ``undefined`` (None)
 
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
+        **See also:** `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__
         documentation.
-    on : anyOf(:class:`Stream`, string)
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection. For interval selections, the event stream
-        must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how selections'
-        data queries are resolved when applied in a filter transform, conditional encoding
-        rule, or scale domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
 
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    toggle : anyOf(string, boolean)
-        Controls whether data values should be toggled or only ever inserted into multi
-        selections. Can be ``true``, ``false`` (for insertion only), or a `Vega expression
-        <https://vega.github.io/vega/docs/expressions/>`__.
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
 
-        **Default value:** ``true``, which corresponds to ``event.shiftKey`` (i.e., data
-        values are toggled when a user interacts with the shift-key pressed).
+        **Notes** :
 
-        Setting the value to the Vega expression ``"true"`` will toggle data values without
-        the user pressing the shift-key.
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
-        **See also:** `toggle <https://vega.github.io/vega-lite/docs/toggle.html>`__
-        documentation.
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
     """
-    _schema = {'$ref': '#/definitions/MultiSelection'}
+    _schema = {'$ref': '#/definitions/SecondaryFieldDef'}
 
-    def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined,
-                 encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined,
-                 resolve=Undefined, toggle=Undefined, **kwds):
-        super(MultiSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty,
-                                             encodings=encodings, fields=fields, init=init,
-                                             nearest=nearest, on=on, resolve=resolve, toggle=toggle,
-                                             **kwds)
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
+                 timeUnit=Undefined, title=Undefined, **kwds):
+        super(SecondaryFieldDef, self).__init__(aggregate=aggregate, bandPosition=bandPosition, bin=bin,
+                                                field=field, timeUnit=timeUnit, title=title, **kwds)
+
+
+class SelectionConfig(VegaLiteSchema):
+    """SelectionConfig schema wrapper
 
+    Mapping(required=[])
+
+    Parameters
+    ----------
+
+    interval : :class:`IntervalSelectionConfigWithoutType`
+        The default definition for an `interval
+        <https://vega.github.io/vega-lite/docs/parameter.html#select>`__ selection. All
+        properties and transformations for an interval selection definition (except ``type``
+        ) may be specified here.
 
-class SelectionExtent(BinExtent):
-    """SelectionExtent schema wrapper
+        For instance, setting ``interval`` to ``{"translate": false}`` disables the ability
+        to move interval selections by default.
+    point : :class:`PointSelectionConfigWithoutType`
+        The default definition for a `point
+        <https://vega.github.io/vega-lite/docs/parameter.html#select>`__ selection. All
+        properties and transformations  for a point selection definition (except ``type`` )
+        may be specified here.
 
-    anyOf(Mapping(required=[selection]), Mapping(required=[selection]))
+        For instance, setting ``point`` to ``{"on": "dblclick"}`` populates point selections
+        on double-click by default.
     """
-    _schema = {'$ref': '#/definitions/SelectionExtent'}
+    _schema = {'$ref': '#/definitions/SelectionConfig'}
 
-    def __init__(self, *args, **kwds):
-        super(SelectionExtent, self).__init__(*args, **kwds)
+    def __init__(self, interval=Undefined, point=Undefined, **kwds):
+        super(SelectionConfig, self).__init__(interval=interval, point=point, **kwds)
 
 
 class SelectionInit(VegaLiteSchema):
@@ -13958,7 +15616,7 @@ class DateTime(SelectionInit):
     month has higher precedence. ``day`` cannot be combined with other date. We accept string
     for month and day names.
 
-    Attributes
+    Parameters
     ----------
 
     date : float
@@ -14045,55 +15703,56 @@ class SelectionInitMapping(VegaLiteSchema):
         super(SelectionInitMapping, self).__init__(**kwds)
 
 
-class SelectionNot(SelectionComposition):
-    """SelectionNot schema wrapper
-
-    Mapping(required=[not])
-
-    Attributes
-    ----------
-
-    not : :class:`SelectionComposition`
-
-    """
-    _schema = {'$ref': '#/definitions/SelectionNot'}
-
-    def __init__(self, **kwds):
-        super(SelectionNot, self).__init__(**kwds)
-
+class SelectionParameter(VegaLiteSchema):
+    """SelectionParameter schema wrapper
 
-class SelectionOr(SelectionComposition):
-    """SelectionOr schema wrapper
-
-    Mapping(required=[or])
+    Mapping(required=[name, select])
 
-    Attributes
+    Parameters
     ----------
 
-    or : List(:class:`SelectionComposition`)
-
-    """
-    _schema = {'$ref': '#/definitions/SelectionOr'}
+    name : :class:`ParameterName`
+        Required. A unique name for the selection parameter. Selection names should be valid
+        JavaScript identifiers: they should contain only alphanumeric characters (or "$", or
+        "_") and may not start with a digit. Reserved keywords that may not be used as
+        parameter names are "datum", "event", "item", and "parent".
+    select : anyOf(:class:`SelectionType`, :class:`PointSelectionConfig`, :class:`IntervalSelectionConfig`)
+        Determines the default event processing and data query for the selection. Vega-Lite
+        currently supports two selection types:
 
-    def __init__(self, **kwds):
-        super(SelectionOr, self).__init__(**kwds)
 
+        * ``"point"`` -- to select multiple discrete data values; the first value is
+          selected on ``click`` and additional values toggled on shift-click.
+        * ``"interval"`` -- to select a continuous range of data values on ``drag``.
+    bind : anyOf(:class:`Binding`, Mapping(required=[]), :class:`LegendBinding`, string)
+        When set, a selection is populated by input elements (also known as dynamic query
+        widgets) or by interacting with the corresponding legend. Direct manipulation
+        interaction is disabled by default; to re-enable it, set the selection's `on
+        <https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties>`__
+        property.
 
-class SelectionPredicate(Predicate):
-    """SelectionPredicate schema wrapper
+        Legend bindings are restricted to selections that only specify a single field or
+        encoding.
 
-    Mapping(required=[selection])
+        Query widget binding takes the form of Vega's `input element binding definition
+        <https://vega.github.io/vega/docs/signals/#bind>`__ or can be a mapping between
+        projected field/encodings and binding definitions.
 
-    Attributes
-    ----------
+        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
+        documentation.
+    value : anyOf(:class:`SelectionInit`, List(:class:`SelectionInitMapping`), :class:`SelectionInitIntervalMapping`)
+        Initialize the selection with a mapping between `projected channels or field names
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ and initial
+        values.
 
-    selection : :class:`SelectionComposition`
-        Filter using a selection name or a logical composition of selection names.
+        **See also:** `init <https://vega.github.io/vega-lite/docs/value.html>`__
+        documentation.
     """
-    _schema = {'$ref': '#/definitions/SelectionPredicate'}
+    _schema = {'$ref': '#/definitions/SelectionParameter'}
 
-    def __init__(self, selection=Undefined, **kwds):
-        super(SelectionPredicate, self).__init__(selection=selection, **kwds)
+    def __init__(self, name=Undefined, select=Undefined, bind=Undefined, value=Undefined, **kwds):
+        super(SelectionParameter, self).__init__(name=name, select=select, bind=bind, value=value,
+                                                 **kwds)
 
 
 class SelectionResolution(VegaLiteSchema):
@@ -14107,12 +15766,23 @@ class SelectionResolution(VegaLiteSchema):
         super(SelectionResolution, self).__init__(*args)
 
 
+class SelectionType(VegaLiteSchema):
+    """SelectionType schema wrapper
+
+    enum('point', 'interval')
+    """
+    _schema = {'$ref': '#/definitions/SelectionType'}
+
+    def __init__(self, *args):
+        super(SelectionType, self).__init__(*args)
+
+
 class SequenceGenerator(Generator):
     """SequenceGenerator schema wrapper
 
     Mapping(required=[sequence])
 
-    Attributes
+    Parameters
     ----------
 
     sequence : :class:`SequenceParams`
@@ -14131,7 +15801,7 @@ class SequenceParams(VegaLiteSchema):
 
     Mapping(required=[start, stop])
 
-    Attributes
+    Parameters
     ----------
 
     start : float
@@ -14231,34 +15901,43 @@ class FieldOrDatumDefWithConditionDatumDefstringnull(MarkPropDefstringnullTypeFo
     """FieldOrDatumDefWithConditionDatumDefstringnull schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
         value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
         since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
         A constant value in data domain.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
     type : :class:`Type`
         The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
         ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
@@ -14275,65 +15954,76 @@ class FieldOrDatumDefWithConditionDatumDefstringnull(MarkPropDefstringnullTypeFo
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<DatumDef,(string|null)>'}
 
-    def __init__(self, band=Undefined, condition=Undefined, datum=Undefined, type=Undefined, **kwds):
-        super(FieldOrDatumDefWithConditionDatumDefstringnull, self).__init__(band=band,
+    def __init__(self, bandPosition=Undefined, condition=Undefined, datum=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(FieldOrDatumDefWithConditionDatumDefstringnull, self).__init__(bandPosition=bandPosition,
                                                                              condition=condition,
-                                                                             datum=datum, type=type,
-                                                                             **kwds)
+                                                                             datum=datum, title=title,
+                                                                             type=type, **kwds)
 
 
 class FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull(MarkPropDefstringnullTypeForShape, ShapeDef):
     """FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -14344,26 +16034,19 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull(MarkPro
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -14376,9 +16059,8 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull(MarkPro
 
         **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    condition : anyOf(:class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
@@ -14427,25 +16109,31 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull(MarkPro
         For continuous fields (quantitative or temporal), ``sort`` can be either
         ``"ascending"`` or ``"descending"``.
 
-        For discrete fields, ``sort`` can be one of the following: - ``"ascending"`` or
-        ``"descending"`` -- for sorting by the values' natural order in JavaScript. - `A
-        string indicating an encoding channel name to sort by
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g., ``"x"``
-        or ``"y"`` ) with an optional minus prefix for descending sort (e.g., ``"-x"`` to
-        sort by x-field, descending). This channel string is short-form of `a
-        sort-by-encoding definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For example,
-        ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
-        "descending"}``. - `A sort field definition
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
-        another field. - `An array specifying the field values in preferred order
-        <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
-        sort order will obey the values in the array, followed by any unspecified values in
-        their original order. For discrete time field, values in the sort array can be
-        `date-time definition objects <types#datetime>`__. In addition, for time units
-        ``"month"`` and ``"day"``, the values can be the month or day names (case
-        insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ). - ``null``
-        indicating no sort.
+        For discrete fields, ``sort`` can be one of the following:
+
+
+        * ``"ascending"`` or ``"descending"`` -- for sorting by the values' natural order in
+          JavaScript.
+        * `A string indicating an encoding channel name to sort by
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__ (e.g.,
+          ``"x"`` or ``"y"`` ) with an optional minus prefix for descending sort (e.g.,
+          ``"-x"`` to sort by x-field, descending). This channel string is short-form of `a
+          sort-by-encoding definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding>`__. For
+          example, ``"sort": "-x"`` is equivalent to ``"sort": {"encoding": "x", "order":
+          "descending"}``.
+        * `A sort field definition
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-field>`__ for sorting by
+          another field.
+        * `An array specifying the field values in preferred order
+          <https://vega.github.io/vega-lite/docs/sort.html#sort-array>`__. In this case, the
+          sort order will obey the values in the array, followed by any unspecified values
+          in their original order. For discrete time field, values in the sort array can be
+          `date-time definition objects
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__. In addition, for time
+          units ``"month"`` and ``"day"``, the values can be the month or day names (case
+          insensitive) or their 3-letter initials (e.g., ``"Mon"``, ``"Tue"`` ).
+        * ``null`` indicating no sort.
 
         **Default value:** ``"ascending"``
 
@@ -14479,7 +16167,7 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull(MarkPro
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -14499,55 +16187,67 @@ class FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull(MarkPro
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, condition=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, condition=Undefined,
                  field=Undefined, legend=Undefined, scale=Undefined, sort=Undefined, timeUnit=Undefined,
                  title=Undefined, type=Undefined, **kwds):
         super(FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull, self).__init__(aggregate=aggregate,
-                                                                                                 band=band,
+                                                                                                 bandPosition=bandPosition,
                                                                                                  bin=bin,
                                                                                                  condition=condition,
                                                                                                  field=field,
@@ -14565,7 +16265,7 @@ class SharedEncoding(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     angle : Mapping(required=[])
@@ -14596,13 +16296,17 @@ class SharedEncoding(VegaLiteSchema):
     opacity : Mapping(required=[])
 
     order : anyOf(:class:`OrderFieldDef`, List(:class:`OrderFieldDef`), :class:`OrderValueDef`)
-        Order of the marks. - For stacked marks, this ``order`` channel encodes `stack order
-        <https://vega.github.io/vega-lite/docs/stack.html#order>`__. - For line and trail
-        marks, this ``order`` channel encodes order of data points in the lines. This can be
-        useful for creating `a connected scatterplot
-        <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__. Setting
-        ``order`` to ``{"value": null}`` makes the line marks use the original order in the
-        data sources. - Otherwise, this ``order`` channel encodes layer order of the marks.
+        Order of the marks.
+
+
+        * For stacked marks, this ``order`` channel encodes `stack order
+          <https://vega.github.io/vega-lite/docs/stack.html#order>`__.
+        * For line and trail marks, this ``order`` channel encodes order of data points in
+          the lines. This can be useful for creating `a connected scatterplot
+          <https://vega.github.io/vega-lite/examples/connected_scatterplot.html>`__. Setting
+          ``order`` to ``{"value": null}`` makes the line marks use the original order in
+          the data sources.
+        * Otherwise, this ``order`` channel encodes layer order of the marks.
 
         **Note** : In aggregate plots, ``order`` field should be ``aggregate`` d to avoid
         creating additional aggregation grouping.
@@ -14618,252 +16322,83 @@ class SharedEncoding(VegaLiteSchema):
 
     strokeDash : Mapping(required=[])
 
-    strokeOpacity : Mapping(required=[])
-
-    strokeWidth : Mapping(required=[])
-
-    text : Mapping(required=[])
-
-    theta : Mapping(required=[])
-
-    theta2 : Mapping(required=[])
-
-    tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`,
-    List(:class:`StringFieldDef`), None)
-        The tooltip text to show upon mouse hover. Specifying ``tooltip`` encoding overrides
-        `the tooltip property in the mark definition
-        <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
-
-        See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
-        documentation for a detailed discussion about tooltip in Vega-Lite.
-    url : Mapping(required=[])
-
-    x : Mapping(required=[])
-
-    x2 : Mapping(required=[])
-
-    xError : Mapping(required=[])
-
-    xError2 : Mapping(required=[])
-
-    y : Mapping(required=[])
-
-    y2 : Mapping(required=[])
-
-    yError : Mapping(required=[])
-
-    yError2 : Mapping(required=[])
-
-    """
-    _schema = {'$ref': '#/definitions/SharedEncoding'}
-
-    def __init__(self, angle=Undefined, color=Undefined, description=Undefined, detail=Undefined,
-                 fill=Undefined, fillOpacity=Undefined, href=Undefined, key=Undefined,
-                 latitude=Undefined, latitude2=Undefined, longitude=Undefined, longitude2=Undefined,
-                 opacity=Undefined, order=Undefined, radius=Undefined, radius2=Undefined,
-                 shape=Undefined, size=Undefined, stroke=Undefined, strokeDash=Undefined,
-                 strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined, theta=Undefined,
-                 theta2=Undefined, tooltip=Undefined, url=Undefined, x=Undefined, x2=Undefined,
-                 xError=Undefined, xError2=Undefined, y=Undefined, y2=Undefined, yError=Undefined,
-                 yError2=Undefined, **kwds):
-        super(SharedEncoding, self).__init__(angle=angle, color=color, description=description,
-                                             detail=detail, fill=fill, fillOpacity=fillOpacity,
-                                             href=href, key=key, latitude=latitude, latitude2=latitude2,
-                                             longitude=longitude, longitude2=longitude2,
-                                             opacity=opacity, order=order, radius=radius,
-                                             radius2=radius2, shape=shape, size=size, stroke=stroke,
-                                             strokeDash=strokeDash, strokeOpacity=strokeOpacity,
-                                             strokeWidth=strokeWidth, text=text, theta=theta,
-                                             theta2=theta2, tooltip=tooltip, url=url, x=x, x2=x2,
-                                             xError=xError, xError2=xError2, y=y, y2=y2, yError=yError,
-                                             yError2=yError2, **kwds)
-
-
-class SingleDefUnitChannel(VegaLiteSchema):
-    """SingleDefUnitChannel schema wrapper
-
-    enum('x', 'y', 'x2', 'y2', 'longitude', 'latitude', 'longitude2', 'latitude2', 'theta',
-    'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity', 'fillOpacity',
-    'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'shape', 'key', 'text',
-    'href', 'url', 'description')
-    """
-    _schema = {'$ref': '#/definitions/SingleDefUnitChannel'}
-
-    def __init__(self, *args):
-        super(SingleDefUnitChannel, self).__init__(*args)
-
-
-class SingleSelection(SelectionDef):
-    """SingleSelection schema wrapper
-
-    Mapping(required=[type])
-
-    Attributes
-    ----------
-
-    type : string
-        Determines the default event processing and data query for the selection. Vega-Lite
-        currently supports three selection types:
-
-
-        * ``"single"`` -- to select a single discrete data value on ``click``. - ``"multi"``
-          -- to select multiple discrete data value; the first value is selected on
-          ``click`` and additional values toggled on shift- ``click``. - ``"interval"`` --
-          to select a continuous range of data values on ``drag``.
-    bind : anyOf(:class:`Binding`, Mapping(required=[]), :class:`LegendBinding`)
-        When set, a selection is populated by input elements (also known as dynamic query
-        widgets) or by interacting with the corresponding legend. Direct manipulation
-        interaction is disabled by default; to re-enable it, set the selection's `on
-        <https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties>`__
-        property.
-
-        Legend bindings are restricted to selections that only specify a single field or
-        encoding.
-
-        Query widget binding takes the form of Vega's `input element binding definition
-        <https://vega.github.io/vega/docs/signals/#bind>`__ or can be a mapping between
-        projected field/encodings and binding definitions.
-
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
-    clear : anyOf(:class:`Stream`, string, boolean)
-        Clears the selection, emptying it of all values. Can be a `Event Stream
-        <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable.
-
-        **Default value:** ``dblclick``.
-
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values must match for a
-        data tuple to fall within the selection.
-
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to fall within the
-        selection.
-
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : :class:`SelectionInitMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and initial values.
-
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
-
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
-        documentation.
-    on : anyOf(:class:`Stream`, string)
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection. For interval selections, the event stream
-        must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how selections'
-        data queries are resolved when applied in a filter transform, conditional encoding
-        rule, or scale domain.
-
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
-    """
-    _schema = {'$ref': '#/definitions/SingleSelection'}
+    strokeOpacity : Mapping(required=[])
 
-    def __init__(self, type=Undefined, bind=Undefined, clear=Undefined, empty=Undefined,
-                 encodings=Undefined, fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined,
-                 resolve=Undefined, **kwds):
-        super(SingleSelection, self).__init__(type=type, bind=bind, clear=clear, empty=empty,
-                                              encodings=encodings, fields=fields, init=init,
-                                              nearest=nearest, on=on, resolve=resolve, **kwds)
+    strokeWidth : Mapping(required=[])
 
+    text : Mapping(required=[])
 
-class SingleSelectionConfig(VegaLiteSchema):
-    """SingleSelectionConfig schema wrapper
+    theta : Mapping(required=[])
 
-    Mapping(required=[])
+    theta2 : Mapping(required=[])
 
-    Attributes
-    ----------
+    tooltip : anyOf(:class:`StringFieldDefWithCondition`, :class:`StringValueDefWithCondition`, List(:class:`StringFieldDef`), None)
+        The tooltip text to show upon mouse hover. Specifying ``tooltip`` encoding overrides
+        `the tooltip property in the mark definition
+        <https://vega.github.io/vega-lite/docs/mark.html#mark-def>`__.
 
-    bind : anyOf(:class:`Binding`, Mapping(required=[]), :class:`LegendBinding`)
-        When set, a selection is populated by input elements (also known as dynamic query
-        widgets) or by interacting with the corresponding legend. Direct manipulation
-        interaction is disabled by default; to re-enable it, set the selection's `on
-        <https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties>`__
-        property.
+        See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
+        documentation for a detailed discussion about tooltip in Vega-Lite.
+    url : Mapping(required=[])
 
-        Legend bindings are restricted to selections that only specify a single field or
-        encoding.
+    x : Mapping(required=[])
 
-        Query widget binding takes the form of Vega's `input element binding definition
-        <https://vega.github.io/vega/docs/signals/#bind>`__ or can be a mapping between
-        projected field/encodings and binding definitions.
+    x2 : Mapping(required=[])
 
-        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
-        documentation.
-    clear : anyOf(:class:`Stream`, string, boolean)
-        Clears the selection, emptying it of all values. Can be a `Event Stream
-        <https://vega.github.io/vega/docs/event-streams/>`__ or ``false`` to disable.
+    xError : Mapping(required=[])
 
-        **Default value:** ``dblclick``.
+    xError2 : Mapping(required=[])
 
-        **See also:** `clear <https://vega.github.io/vega-lite/docs/clear.html>`__
-        documentation.
-    empty : enum('all', 'none')
-        By default, ``all`` data values are considered to lie within an empty selection.
-        When set to ``none``, empty selections contain no data values.
-    encodings : List(:class:`SingleDefUnitChannel`)
-        An array of encoding channels. The corresponding data field values must match for a
-        data tuple to fall within the selection.
+    xOffset : Mapping(required=[])
 
-        **See also:** `encodings <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    fields : List(:class:`FieldName`)
-        An array of field names whose values must match for a data tuple to fall within the
-        selection.
+    y : Mapping(required=[])
 
-        **See also:** `fields <https://vega.github.io/vega-lite/docs/project.html>`__
-        documentation.
-    init : :class:`SelectionInitMapping`
-        Initialize the selection with a mapping between `projected channels or field names
-        <https://vega.github.io/vega-lite/docs/project.html>`__ and initial values.
+    y2 : Mapping(required=[])
 
-        **See also:** `init <https://vega.github.io/vega-lite/docs/init.html>`__
-        documentation.
-    nearest : boolean
-        When true, an invisible voronoi diagram is computed to accelerate discrete
-        selection. The data value *nearest* the mouse cursor is added to the selection.
+    yError : Mapping(required=[])
 
-        **See also:** `nearest <https://vega.github.io/vega-lite/docs/nearest.html>`__
-        documentation.
-    on : anyOf(:class:`Stream`, string)
-        A `Vega event stream <https://vega.github.io/vega/docs/event-streams/>`__ (object or
-        selector) that triggers the selection. For interval selections, the event stream
-        must specify a `start and end
-        <https://vega.github.io/vega/docs/event-streams/#between-filters>`__.
-    resolve : :class:`SelectionResolution`
-        With layered and multi-view displays, a strategy that determines how selections'
-        data queries are resolved when applied in a filter transform, conditional encoding
-        rule, or scale domain.
+    yError2 : Mapping(required=[])
+
+    yOffset : Mapping(required=[])
 
-        **See also:** `resolve
-        <https://vega.github.io/vega-lite/docs/selection-resolve.html>`__ documentation.
     """
-    _schema = {'$ref': '#/definitions/SingleSelectionConfig'}
+    _schema = {'$ref': '#/definitions/SharedEncoding'}
 
-    def __init__(self, bind=Undefined, clear=Undefined, empty=Undefined, encodings=Undefined,
-                 fields=Undefined, init=Undefined, nearest=Undefined, on=Undefined, resolve=Undefined,
-                 **kwds):
-        super(SingleSelectionConfig, self).__init__(bind=bind, clear=clear, empty=empty,
-                                                    encodings=encodings, fields=fields, init=init,
-                                                    nearest=nearest, on=on, resolve=resolve, **kwds)
+    def __init__(self, angle=Undefined, color=Undefined, description=Undefined, detail=Undefined,
+                 fill=Undefined, fillOpacity=Undefined, href=Undefined, key=Undefined,
+                 latitude=Undefined, latitude2=Undefined, longitude=Undefined, longitude2=Undefined,
+                 opacity=Undefined, order=Undefined, radius=Undefined, radius2=Undefined,
+                 shape=Undefined, size=Undefined, stroke=Undefined, strokeDash=Undefined,
+                 strokeOpacity=Undefined, strokeWidth=Undefined, text=Undefined, theta=Undefined,
+                 theta2=Undefined, tooltip=Undefined, url=Undefined, x=Undefined, x2=Undefined,
+                 xError=Undefined, xError2=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
+                 yError=Undefined, yError2=Undefined, yOffset=Undefined, **kwds):
+        super(SharedEncoding, self).__init__(angle=angle, color=color, description=description,
+                                             detail=detail, fill=fill, fillOpacity=fillOpacity,
+                                             href=href, key=key, latitude=latitude, latitude2=latitude2,
+                                             longitude=longitude, longitude2=longitude2,
+                                             opacity=opacity, order=order, radius=radius,
+                                             radius2=radius2, shape=shape, size=size, stroke=stroke,
+                                             strokeDash=strokeDash, strokeOpacity=strokeOpacity,
+                                             strokeWidth=strokeWidth, text=text, theta=theta,
+                                             theta2=theta2, tooltip=tooltip, url=url, x=x, x2=x2,
+                                             xError=xError, xError2=xError2, xOffset=xOffset, y=y,
+                                             y2=y2, yError=yError, yError2=yError2, yOffset=yOffset,
+                                             **kwds)
+
+
+class SingleDefUnitChannel(VegaLiteSchema):
+    """SingleDefUnitChannel schema wrapper
+
+    enum('x', 'y', 'xOffset', 'yOffset', 'x2', 'y2', 'longitude', 'latitude', 'longitude2',
+    'latitude2', 'theta', 'theta2', 'radius', 'radius2', 'color', 'fill', 'stroke', 'opacity',
+    'fillOpacity', 'strokeOpacity', 'strokeWidth', 'strokeDash', 'size', 'angle', 'shape',
+    'key', 'text', 'href', 'url', 'description')
+    """
+    _schema = {'$ref': '#/definitions/SingleDefUnitChannel'}
+
+    def __init__(self, *args):
+        super(SingleDefUnitChannel, self).__init__(*args)
 
 
 class Sort(VegaLiteSchema):
@@ -14895,7 +16430,7 @@ class EncodingSortField(Sort):
     Mapping(required=[])
     A sort definition for sorting a discrete scale in an encoding field definition.
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`Field`
@@ -14965,7 +16500,7 @@ class SortByEncoding(Sort):
 
     Mapping(required=[encoding])
 
-    Attributes
+    Parameters
     ----------
 
     encoding : :class:`SortByChannel`
@@ -14988,7 +16523,7 @@ class SortField(VegaLiteSchema):
     Mapping(required=[field])
     A sort definition for transform
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -15028,13 +16563,13 @@ class Spec(VegaLiteSchema):
         super(Spec, self).__init__(*args, **kwds)
 
 
-class ConcatSpecGenericSpec(Spec):
+class ConcatSpecGenericSpec(Spec, NonNormalizedSpec):
     """ConcatSpecGenericSpec schema wrapper
 
     Mapping(required=[concat])
     Base interface for a generalized concatenation specification.
 
-    Attributes
+    Parameters
     ----------
 
     concat : List(:class:`Spec`)
@@ -15045,9 +16580,10 @@ class ConcatSpecGenericSpec(Spec):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -15061,10 +16597,10 @@ class ConcatSpecGenericSpec(Spec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -15084,9 +16620,12 @@ class ConcatSpecGenericSpec(Spec):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
@@ -15124,16 +16663,16 @@ class ConcatSpecGenericSpec(Spec):
                                                     **kwds)
 
 
-class FacetSpec(Spec):
+class FacetSpec(Spec, NonNormalizedSpec):
     """FacetSpec schema wrapper
 
     Mapping(required=[facet, spec])
     Base interface for a facet specification.
 
-    Attributes
+    Parameters
     ----------
 
-    facet : anyOf(:class:`FacetFieldDefFieldName`, :class:`FacetMappingFieldName`)
+    facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`)
         Definition for how to facet the data. One of: 1) `a field definition for faceting
         the plot by one field
         <https://vega.github.io/vega-lite/docs/facet.html#field-def>`__ 2) `An object that
@@ -15147,9 +16686,10 @@ class FacetSpec(Spec):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -15163,10 +16703,10 @@ class FacetSpec(Spec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -15186,9 +16726,12 @@ class FacetSpec(Spec):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
@@ -15226,14 +16769,14 @@ class FacetSpec(Spec):
                                         spacing=spacing, title=title, transform=transform, **kwds)
 
 
-class FacetedUnitSpec(NormalizedSpec, Spec):
+class FacetedUnitSpec(Spec, NonNormalizedSpec):
     """FacetedUnitSpec schema wrapper
 
     Mapping(required=[mark])
     Unit spec that can have a composite mark and row or column channels (shorthand for a facet
     spec).
 
-    Attributes
+    Parameters
     ----------
 
     mark : :class:`AnyMark`
@@ -15247,9 +16790,10 @@ class FacetedUnitSpec(NormalizedSpec, Spec):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -15263,10 +16807,10 @@ class FacetedUnitSpec(NormalizedSpec, Spec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -15288,11 +16832,12 @@ class FacetedUnitSpec(NormalizedSpec, Spec):
         The height of a visualization.
 
 
-        * For a plot with a continuous y-field, height should be a number. - For a plot with
-          either a discrete y-field or no y-field, height can be either a number indicating
-          a fixed height or an object in the form of ``{step: number}`` defining the height
-          per discrete step. (No y-field is equivalent to having one discrete step.) - To
-          enable responsive sizing on height, it should be set to ``"container"``.
+        * For a plot with a continuous y-field, height should be a number.
+        * For a plot with either a discrete y-field or no y-field, height can be either a
+          number indicating a fixed height or an object in the form of ``{step: number}``
+          defining the height per discrete step. (No y-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on height, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousHeight`` for a plot with a
         continuous y-field and ``config.view.discreteHeight`` otherwise.
@@ -15305,14 +16850,15 @@ class FacetedUnitSpec(NormalizedSpec, Spec):
         documentation.
     name : string
         Name of the visualization for later reference.
+    params : List(:class:`SelectionParameter`)
+        An array of parameters that may either be simple variables, or more complex
+        selections that map user input to data queries.
     projection : :class:`Projection`
         An object defining properties of geographic projection, which will be applied to
         ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"``
         channels for other marks.
     resolve : :class:`Resolve`
         Scale, axis, and legend resolutions for view composition specifications.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
     spacing : anyOf(float, :class:`RowColnumber`)
         The spacing in pixels between sub-views of the composition operator. An object of
         the form ``{"row": number, "column": number}`` can be used to set different spacing
@@ -15333,11 +16879,12 @@ class FacetedUnitSpec(NormalizedSpec, Spec):
         The width of a visualization.
 
 
-        * For a plot with a continuous x-field, width should be a number. - For a plot with
-          either a discrete x-field or no x-field, width can be either a number indicating a
-          fixed width or an object in the form of ``{step: number}`` defining the width per
-          discrete step. (No x-field is equivalent to having one discrete step.) - To enable
-          responsive sizing on width, it should be set to ``"container"``.
+        * For a plot with a continuous x-field, width should be a number.
+        * For a plot with either a discrete x-field or no x-field, width can be either a
+          number indicating a fixed width or an object in the form of ``{step: number}``
+          defining the width per discrete step. (No x-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on width, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousWidth`` for a plot with a
         continuous x-field and ``config.view.discreteWidth`` otherwise.
@@ -15353,24 +16900,24 @@ class FacetedUnitSpec(NormalizedSpec, Spec):
 
     def __init__(self, mark=Undefined, align=Undefined, bounds=Undefined, center=Undefined,
                  data=Undefined, description=Undefined, encoding=Undefined, height=Undefined,
-                 name=Undefined, projection=Undefined, resolve=Undefined, selection=Undefined,
+                 name=Undefined, params=Undefined, projection=Undefined, resolve=Undefined,
                  spacing=Undefined, title=Undefined, transform=Undefined, view=Undefined,
                  width=Undefined, **kwds):
         super(FacetedUnitSpec, self).__init__(mark=mark, align=align, bounds=bounds, center=center,
                                               data=data, description=description, encoding=encoding,
-                                              height=height, name=name, projection=projection,
-                                              resolve=resolve, selection=selection, spacing=spacing,
+                                              height=height, name=name, params=params,
+                                              projection=projection, resolve=resolve, spacing=spacing,
                                               title=title, transform=transform, view=view, width=width,
                                               **kwds)
 
 
-class HConcatSpecGenericSpec(Spec):
+class HConcatSpecGenericSpec(Spec, NonNormalizedSpec):
     """HConcatSpecGenericSpec schema wrapper
 
     Mapping(required=[hconcat])
     Base interface for a horizontal concatenation specification.
 
-    Attributes
+    Parameters
     ----------
 
     hconcat : List(:class:`Spec`)
@@ -15381,10 +16928,10 @@ class HConcatSpecGenericSpec(Spec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : boolean
@@ -15421,14 +16968,14 @@ class HConcatSpecGenericSpec(Spec):
                                                      transform=transform, **kwds)
 
 
-class LayerSpec(NormalizedSpec, Spec):
+class LayerSpec(Spec, NonNormalizedSpec):
     """LayerSpec schema wrapper
 
     Mapping(required=[layer])
     A full layered plot specification, which may contains ``encoding`` and ``projection``
     properties that will be applied to underlying unit (single-view) specifications.
 
-    Attributes
+    Parameters
     ----------
 
     layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`))
@@ -15450,11 +16997,12 @@ class LayerSpec(NormalizedSpec, Spec):
         The height of a visualization.
 
 
-        * For a plot with a continuous y-field, height should be a number. - For a plot with
-          either a discrete y-field or no y-field, height can be either a number indicating
-          a fixed height or an object in the form of ``{step: number}`` defining the height
-          per discrete step. (No y-field is equivalent to having one discrete step.) - To
-          enable responsive sizing on height, it should be set to ``"container"``.
+        * For a plot with a continuous y-field, height should be a number.
+        * For a plot with either a discrete y-field or no y-field, height can be either a
+          number indicating a fixed height or an object in the form of ``{step: number}``
+          defining the height per discrete step. (No y-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on height, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousHeight`` for a plot with a
         continuous y-field and ``config.view.discreteHeight`` otherwise.
@@ -15484,11 +17032,12 @@ class LayerSpec(NormalizedSpec, Spec):
         The width of a visualization.
 
 
-        * For a plot with a continuous x-field, width should be a number. - For a plot with
-          either a discrete x-field or no x-field, width can be either a number indicating a
-          fixed width or an object in the form of ``{step: number}`` defining the width per
-          discrete step. (No x-field is equivalent to having one discrete step.) - To enable
-          responsive sizing on width, it should be set to ``"container"``.
+        * For a plot with a continuous x-field, width should be a number.
+        * For a plot with either a discrete x-field or no x-field, width can be either a
+          number indicating a fixed width or an object in the form of ``{step: number}``
+          defining the width per discrete step. (No x-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on width, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousWidth`` for a plot with a
         continuous x-field and ``config.view.discreteWidth`` otherwise.
@@ -15511,7 +17060,7 @@ class LayerSpec(NormalizedSpec, Spec):
                                         transform=transform, view=view, width=width, **kwds)
 
 
-class RepeatSpec(NormalizedSpec, Spec):
+class RepeatSpec(Spec, NonNormalizedSpec):
     """RepeatSpec schema wrapper
 
     anyOf(:class:`NonLayerRepeatSpec`, :class:`LayerRepeatSpec`)
@@ -15527,7 +17076,7 @@ class LayerRepeatSpec(RepeatSpec):
 
     Mapping(required=[repeat, spec])
 
-    Attributes
+    Parameters
     ----------
 
     repeat : :class:`LayerRepeatMapping`
@@ -15538,7 +17087,7 @@ class LayerRepeatSpec(RepeatSpec):
         ``"column"`` to the listed fields to be repeated along the particular orientations.
         The objects ``{"repeat": "row"}`` and ``{"repeat": "column"}`` can be used to refer
         to the repeated field respectively.
-    spec : anyOf(:class:`LayerSpec`, :class:`UnitSpec`)
+    spec : anyOf(:class:`LayerSpec`, :class:`UnitSpecWithFrame`)
         A specification of the view that gets repeated.
     align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
         The alignment to apply to grid rows and columns. The supported string values are
@@ -15546,9 +17095,10 @@ class LayerRepeatSpec(RepeatSpec):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -15562,10 +17112,10 @@ class LayerRepeatSpec(RepeatSpec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -15585,9 +17135,12 @@ class LayerRepeatSpec(RepeatSpec):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
@@ -15631,7 +17184,7 @@ class NonLayerRepeatSpec(RepeatSpec):
     Mapping(required=[repeat, spec])
     Base interface for a repeat specification.
 
-    Attributes
+    Parameters
     ----------
 
     repeat : anyOf(List(string), :class:`RepeatMapping`)
@@ -15642,7 +17195,7 @@ class NonLayerRepeatSpec(RepeatSpec):
         ``"column"`` to the listed fields to be repeated along the particular orientations.
         The objects ``{"repeat": "row"}`` and ``{"repeat": "column"}`` can be used to refer
         to the repeated field respectively.
-    spec : :class:`Spec`
+    spec : :class:`NonNormalizedSpec`
         A specification of the view that gets repeated.
     align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
         The alignment to apply to grid rows and columns. The supported string values are
@@ -15650,9 +17203,10 @@ class NonLayerRepeatSpec(RepeatSpec):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -15666,10 +17220,10 @@ class NonLayerRepeatSpec(RepeatSpec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -15689,9 +17243,12 @@ class NonLayerRepeatSpec(RepeatSpec):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
@@ -15735,7 +17292,7 @@ class SphereGenerator(Generator):
 
     Mapping(required=[sphere])
 
-    Attributes
+    Parameters
     ----------
 
     sphere : anyOf(boolean, Mapping(required=[]))
@@ -15776,11 +17333,14 @@ class Step(VegaLiteSchema):
 
     Mapping(required=[step])
 
-    Attributes
+    Parameters
     ----------
 
     step : float
         The size (width/height) per discrete step.
+    for : :class:`StepFor`
+        Whether to apply the step to position scale or offset scale when there are both
+        ``x`` and ``xOffset`` or both ``y`` and ``yOffset`` encodings.
     """
     _schema = {'$ref': '#/definitions/Step'}
 
@@ -15788,6 +17348,17 @@ class Step(VegaLiteSchema):
         super(Step, self).__init__(step=step, **kwds)
 
 
+class StepFor(VegaLiteSchema):
+    """StepFor schema wrapper
+
+    enum('position', 'offset')
+    """
+    _schema = {'$ref': '#/definitions/StepFor'}
+
+    def __init__(self, *args):
+        super(StepFor, self).__init__(*args)
+
+
 class Stream(VegaLiteSchema):
     """Stream schema wrapper
 
@@ -15804,7 +17375,7 @@ class DerivedStream(Stream):
 
     Mapping(required=[stream])
 
-    Attributes
+    Parameters
     ----------
 
     stream : :class:`Stream`
@@ -15849,7 +17420,7 @@ class MergedStream(Stream):
 
     Mapping(required=[merge])
 
-    Attributes
+    Parameters
     ----------
 
     merge : List(:class:`Stream`)
@@ -15883,7 +17454,7 @@ class StringFieldDef(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -15894,26 +17465,19 @@ class StringFieldDef(VegaLiteSchema):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -15941,14 +17505,14 @@ class StringFieldDef(VegaLiteSchema):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -15969,15 +17533,12 @@ class StringFieldDef(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        **Default value:**
 
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
         Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
         field. or `a temporal field that gets casted as ordinal
@@ -16003,7 +17564,7 @@ class StringFieldDef(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -16023,55 +17584,67 @@ class StringFieldDef(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/StringFieldDef'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
-                 format=Undefined, formatType=Undefined, labelExpr=Undefined, timeUnit=Undefined,
-                 title=Undefined, type=Undefined, **kwds):
-        super(StringFieldDef, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                             format=format, formatType=formatType, labelExpr=labelExpr,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
+                 format=Undefined, formatType=Undefined, timeUnit=Undefined, title=Undefined,
+                 type=Undefined, **kwds):
+        super(StringFieldDef, self).__init__(aggregate=aggregate, bandPosition=bandPosition, bin=bin,
+                                             field=field, format=format, formatType=formatType,
                                              timeUnit=timeUnit, title=title, type=type, **kwds)
 
 
@@ -16079,10 +17652,8 @@ class StringFieldDefWithCondition(VegaLiteSchema):
     """StringFieldDefWithCondition schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -16093,26 +17664,19 @@ class StringFieldDefWithCondition(VegaLiteSchema):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -16125,9 +17689,8 @@ class StringFieldDefWithCondition(VegaLiteSchema):
 
         **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
-    condition : anyOf(:class:`ConditionalValueDefstringExprRef`,
-    List(:class:`ConditionalValueDefstringExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    condition : anyOf(:class:`ConditionalValueDefstringExprRef`, List(:class:`ConditionalValueDefstringExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
@@ -16148,14 +17711,14 @@ class StringFieldDefWithCondition(VegaLiteSchema):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -16176,15 +17739,12 @@ class StringFieldDefWithCondition(VegaLiteSchema):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        **Default value:**
 
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
         Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
         field. or `a temporal field that gets casted as ordinal
@@ -16210,7 +17770,7 @@ class StringFieldDefWithCondition(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -16230,58 +17790,71 @@ class StringFieldDefWithCondition(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/StringFieldDefWithCondition'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(StringFieldDefWithCondition, self).__init__(aggregate=aggregate, band=band, bin=bin,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, condition=Undefined,
+                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
+        super(StringFieldDefWithCondition, self).__init__(aggregate=aggregate,
+                                                          bandPosition=bandPosition, bin=bin,
                                                           condition=condition, field=field,
                                                           format=format, formatType=formatType,
-                                                          labelExpr=labelExpr, timeUnit=timeUnit,
-                                                          title=title, type=type, **kwds)
+                                                          timeUnit=timeUnit, title=title, type=type,
+                                                          **kwds)
 
 
 class StringValueDefWithCondition(VegaLiteSchema):
@@ -16289,13 +17862,11 @@ class StringValueDefWithCondition(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
     value : anyOf(string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
@@ -16334,7 +17905,7 @@ class StyleConfigIndex(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     arc : :class:`RectConfig`
@@ -16449,42 +18020,31 @@ class FieldOrDatumDefWithConditionStringDatumDefText(TextDef):
     """FieldOrDatumDefWithConditionStringDatumDefText schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
-    condition : anyOf(:class:`ConditionalValueDefTextExprRef`,
-    List(:class:`ConditionalValueDefTextExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
+    condition : anyOf(:class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
         value definitions <https://vega.github.io/vega-lite/docs/condition.html#value>`__
         since Vega-Lite only allows at most one encoded field per encoding channel.
-    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`,
-    :class:`RepeatRef`)
+    datum : anyOf(:class:`PrimitiveValue`, :class:`DateTime`, :class:`ExprRef`, :class:`RepeatRef`)
         A constant value in data domain.
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -16505,15 +18065,32 @@ class FieldOrDatumDefWithConditionStringDatumDefText(TextDef):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        **Default value:**
 
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
+    title : anyOf(:class:`Text`, None)
+        A title for the field. If ``null``, the title will be removed.
+
+        **Default value:**  derived from the field's name and transformation function (
+        ``aggregate``, ``bin`` and ``timeUnit`` ). If the field has an aggregate function,
+        the function is displayed as part of the title (e.g., ``"Sum of Profit"`` ). If the
+        field is binned or has a time unit applied, the applied function is shown in
+        parentheses (e.g., ``"Profit (binned)"``, ``"Transaction Date (year-month)"`` ).
+        Otherwise, the title is simply the field name.
+
+        **Notes** :
+
+        1) You can customize the default field title format by providing the `fieldTitle
+        <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
+        the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
+        function via the compile function's options
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
+
+        2) If both field definition's ``title`` and axis, header, or legend ``title`` are
+        defined, axis/header/legend title will be used.
     type : :class:`Type`
         The type of measurement ( ``"quantitative"``, ``"temporal"``, ``"ordinal"``, or
         ``"nominal"`` ) for the encoded field or constant value ( ``datum`` ). It can also
@@ -16530,68 +18107,78 @@ class FieldOrDatumDefWithConditionStringDatumDefText(TextDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<StringDatumDef,Text>'}
 
-    def __init__(self, band=Undefined, condition=Undefined, datum=Undefined, format=Undefined,
-                 formatType=Undefined, labelExpr=Undefined, type=Undefined, **kwds):
-        super(FieldOrDatumDefWithConditionStringDatumDefText, self).__init__(band=band,
+    def __init__(self, bandPosition=Undefined, condition=Undefined, datum=Undefined, format=Undefined,
+                 formatType=Undefined, title=Undefined, type=Undefined, **kwds):
+        super(FieldOrDatumDefWithConditionStringDatumDefText, self).__init__(bandPosition=bandPosition,
                                                                              condition=condition,
                                                                              datum=datum, format=format,
                                                                              formatType=formatType,
-                                                                             labelExpr=labelExpr,
-                                                                             type=type, **kwds)
+                                                                             title=title, type=type,
+                                                                             **kwds)
 
 
 class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
     """FieldOrDatumDefWithConditionStringFieldDefText schema wrapper
 
     Mapping(required=[])
-    A FieldDef with Condition :raw-html:`<ValueDef>` {    condition: {value: ...},    field:
-    ...,    ... }
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -16602,26 +18189,19 @@ class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -16634,9 +18214,8 @@ class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
 
         **See also:** `bin <https://vega.github.io/vega-lite/docs/bin.html>`__
         documentation.
-    condition : anyOf(:class:`ConditionalValueDefTextExprRef`,
-    List(:class:`ConditionalValueDefTextExprRef`))
-        One or more value definition(s) with `a selection or a test predicate
+    condition : anyOf(:class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
+        One or more value definition(s) with `a parameter or a test predicate
         <https://vega.github.io/vega-lite/docs/condition.html>`__.
 
         **Note:** A field definition's ``condition`` property can only contain `conditional
@@ -16657,14 +18236,14 @@ class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
         about escaping in the `field documentation
         <https://vega.github.io/vega-lite/docs/field.html>`__. 2) ``field`` is not required
         if ``aggregate`` is ``count``.
-    format : anyOf(string, :class:`Dictunknown`)
+    format : anyOf(string, :class:`Dict`)
         When used with the default ``"number"`` and ``"time"`` format type, the text
         formatting pattern for labels of guides (axes, legends, headers) and text marks.
 
 
         * If the format type is ``"number"`` (e.g., for quantitative fields), this is D3's
-          `number format pattern <https://github.com/d3/d3-format#locale_format>`__. - If
-          the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
+          `number format pattern <https://github.com/d3/d3-format#locale_format>`__.
+        * If the format type is ``"time"`` (e.g., for temporal fields), this is D3's `time
           format pattern <https://github.com/d3/d3-time-format#locale_format>`__.
 
         See the `format documentation <https://vega.github.io/vega-lite/docs/format.html>`__
@@ -16685,15 +18264,12 @@ class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
         format type
         <https://vega.github.io/vega-lite/docs/config.html#custom-format-type>`__.
 
-        **Default value:** - ``"time"`` for temporal fields and ordinal and nominal fields
-        with ``timeUnit``. - ``"number"`` for quantitative fields as well as ordinal and
-        nominal fields without ``timeUnit``.
-    labelExpr : string
-        `Vega expression <https://vega.github.io/vega/docs/expressions/>`__ for customizing
-        labels text.
+        **Default value:**
 
-        **Note:** The label text and value can be assessed via the ``label`` and ``value``
-        properties of the axis's backing ``datum`` object.
+
+        * ``"time"`` for temporal fields and ordinal and nominal fields with ``timeUnit``.
+        * ``"number"`` for quantitative fields as well as ordinal and nominal fields without
+          ``timeUnit``.
     timeUnit : anyOf(:class:`TimeUnit`, :class:`TimeUnitParams`)
         Time unit (e.g., ``year``, ``yearmonth``, ``month``, ``hours`` ) for a temporal
         field. or `a temporal field that gets casted as ordinal
@@ -16719,7 +18295,7 @@ class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -16739,59 +18315,71 @@ class FieldOrDatumDefWithConditionStringFieldDefText(TextDef):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/FieldOrDatumDefWithCondition<StringFieldDef,Text>'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, condition=Undefined,
-                 field=Undefined, format=Undefined, formatType=Undefined, labelExpr=Undefined,
-                 timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, condition=Undefined,
+                 field=Undefined, format=Undefined, formatType=Undefined, timeUnit=Undefined,
+                 title=Undefined, type=Undefined, **kwds):
         super(FieldOrDatumDefWithConditionStringFieldDefText, self).__init__(aggregate=aggregate,
-                                                                             band=band, bin=bin,
+                                                                             bandPosition=bandPosition,
+                                                                             bin=bin,
                                                                              condition=condition,
                                                                              field=field, format=format,
                                                                              formatType=formatType,
-                                                                             labelExpr=labelExpr,
                                                                              timeUnit=timeUnit,
                                                                              title=title, type=type,
                                                                              **kwds)
@@ -16813,7 +18401,7 @@ class TickConfig(AnyMarkConfig):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : anyOf(:class:`Align`, :class:`ExprRef`)
@@ -16822,15 +18410,25 @@ class TickConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     angle : anyOf(float, :class:`ExprRef`)
-
+        The rotation angle of the text, in degrees.
     aria : anyOf(boolean, :class:`ExprRef`)
-
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG element, removing the mark item from the ARIA accessibility tree.
     ariaRole : anyOf(string, :class:`ExprRef`)
-
+        Sets the type of user interface element of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "role" attribute. Warning: this
+        property is experimental and may be changed in the future.
     ariaRoleDescription : anyOf(string, :class:`ExprRef`)
-
+        A human-readable, author-localized description for the role of the mark item for
+        `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the "aria-roledescription" attribute.
+        Warning: this property is experimental and may be changed in the future.
     aspect : anyOf(boolean, :class:`ExprRef`)
-
+        Whether to keep aspect ratio of image marks.
     bandSize : float
         The width of the ticks.
 
@@ -16848,48 +18446,80 @@ class TickConfig(AnyMarkConfig):
 
         **Note:** Expression reference is *not* supported for range marks.
     blend : anyOf(:class:`Blend`, :class:`ExprRef`)
+        The color blend mode for drawing an item on its current background. Any valid `CSS
+        mix-blend-mode <https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode>`__
+        value can be used.
 
+        __Default value:__ ``"source-over"``
     color : anyOf(:class:`Color`, :class:`Gradient`, :class:`ExprRef`)
         Default color.
 
         **Default value:** :raw-html:`<span style="color: #4682b4;">&#9632;</span>`
         ``"#4682b4"``
 
-        **Note:** - This property cannot be used in a `style config
-        <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__. - The ``fill``
-        and ``stroke`` properties have higher precedence than ``color`` and will override
-        ``color``.
+        **Note:**
+
+
+        * This property cannot be used in a `style config
+          <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
+        * The ``fill`` and ``stroke`` properties have higher precedence than ``color`` and
+          will override ``color``.
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cornerRadiusBottomLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom left corner.
 
+        **Default value:** ``0``
     cornerRadiusBottomRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' bottom right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopLeft : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top right corner.
 
+        **Default value:** ``0``
     cornerRadiusTopRight : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles' top left corner.
 
+        **Default value:** ``0``
     cursor : anyOf(:class:`Cursor`, :class:`ExprRef`)
-
+        The mouse cursor used over the mark. Any valid `CSS cursor type
+        <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
     description : anyOf(string, :class:`ExprRef`)
-
+        A text description of the mark item for `ARIA accessibility
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ (SVG output
+        only). If specified, this property determines the `"aria-label" attribute
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute>`__.
     dir : anyOf(:class:`TextDirection`, :class:`ExprRef`)
+        The direction of the text. One of ``"ltr"`` (left-to-right) or ``"rtl"``
+        (right-to-left). This property determines on which side is truncated in response to
+        the limit parameter.
 
+        **Default value:** ``"ltr"``
     dx : anyOf(float, :class:`ExprRef`)
-
+        The horizontal offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     dy : anyOf(float, :class:`ExprRef`)
-
+        The vertical offset, in pixels, between the text label and its anchor point. The
+        offset is applied after rotation by the *angle* property.
     ellipsis : anyOf(string, :class:`ExprRef`)
+        The ellipsis string for text truncated in response to the limit parameter.
 
+        **Default value:** ``"…"``
     endAngle : anyOf(float, :class:`ExprRef`)
-
+        The end angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     fill : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default fill color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove fill.
 
         **Default value:** (None)
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     filled : boolean
         Whether the mark's color should be used as fill color instead of stroke color.
 
@@ -16901,34 +18531,68 @@ class TickConfig(AnyMarkConfig):
         **Note:** This property cannot be used in a `style config
         <https://vega.github.io/vega-lite/docs/mark.html#style-config>`__.
     font : anyOf(string, :class:`ExprRef`)
-
+        The typeface to set the text in (e.g., ``"Helvetica Neue"`` ).
     fontSize : anyOf(float, :class:`ExprRef`)
+        The font size, in pixels.
 
+        **Default value:** ``11``
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        The font style (e.g., ``"italic"`` ).
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        The font weight. This can be either a string (e.g ``"bold"``, ``"normal"`` ) or a
+        number ( ``100``, ``200``, ``300``, ..., ``900`` where ``"normal"`` = ``400`` and
+        ``"bold"`` = ``700`` ).
     height : anyOf(float, :class:`ExprRef`)
-
+        Height of the marks.
     href : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        A URL to load upon mouse click. If defined, the mark acts as a hyperlink.
     innerRadius : anyOf(float, :class:`ExprRef`)
         The inner radius in pixels of arc marks. ``innerRadius`` is an alias for
         ``radius2``.
-    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    interpolate : anyOf(:class:`Interpolate`, :class:`ExprRef`)
+        The line interpolation method to use for line and area marks. One of the following:
+
+
+        * ``"linear"`` : piecewise linear segments, as in a polyline.
+        * ``"linear-closed"`` : close the linear segments to form a polygon.
+        * ``"step"`` : alternate between horizontal and vertical segments, as in a step
+          function.
+        * ``"step-before"`` : alternate between vertical and horizontal segments, as in a
+          step function.
+        * ``"step-after"`` : alternate between horizontal and vertical segments, as in a
+          step function.
+        * ``"basis"`` : a B-spline, with control point duplication on the ends.
+        * ``"basis-open"`` : an open B-spline; may not intersect the start or end.
+        * ``"basis-closed"`` : a closed B-spline, as in a loop.
+        * ``"cardinal"`` : a Cardinal spline, with control point duplication on the ends.
+        * ``"cardinal-open"`` : an open Cardinal spline; may not intersect the start or end,
+          but will intersect other control points.
+        * ``"cardinal-closed"`` : a closed Cardinal spline, as in a loop.
+        * ``"bundle"`` : equivalent to basis, except the tension parameter is used to
+          straighten the spline.
+        * ``"monotone"`` : cubic interpolation that preserves monotonicity in y.
     invalid : enum('filter', None)
         Defines how Vega-Lite should handle marks for invalid values ( ``null`` and ``NaN``
-        ). - If set to ``"filter"`` (default), all data items with null values will be
-        skipped (for line, trail, and area marks) or filtered (for other marks). - If
-        ``null``, all data items are included. In this case, invalid values will be
-        interpreted as zeroes.
+        ).
+
+
+        * If set to ``"filter"`` (default), all data items with null values will be skipped
+          (for line, trail, and area marks) or filtered (for other marks).
+        * If ``null``, all data items are included. In this case, invalid values will be
+          interpreted as zeroes.
     limit : anyOf(float, :class:`ExprRef`)
+        The maximum length of the text mark in pixels. The text value will be automatically
+        truncated if the rendered size exceeds the limit.
 
+        **Default value:** ``0`` -- indicating no limit
     lineBreak : anyOf(string, :class:`ExprRef`)
-
+        A delimiter, such as a newline character, upon which to break text strings into
+        multiple lines. This property is ignored if the text is array-valued.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        The line height in pixels (the spacing between subsequent lines of text) for
+        multi-line text marks.
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -16939,65 +18603,108 @@ class TickConfig(AnyMarkConfig):
         ``false`` to make the lines use the original order in the data sources.
     orient : :class:`Orientation`
         The orientation of a non-stacked bar, tick, area, and line charts. The value is
-        either horizontal (default) or vertical. - For bar, rule and tick, this determines
-        whether the size of the bar and tick should be applied to x or y dimension. - For
-        area, this property determines the orient property of the Vega output. - For line
-        and trail marks, this property determines the sort order of the points in the line
-        if ``config.sortLineBy`` is not specified. For stacked charts, this is always
-        determined by the orientation of the stack; therefore explicitly specified value
-        will be ignored.
+        either horizontal (default) or vertical.
+
+
+        * For bar, rule and tick, this determines whether the size of the bar and tick
+          should be applied to x or y dimension.
+        * For area, this property determines the orient property of the Vega output.
+        * For line and trail marks, this property determines the sort order of the points in
+          the line if ``config.sortLineBy`` is not specified. For stacked charts, this is
+          always determined by the orientation of the stack; therefore explicitly specified
+          value will be ignored.
     outerRadius : anyOf(float, :class:`ExprRef`)
         The outer radius in pixels of arc marks. ``outerRadius`` is an alias for ``radius``.
-    padAngle : anyOf(float, :class:`ExprRef`)
 
+        **Default value:** ``0``
+    padAngle : anyOf(float, :class:`ExprRef`)
+        The angular padding applied to sides of the arc, in radians.
     radius : anyOf(float, :class:`ExprRef`)
         For arc mark, the primary (outer) radius in pixels.
 
         For text marks, polar coordinate radial offset, in pixels, of the text from the
         origin determined by the ``x`` and ``y`` properties.
+
+        **Default value:** ``min(plot_width, plot_height)/2``
     radius2 : anyOf(float, :class:`ExprRef`)
         The secondary (inner) radius in pixels of arc marks.
+
+        **Default value:** ``0``
     shape : anyOf(anyOf(:class:`SymbolShape`, string), :class:`ExprRef`)
+        Shape of the point marks. Supported values include:
+
 
+        * plotting shapes: ``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``,
+          ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, or
+          ``"triangle-left"``.
+        * the line symbol ``"stroke"``
+        * centered directional shapes ``"arrow"``, ``"wedge"``, or ``"triangle"``
+        * a custom `SVG path string
+          <https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths>`__ (For correct
+          sizing, custom shape paths should be defined within a square bounding box with
+          coordinates ranging from -1 to 1 along both the x and y dimensions.)
+
+        **Default value:** ``"circle"``
     size : anyOf(float, :class:`ExprRef`)
-        Default size for marks. - For ``point`` / ``circle`` / ``square``, this represents
-        the pixel area of the marks. Note that this value sets the area of the symbol; the
-        side lengths will increase with the square root of this value. - For ``bar``, this
-        represents the band size of the bar, in pixels. - For ``text``, this represents the
-        font size, in pixels.
-
-        **Default value:** - ``30`` for point, circle, square marks; width/height's ``step``
-        - ``2`` for bar marks with discrete dimensions; - ``5`` for bar marks with
-        continuous dimensions; - ``11`` for text marks.
-    smooth : anyOf(boolean, :class:`ExprRef`)
+        Default size for marks.
 
-    startAngle : anyOf(float, :class:`ExprRef`)
 
+        * For ``point`` / ``circle`` / ``square``, this represents the pixel area of the
+          marks. Note that this value sets the area of the symbol; the side lengths will
+          increase with the square root of this value.
+        * For ``bar``, this represents the band size of the bar, in pixels.
+        * For ``text``, this represents the font size, in pixels.
+
+        **Default value:**
+
+
+        * ``30`` for point, circle, square marks; width/height's ``step``
+        * ``2`` for bar marks with discrete dimensions;
+        * ``5`` for bar marks with continuous dimensions;
+        * ``11`` for text marks.
+    smooth : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag (default true) indicating if the image should be smoothed when
+        resized. If false, individual pixels should be scaled directly rather than
+        interpolated with smoothing. For SVG rendering, this option may not work in some
+        browsers due to lack of standardization.
+    startAngle : anyOf(float, :class:`ExprRef`)
+        The start angle in radians for arc marks. A value of ``0`` indicates up (north),
+        increasing values proceed clockwise.
     stroke : anyOf(:class:`Color`, :class:`Gradient`, None, :class:`ExprRef`)
         Default stroke color. This property has higher precedence than ``config.color``. Set
         to ``null`` to remove stroke.
 
         **Default value:** (None)
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset in pixels at which to draw the group stroke and fill. If unspecified, the
+        default behavior is to dynamically offset stroked groups such that 1 pixel stroke
+        widths align with the pixel grid.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     tension : anyOf(float, :class:`ExprRef`)
-
+        Depending on the interpolation type, sets the tension parameter (for line and area
+        marks).
     text : anyOf(:class:`Text`, :class:`ExprRef`)
-
+        Placeholder text if the ``text`` channel is not specified
     theta : anyOf(float, :class:`ExprRef`)
         For arc marks, the arc length in radians if theta2 is not specified, otherwise the
         start arc angle. (A value of 0 indicates up or “north”, increasing values proceed
@@ -17011,32 +18718,33 @@ class TickConfig(AnyMarkConfig):
         Thickness of the tick mark.
 
         **Default value:**  ``1``
-    timeUnitBand : float
-        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
-        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
-        marks will be half of the time unit band step.
     timeUnitBandPosition : float
         Default relative band position for a time unit. If set to ``0``, the marks will be
         positioned at the beginning of the time unit band step. If set to ``0.5``, the marks
         will be positioned in the middle of the time unit band step.
+    timeUnitBandSize : float
+        Default relative band size for a time unit. If set to ``1``, the bandwidth of the
+        marks will be equal to the time unit band step. If set to ``0.5``, bandwidth of the
+        marks will be half of the time unit band step.
     tooltip : anyOf(float, string, boolean, :class:`TooltipContent`, :class:`ExprRef`, None)
         The tooltip text string to show upon mouse hover or an object defining which fields
         should the tooltip be derived from.
 
 
         * If ``tooltip`` is ``true`` or ``{"content": "encoding"}``, then all fields from
-          ``encoding`` will be used. - If ``tooltip`` is ``{"content": "data"}``, then all
-          fields that appear in the highlighted data point will be used. - If set to
-          ``null`` or ``false``, then no tooltip will be used.
+          ``encoding`` will be used.
+        * If ``tooltip`` is ``{"content": "data"}``, then all fields that appear in the
+          highlighted data point will be used.
+        * If set to ``null`` or ``false``, then no tooltip will be used.
 
         See the `tooltip <https://vega.github.io/vega-lite/docs/tooltip.html>`__
         documentation for a detailed discussion about tooltip  in Vega-Lite.
 
         **Default value:** ``null``
     url : anyOf(:class:`URI`, :class:`ExprRef`)
-
+        The URL of the image file for image marks.
     width : anyOf(float, :class:`ExprRef`)
-
+        Width of the marks.
     x : anyOf(float, string, :class:`ExprRef`)
         X coordinates of the marks, or width of horizontal ``"bar"`` and ``"area"`` without
         specified ``x2`` or ``width``.
@@ -17078,8 +18786,8 @@ class TickConfig(AnyMarkConfig):
                  strokeCap=Undefined, strokeDash=Undefined, strokeDashOffset=Undefined,
                  strokeJoin=Undefined, strokeMiterLimit=Undefined, strokeOffset=Undefined,
                  strokeOpacity=Undefined, strokeWidth=Undefined, tension=Undefined, text=Undefined,
-                 theta=Undefined, theta2=Undefined, thickness=Undefined, timeUnitBand=Undefined,
-                 timeUnitBandPosition=Undefined, tooltip=Undefined, url=Undefined, width=Undefined,
+                 theta=Undefined, theta2=Undefined, thickness=Undefined, timeUnitBandPosition=Undefined,
+                 timeUnitBandSize=Undefined, tooltip=Undefined, url=Undefined, width=Undefined,
                  x=Undefined, x2=Undefined, y=Undefined, y2=Undefined, **kwds):
         super(TickConfig, self).__init__(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                                          ariaRoleDescription=ariaRoleDescription, aspect=aspect,
@@ -17104,9 +18812,9 @@ class TickConfig(AnyMarkConfig):
                                          strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                                          strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
                                          tension=tension, text=text, theta=theta, theta2=theta2,
-                                         thickness=thickness, timeUnitBand=timeUnitBand,
-                                         timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip,
-                                         url=url, width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
+                                         thickness=thickness, timeUnitBandPosition=timeUnitBandPosition,
+                                         timeUnitBandSize=timeUnitBandSize, tooltip=tooltip, url=url,
+                                         width=width, x=x, x2=x2, y=y, y2=y2, **kwds)
 
 
 class TickCount(VegaLiteSchema):
@@ -17136,7 +18844,7 @@ class TimeIntervalStep(TickCount):
 
     Mapping(required=[interval, step])
 
-    Attributes
+    Parameters
     ----------
 
     interval : :class:`TimeInterval`
@@ -17150,6 +18858,41 @@ class TimeIntervalStep(TickCount):
         super(TimeIntervalStep, self).__init__(interval=interval, step=step, **kwds)
 
 
+class TimeLocale(VegaLiteSchema):
+    """TimeLocale schema wrapper
+
+    Mapping(required=[dateTime, date, time, periods, days, shortDays, months, shortMonths])
+    Locale definition for formatting dates and times.
+
+    Parameters
+    ----------
+
+    date : string
+        The date (%x) format specifier (e.g., "%m/%d/%Y").
+    dateTime : string
+        The date and time (%c) format specifier (e.g., "%a %b %e %X %Y").
+    days : :class:`Vector7string`
+        The full names of the weekdays, starting with Sunday.
+    months : :class:`Vector12string`
+        The full names of the months (starting with January).
+    periods : :class:`Vector2string`
+        The A.M. and P.M. equivalents (e.g., ["AM", "PM"]).
+    shortDays : :class:`Vector7string`
+        The abbreviated names of the weekdays, starting with Sunday.
+    shortMonths : :class:`Vector12string`
+        The abbreviated names of the months (starting with January).
+    time : string
+        The time (%X) format specifier (e.g., "%H:%M:%S").
+    """
+    _schema = {'$ref': '#/definitions/TimeLocale'}
+
+    def __init__(self, date=Undefined, dateTime=Undefined, days=Undefined, months=Undefined,
+                 periods=Undefined, shortDays=Undefined, shortMonths=Undefined, time=Undefined, **kwds):
+        super(TimeLocale, self).__init__(date=date, dateTime=dateTime, days=days, months=months,
+                                         periods=periods, shortDays=shortDays, shortMonths=shortMonths,
+                                         time=time, **kwds)
+
+
 class TimeUnit(VegaLiteSchema):
     """TimeUnit schema wrapper
 
@@ -17217,7 +18960,7 @@ class TimeUnitParams(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     maxbins : float
@@ -17251,18 +18994,25 @@ class TitleConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     align : :class:`Align`
         Horizontal text alignment for title text. One of ``"left"``, ``"center"``, or
         ``"right"``.
     anchor : anyOf(:class:`TitleAnchor`, :class:`ExprRef`)
-
+        The anchor position for placing the title and subtitle text. One of ``"start"``,
+        ``"middle"``, or ``"end"``. For example, with an orientation of top these anchor
+        positions map to a left-, center-, or right-aligned title.
     angle : anyOf(float, :class:`ExprRef`)
-
+        Angle in degrees of title and subtitle text.
     aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG group, removing the title from the ARIA accessibility tree.
 
+        **Default value:** ``true``
     baseline : :class:`TextBaseline`
         Vertical text baseline for title and subtitle text. One of ``"alphabetic"``
         (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or
@@ -17270,45 +19020,56 @@ class TitleConfig(VegaLiteSchema):
         to ``"top"`` and ``"bottom"``, but are calculated relative to the *lineHeight*
         rather than *fontSize* alone.
     color : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Text color for title text.
     dx : anyOf(float, :class:`ExprRef`)
-
+        Delta offset for title and subtitle text x-coordinate.
     dy : anyOf(float, :class:`ExprRef`)
-
+        Delta offset for title and subtitle text y-coordinate.
     font : anyOf(string, :class:`ExprRef`)
-
+        Font name for title text.
     fontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size in pixels for title text.
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style for title text.
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight for title text. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     frame : anyOf(anyOf(:class:`TitleFrame`, string), :class:`ExprRef`)
-
+        The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative
+        to the full bounding box) or ``"group"`` (to anchor relative to the group width or
+        height).
     limit : anyOf(float, :class:`ExprRef`)
-
+        The maximum allowed length in pixels of title and subtitle text.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line title text or title text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     offset : anyOf(float, :class:`ExprRef`)
-
+        The orthogonal offset in pixels by which to displace the title group from its
+        position along the edge of the chart.
     orient : anyOf(:class:`TitleOrient`, :class:`ExprRef`)
-
+        Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` )
     subtitleColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Text color for subtitle text.
     subtitleFont : anyOf(string, :class:`ExprRef`)
-
+        Font name for subtitle text.
     subtitleFontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size in pixels for subtitle text.
     subtitleFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style for subtitle text.
     subtitleFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight for subtitle text. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     subtitleLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line subtitle text.
     subtitlePadding : anyOf(float, :class:`ExprRef`)
-
+        The padding in pixels between title and subtitle text.
     zindex : anyOf(float, :class:`ExprRef`)
+        The integer z-index indicating the layering of the title group relative to other
+        axis, mark, and legend groups.
 
+        **Default value:** ``0``.
     """
     _schema = {'$ref': '#/definitions/TitleConfig'}
 
@@ -17358,7 +19119,7 @@ class TitleParams(VegaLiteSchema):
 
     Mapping(required=[text])
 
-    Attributes
+    Parameters
     ----------
 
     text : anyOf(:class:`Text`, :class:`ExprRef`)
@@ -17382,9 +19143,14 @@ class TitleParams(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/layer.html>`__ views. For other composite
         views, ``anchor`` is always ``"start"``.
     angle : anyOf(float, :class:`ExprRef`)
-
+        Angle in degrees of title and subtitle text.
     aria : anyOf(boolean, :class:`ExprRef`)
+        A boolean flag indicating if `ARIA attributes
+        <https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA>`__ should be
+        included (SVG output only). If ``false``, the "aria-hidden" attribute will be set on
+        the output SVG group, removing the title from the ARIA accessibility tree.
 
+        **Default value:** ``true``
     baseline : :class:`TextBaseline`
         Vertical text baseline for title and subtitle text. One of ``"alphabetic"``
         (default), ``"top"``, ``"middle"``, ``"bottom"``, ``"line-top"``, or
@@ -17392,29 +19158,35 @@ class TitleParams(VegaLiteSchema):
         to ``"top"`` and ``"bottom"``, but are calculated relative to the *lineHeight*
         rather than *fontSize* alone.
     color : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Text color for title text.
     dx : anyOf(float, :class:`ExprRef`)
-
+        Delta offset for title and subtitle text x-coordinate.
     dy : anyOf(float, :class:`ExprRef`)
-
+        Delta offset for title and subtitle text y-coordinate.
     font : anyOf(string, :class:`ExprRef`)
-
+        Font name for title text.
     fontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size in pixels for title text.
     fontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style for title text.
     fontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight for title text. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     frame : anyOf(anyOf(:class:`TitleFrame`, string), :class:`ExprRef`)
-
+        The reference frame for the anchor position, one of ``"bounds"`` (to anchor relative
+        to the full bounding box) or ``"group"`` (to anchor relative to the group width or
+        height).
     limit : anyOf(float, :class:`ExprRef`)
-
+        The maximum allowed length in pixels of title and subtitle text.
     lineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line title text or title text with ``"line-top"`` or
+        ``"line-bottom"`` baseline.
     offset : anyOf(float, :class:`ExprRef`)
-
+        The orthogonal offset in pixels by which to displace the title group from its
+        position along the edge of the chart.
     orient : anyOf(:class:`TitleOrient`, :class:`ExprRef`)
-
+        Default title orientation ( ``"top"``, ``"bottom"``, ``"left"``, or ``"right"`` )
     style : anyOf(string, List(string))
         A `mark style property <https://vega.github.io/vega-lite/docs/config.html#style>`__
         to apply to the title text mark.
@@ -17423,19 +19195,21 @@ class TitleParams(VegaLiteSchema):
     subtitle : :class:`Text`
         The subtitle Text.
     subtitleColor : anyOf(anyOf(None, :class:`Color`), :class:`ExprRef`)
-
+        Text color for subtitle text.
     subtitleFont : anyOf(string, :class:`ExprRef`)
-
+        Font name for subtitle text.
     subtitleFontSize : anyOf(float, :class:`ExprRef`)
-
+        Font size in pixels for subtitle text.
     subtitleFontStyle : anyOf(:class:`FontStyle`, :class:`ExprRef`)
-
+        Font style for subtitle text.
     subtitleFontWeight : anyOf(:class:`FontWeight`, :class:`ExprRef`)
-
+        Font weight for subtitle text. This can be either a string (e.g ``"bold"``,
+        ``"normal"`` ) or a number ( ``100``, ``200``, ``300``, ..., ``900`` where
+        ``"normal"`` = ``400`` and ``"bold"`` = ``700`` ).
     subtitleLineHeight : anyOf(float, :class:`ExprRef`)
-
+        Line height in pixels for multi-line subtitle text.
     subtitlePadding : anyOf(float, :class:`ExprRef`)
-
+        The padding in pixels between title and subtitle text.
     zindex : float
         The integer z-index indicating the layering of the title group relative to other
         axis, mark and legend groups.
@@ -17470,7 +19244,7 @@ class TooltipContent(VegaLiteSchema):
 
     Mapping(required=[content])
 
-    Attributes
+    Parameters
     ----------
 
     content : enum('encoding', 'data')
@@ -17482,13 +19256,80 @@ class TooltipContent(VegaLiteSchema):
         super(TooltipContent, self).__init__(content=content, **kwds)
 
 
+class TopLevelParameter(VegaLiteSchema):
+    """TopLevelParameter schema wrapper
+
+    anyOf(:class:`VariableParameter`, :class:`TopLevelSelectionParameter`)
+    """
+    _schema = {'$ref': '#/definitions/TopLevelParameter'}
+
+    def __init__(self, *args, **kwds):
+        super(TopLevelParameter, self).__init__(*args, **kwds)
+
+
+class TopLevelSelectionParameter(TopLevelParameter):
+    """TopLevelSelectionParameter schema wrapper
+
+    Mapping(required=[name, select])
+
+    Parameters
+    ----------
+
+    name : :class:`ParameterName`
+        Required. A unique name for the selection parameter. Selection names should be valid
+        JavaScript identifiers: they should contain only alphanumeric characters (or "$", or
+        "_") and may not start with a digit. Reserved keywords that may not be used as
+        parameter names are "datum", "event", "item", and "parent".
+    select : anyOf(:class:`SelectionType`, :class:`PointSelectionConfig`, :class:`IntervalSelectionConfig`)
+        Determines the default event processing and data query for the selection. Vega-Lite
+        currently supports two selection types:
+
+
+        * ``"point"`` -- to select multiple discrete data values; the first value is
+          selected on ``click`` and additional values toggled on shift-click.
+        * ``"interval"`` -- to select a continuous range of data values on ``drag``.
+    bind : anyOf(:class:`Binding`, Mapping(required=[]), :class:`LegendBinding`, string)
+        When set, a selection is populated by input elements (also known as dynamic query
+        widgets) or by interacting with the corresponding legend. Direct manipulation
+        interaction is disabled by default; to re-enable it, set the selection's `on
+        <https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties>`__
+        property.
+
+        Legend bindings are restricted to selections that only specify a single field or
+        encoding.
+
+        Query widget binding takes the form of Vega's `input element binding definition
+        <https://vega.github.io/vega/docs/signals/#bind>`__ or can be a mapping between
+        projected field/encodings and binding definitions.
+
+        **See also:** `bind <https://vega.github.io/vega-lite/docs/bind.html>`__
+        documentation.
+    value : anyOf(:class:`SelectionInit`, List(:class:`SelectionInitMapping`), :class:`SelectionInitIntervalMapping`)
+        Initialize the selection with a mapping between `projected channels or field names
+        <https://vega.github.io/vega-lite/docs/selection.html#project>`__ and initial
+        values.
+
+        **See also:** `init <https://vega.github.io/vega-lite/docs/value.html>`__
+        documentation.
+    views : List(string)
+        By default, top-level selections are applied to every view in the visualization. If
+        this property is specified, selections will only be applied to views with the given
+        names.
+    """
+    _schema = {'$ref': '#/definitions/TopLevelSelectionParameter'}
+
+    def __init__(self, name=Undefined, select=Undefined, bind=Undefined, value=Undefined,
+                 views=Undefined, **kwds):
+        super(TopLevelSelectionParameter, self).__init__(name=name, select=select, bind=bind,
+                                                         value=value, views=views, **kwds)
+
+
 class TopLevelSpec(VegaLiteSchema):
     """TopLevelSpec schema wrapper
 
     anyOf(:class:`TopLevelUnitSpec`, :class:`TopLevelFacetSpec`, :class:`TopLevelLayerSpec`,
-    :class:`TopLevelRepeatSpec`, :class:`TopLevelNormalizedConcatSpecGenericSpec`,
-    :class:`TopLevelNormalizedVConcatSpecGenericSpec`,
-    :class:`TopLevelNormalizedHConcatSpecGenericSpec`)
+    :class:`TopLevelRepeatSpec`, :class:`TopLevelConcatSpec`, :class:`TopLevelVConcatSpec`,
+    :class:`TopLevelHConcatSpec`)
     A Vega-Lite top-level specification. This is the root class for all Vega-Lite
     specifications. (The json schema is generated from this type.)
     """
@@ -17498,34 +19339,26 @@ class TopLevelSpec(VegaLiteSchema):
         super(TopLevelSpec, self).__init__(*args, **kwds)
 
 
-class TopLevelFacetSpec(TopLevelSpec):
-    """TopLevelFacetSpec schema wrapper
+class TopLevelConcatSpec(TopLevelSpec):
+    """TopLevelConcatSpec schema wrapper
 
-    Mapping(required=[data, facet, spec])
+    Mapping(required=[concat])
 
-    Attributes
+    Parameters
     ----------
 
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
-    facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`)
-        Definition for how to facet the data. One of: 1) `a field definition for faceting
-        the plot by one field
-        <https://vega.github.io/vega-lite/docs/facet.html#field-def>`__ 2) `An object that
-        maps row and column channels to their field definitions
-        <https://vega.github.io/vega-lite/docs/facet.html#mapping>`__
-    spec : anyOf(:class:`LayerSpec`, :class:`UnitSpecWithFrame`)
-        A specification of the view that gets faceted.
+    concat : List(:class:`NonNormalizedSpec`)
+        A list of views to be concatenated.
     align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
         The alignment to apply to grid rows and columns. The supported string values are
         ``"all"``, ``"each"``, and ``"none"``.
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -17549,10 +19382,10 @@ class TopLevelFacetSpec(TopLevelSpec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -17572,15 +19405,21 @@ class TopLevelFacetSpec(TopLevelSpec):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
     config : :class:`Config`
         Vega-Lite configuration object. This property can only be defined at the top-level
         of a specification.
+    data : anyOf(:class:`Data`, None)
+        An object describing the data source. Set to ``null`` to ignore the parent's data
+        source. If no data is set, it is derived from the parent.
     datasets : :class:`Datasets`
         A global data store for named datasets. This is a mapping from names to inline
         datasets. This can be an array of objects or primitive values or a string. Arrays of
@@ -17596,8 +19435,8 @@ class TopLevelFacetSpec(TopLevelSpec):
         "bottom": 5}`` to specify padding for each side of the visualization.
 
         **Default value** : ``5``
-    params : List(:class:`Parameter`)
-        Dynamic variables that parameterize a visualization.
+    params : List(:class:`TopLevelParameter`)
+        Dynamic variables or selections that parameterize a visualization.
     resolve : :class:`Resolve`
         Scale, axis, and legend resolutions for view composition specifications.
     spacing : anyOf(float, :class:`RowColnumber`)
@@ -17612,179 +19451,61 @@ class TopLevelFacetSpec(TopLevelSpec):
         Title for the plot.
     transform : List(:class:`Transform`)
         An array of data transformations such as filter and new field calculation.
-    usermeta : :class:`Dictunknown`
+    usermeta : :class:`Dict`
         Optional metadata that will be passed to Vega. This object is completely ignored by
         Vega and Vega-Lite and can be used for custom metadata.
     $schema : string
         URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
         Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema``
+        ``https://vega.github.io/schema/vega-lite/v5.json``. Setting the ``$schema``
         property allows automatic validation and autocomplete in editors that support JSON
         schema.
     """
-    _schema = {'$ref': '#/definitions/TopLevelFacetSpec'}
+    _schema = {'$ref': '#/definitions/TopLevelConcatSpec'}
 
-    def __init__(self, data=Undefined, facet=Undefined, spec=Undefined, align=Undefined,
-                 autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined,
-                 columns=Undefined, config=Undefined, datasets=Undefined, description=Undefined,
-                 name=Undefined, padding=Undefined, params=Undefined, resolve=Undefined,
-                 spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
-        super(TopLevelFacetSpec, self).__init__(data=data, facet=facet, spec=spec, align=align,
-                                                autosize=autosize, background=background, bounds=bounds,
-                                                center=center, columns=columns, config=config,
-                                                datasets=datasets, description=description, name=name,
-                                                padding=padding, params=params, resolve=resolve,
-                                                spacing=spacing, title=title, transform=transform,
-                                                usermeta=usermeta, **kwds)
+    def __init__(self, concat=Undefined, align=Undefined, autosize=Undefined, background=Undefined,
+                 bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined,
+                 data=Undefined, datasets=Undefined, description=Undefined, name=Undefined,
+                 padding=Undefined, params=Undefined, resolve=Undefined, spacing=Undefined,
+                 title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
+        super(TopLevelConcatSpec, self).__init__(concat=concat, align=align, autosize=autosize,
+                                                 background=background, bounds=bounds, center=center,
+                                                 columns=columns, config=config, data=data,
+                                                 datasets=datasets, description=description, name=name,
+                                                 padding=padding, params=params, resolve=resolve,
+                                                 spacing=spacing, title=title, transform=transform,
+                                                 usermeta=usermeta, **kwds)
 
 
-class TopLevelLayerSpec(TopLevelSpec):
-    """TopLevelLayerSpec schema wrapper
+class TopLevelFacetSpec(TopLevelSpec):
+    """TopLevelFacetSpec schema wrapper
 
-    Mapping(required=[layer])
+    Mapping(required=[data, facet, spec])
 
-    Attributes
+    Parameters
     ----------
 
-    layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`))
-        Layer or single view specifications to be layered.
-
-        **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column``
-        channels as layering facet specifications is not allowed. Instead, use the `facet
-        operator <https://vega.github.io/vega-lite/docs/facet.html>`__ and place a layer
-        inside a facet.
-    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
-        How the visualization size should be determined. If a string, should be one of
-        ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify
-        parameters for content sizing and automatic resizing.
-
-        **Default value** : ``pad``
-    background : anyOf(:class:`Color`, :class:`ExprRef`)
-        CSS color property to use as the background of the entire view.
-
-        **Default value:** ``"white"``
-    config : :class:`Config`
-        Vega-Lite configuration object. This property can only be defined at the top-level
-        of a specification.
     data : anyOf(:class:`Data`, None)
         An object describing the data source. Set to ``null`` to ignore the parent's data
         source. If no data is set, it is derived from the parent.
-    datasets : :class:`Datasets`
-        A global data store for named datasets. This is a mapping from names to inline
-        datasets. This can be an array of objects or primitive values or a string. Arrays of
-        primitive values are ingested as objects with a ``data`` property.
-    description : string
-        Description of this mark for commenting purpose.
-    encoding : :class:`SharedEncoding`
-        A shared key-value mapping between encoding channels and definition of fields in the
-        underlying layers.
-    height : anyOf(float, string, :class:`Step`)
-        The height of a visualization.
-
-
-        * For a plot with a continuous y-field, height should be a number. - For a plot with
-          either a discrete y-field or no y-field, height can be either a number indicating
-          a fixed height or an object in the form of ``{step: number}`` defining the height
-          per discrete step. (No y-field is equivalent to having one discrete step.) - To
-          enable responsive sizing on height, it should be set to ``"container"``.
-
-        **Default value:** Based on ``config.view.continuousHeight`` for a plot with a
-        continuous y-field and ``config.view.discreteHeight`` otherwise.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        height of a single view and the ``"container"`` option cannot be used.
-
-        **See also:** `height <https://vega.github.io/vega-lite/docs/size.html>`__
-        documentation.
-    name : string
-        Name of the visualization for later reference.
-    padding : anyOf(:class:`Padding`, :class:`ExprRef`)
-        The default visualization padding, in pixels, from the edge of the visualization
-        canvas to the data rectangle. If a number, specifies padding for all sides. If an
-        object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
-        "bottom": 5}`` to specify padding for each side of the visualization.
-
-        **Default value** : ``5``
-    params : List(:class:`Parameter`)
-        Dynamic variables that parameterize a visualization.
-    projection : :class:`Projection`
-        An object defining properties of the geographic projection shared by underlying
-        layers.
-    resolve : :class:`Resolve`
-        Scale, axis, and legend resolutions for view composition specifications.
-    title : anyOf(:class:`Text`, :class:`TitleParams`)
-        Title for the plot.
-    transform : List(:class:`Transform`)
-        An array of data transformations such as filter and new field calculation.
-    usermeta : :class:`Dictunknown`
-        Optional metadata that will be passed to Vega. This object is completely ignored by
-        Vega and Vega-Lite and can be used for custom metadata.
-    view : :class:`ViewBackground`
-        An object defining the view background's fill and stroke.
-
-        **Default value:** none (transparent)
-    width : anyOf(float, string, :class:`Step`)
-        The width of a visualization.
-
-
-        * For a plot with a continuous x-field, width should be a number. - For a plot with
-          either a discrete x-field or no x-field, width can be either a number indicating a
-          fixed width or an object in the form of ``{step: number}`` defining the width per
-          discrete step. (No x-field is equivalent to having one discrete step.) - To enable
-          responsive sizing on width, it should be set to ``"container"``.
-
-        **Default value:** Based on ``config.view.continuousWidth`` for a plot with a
-        continuous x-field and ``config.view.discreteWidth`` otherwise.
-
-        **Note:** For plots with `row and column channels
-        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
-        width of a single view and the ``"container"`` option cannot be used.
-
-        **See also:** `width <https://vega.github.io/vega-lite/docs/size.html>`__
-        documentation.
-    $schema : string
-        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
-        Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema``
-        property allows automatic validation and autocomplete in editors that support JSON
-        schema.
-    """
-    _schema = {'$ref': '#/definitions/TopLevelLayerSpec'}
-
-    def __init__(self, layer=Undefined, autosize=Undefined, background=Undefined, config=Undefined,
-                 data=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, padding=Undefined, params=Undefined,
-                 projection=Undefined, resolve=Undefined, title=Undefined, transform=Undefined,
-                 usermeta=Undefined, view=Undefined, width=Undefined, **kwds):
-        super(TopLevelLayerSpec, self).__init__(layer=layer, autosize=autosize, background=background,
-                                                config=config, data=data, datasets=datasets,
-                                                description=description, encoding=encoding,
-                                                height=height, name=name, padding=padding,
-                                                params=params, projection=projection, resolve=resolve,
-                                                title=title, transform=transform, usermeta=usermeta,
-                                                view=view, width=width, **kwds)
-
-
-class TopLevelNormalizedConcatSpecGenericSpec(TopLevelSpec):
-    """TopLevelNormalizedConcatSpecGenericSpec schema wrapper
-
-    Mapping(required=[concat])
-
-    Attributes
-    ----------
-
-    concat : List(:class:`NormalizedSpec`)
-        A list of views to be concatenated.
+    facet : anyOf(:class:`FacetFieldDef`, :class:`FacetMapping`)
+        Definition for how to facet the data. One of: 1) `a field definition for faceting
+        the plot by one field
+        <https://vega.github.io/vega-lite/docs/facet.html#field-def>`__ 2) `An object that
+        maps row and column channels to their field definitions
+        <https://vega.github.io/vega-lite/docs/facet.html#mapping>`__
+    spec : anyOf(:class:`LayerSpec`, :class:`UnitSpecWithFrame`)
+        A specification of the view that gets faceted.
     align : anyOf(:class:`LayoutAlign`, :class:`RowColLayoutAlign`)
         The alignment to apply to grid rows and columns. The supported string values are
         ``"all"``, ``"each"``, and ``"none"``.
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -17808,10 +19529,10 @@ class TopLevelNormalizedConcatSpecGenericSpec(TopLevelSpec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -17831,18 +19552,18 @@ class TopLevelNormalizedConcatSpecGenericSpec(TopLevelSpec):
 
         **Note** :
 
-        1) This property is only for: - the general (wrappable) ``concat`` operator (not
-        ``hconcat`` / ``vconcat`` ) - the ``facet`` and ``repeat`` operator with one
-        field/repetition definition (without row/column nesting)
+        1) This property is only for:
+
+
+        * the general (wrappable) ``concat`` operator (not ``hconcat`` / ``vconcat`` )
+        * the ``facet`` and ``repeat`` operator with one field/repetition definition
+          (without row/column nesting)
 
         2) Setting the ``columns`` to ``1`` is equivalent to ``vconcat`` (for ``concat`` )
         and to using the ``row`` channel (for ``facet`` and ``repeat`` ).
     config : :class:`Config`
         Vega-Lite configuration object. This property can only be defined at the top-level
         of a specification.
-    data : anyOf(:class:`Data`, None)
-        An object describing the data source. Set to ``null`` to ignore the parent's data
-        source. If no data is set, it is derived from the parent.
     datasets : :class:`Datasets`
         A global data store for named datasets. This is a mapping from names to inline
         datasets. This can be an array of objects or primitive values or a string. Arrays of
@@ -17858,8 +19579,8 @@ class TopLevelNormalizedConcatSpecGenericSpec(TopLevelSpec):
         "bottom": 5}`` to specify padding for each side of the visualization.
 
         **Default value** : ``5``
-    params : List(:class:`Parameter`)
-        Dynamic variables that parameterize a visualization.
+    params : List(:class:`TopLevelParameter`)
+        Dynamic variables or selections that parameterize a visualization.
     resolve : :class:`Resolve`
         Scale, axis, and legend resolutions for view composition specifications.
     spacing : anyOf(float, :class:`RowColnumber`)
@@ -17874,46 +19595,41 @@ class TopLevelNormalizedConcatSpecGenericSpec(TopLevelSpec):
         Title for the plot.
     transform : List(:class:`Transform`)
         An array of data transformations such as filter and new field calculation.
-    usermeta : :class:`Dictunknown`
+    usermeta : :class:`Dict`
         Optional metadata that will be passed to Vega. This object is completely ignored by
         Vega and Vega-Lite and can be used for custom metadata.
     $schema : string
         URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
         Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema``
+        ``https://vega.github.io/schema/vega-lite/v5.json``. Setting the ``$schema``
         property allows automatic validation and autocomplete in editors that support JSON
         schema.
     """
-    _schema = {'$ref': '#/definitions/TopLevelNormalizedConcatSpec<GenericSpec>'}
+    _schema = {'$ref': '#/definitions/TopLevelFacetSpec'}
 
-    def __init__(self, concat=Undefined, align=Undefined, autosize=Undefined, background=Undefined,
-                 bounds=Undefined, center=Undefined, columns=Undefined, config=Undefined,
-                 data=Undefined, datasets=Undefined, description=Undefined, name=Undefined,
-                 padding=Undefined, params=Undefined, resolve=Undefined, spacing=Undefined,
-                 title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
-        super(TopLevelNormalizedConcatSpecGenericSpec, self).__init__(concat=concat, align=align,
-                                                                      autosize=autosize,
-                                                                      background=background,
-                                                                      bounds=bounds, center=center,
-                                                                      columns=columns, config=config,
-                                                                      data=data, datasets=datasets,
-                                                                      description=description,
-                                                                      name=name, padding=padding,
-                                                                      params=params, resolve=resolve,
-                                                                      spacing=spacing, title=title,
-                                                                      transform=transform,
-                                                                      usermeta=usermeta, **kwds)
-
-
-class TopLevelNormalizedHConcatSpecGenericSpec(TopLevelSpec):
-    """TopLevelNormalizedHConcatSpecGenericSpec schema wrapper
+    def __init__(self, data=Undefined, facet=Undefined, spec=Undefined, align=Undefined,
+                 autosize=Undefined, background=Undefined, bounds=Undefined, center=Undefined,
+                 columns=Undefined, config=Undefined, datasets=Undefined, description=Undefined,
+                 name=Undefined, padding=Undefined, params=Undefined, resolve=Undefined,
+                 spacing=Undefined, title=Undefined, transform=Undefined, usermeta=Undefined, **kwds):
+        super(TopLevelFacetSpec, self).__init__(data=data, facet=facet, spec=spec, align=align,
+                                                autosize=autosize, background=background, bounds=bounds,
+                                                center=center, columns=columns, config=config,
+                                                datasets=datasets, description=description, name=name,
+                                                padding=padding, params=params, resolve=resolve,
+                                                spacing=spacing, title=title, transform=transform,
+                                                usermeta=usermeta, **kwds)
+
+
+class TopLevelHConcatSpec(TopLevelSpec):
+    """TopLevelHConcatSpec schema wrapper
 
     Mapping(required=[hconcat])
 
-    Attributes
+    Parameters
     ----------
 
-    hconcat : List(:class:`NormalizedSpec`)
+    hconcat : List(:class:`NonNormalizedSpec`)
         A list of views to be concatenated and put into a row.
     autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
         How the visualization size should be determined. If a string, should be one of
@@ -17931,10 +19647,10 @@ class TopLevelNormalizedHConcatSpecGenericSpec(TopLevelSpec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : boolean
@@ -17963,8 +19679,8 @@ class TopLevelNormalizedHConcatSpecGenericSpec(TopLevelSpec):
         "bottom": 5}`` to specify padding for each side of the visualization.
 
         **Default value** : ``5``
-    params : List(:class:`Parameter`)
-        Dynamic variables that parameterize a visualization.
+    params : List(:class:`TopLevelParameter`)
+        Dynamic variables or selections that parameterize a visualization.
     resolve : :class:`Resolve`
         Scale, axis, and legend resolutions for view composition specifications.
     spacing : float
@@ -17975,47 +19691,47 @@ class TopLevelNormalizedHConcatSpecGenericSpec(TopLevelSpec):
         Title for the plot.
     transform : List(:class:`Transform`)
         An array of data transformations such as filter and new field calculation.
-    usermeta : :class:`Dictunknown`
+    usermeta : :class:`Dict`
         Optional metadata that will be passed to Vega. This object is completely ignored by
         Vega and Vega-Lite and can be used for custom metadata.
     $schema : string
         URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
         Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema``
+        ``https://vega.github.io/schema/vega-lite/v5.json``. Setting the ``$schema``
         property allows automatic validation and autocomplete in editors that support JSON
         schema.
     """
-    _schema = {'$ref': '#/definitions/TopLevelNormalizedHConcatSpec<GenericSpec>'}
+    _schema = {'$ref': '#/definitions/TopLevelHConcatSpec'}
 
     def __init__(self, hconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined,
                  center=Undefined, config=Undefined, data=Undefined, datasets=Undefined,
                  description=Undefined, name=Undefined, padding=Undefined, params=Undefined,
                  resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined,
                  usermeta=Undefined, **kwds):
-        super(TopLevelNormalizedHConcatSpecGenericSpec, self).__init__(hconcat=hconcat,
-                                                                       autosize=autosize,
-                                                                       background=background,
-                                                                       bounds=bounds, center=center,
-                                                                       config=config, data=data,
-                                                                       datasets=datasets,
-                                                                       description=description,
-                                                                       name=name, padding=padding,
-                                                                       params=params, resolve=resolve,
-                                                                       spacing=spacing, title=title,
-                                                                       transform=transform,
-                                                                       usermeta=usermeta, **kwds)
-
-
-class TopLevelNormalizedVConcatSpecGenericSpec(TopLevelSpec):
-    """TopLevelNormalizedVConcatSpecGenericSpec schema wrapper
+        super(TopLevelHConcatSpec, self).__init__(hconcat=hconcat, autosize=autosize,
+                                                  background=background, bounds=bounds, center=center,
+                                                  config=config, data=data, datasets=datasets,
+                                                  description=description, name=name, padding=padding,
+                                                  params=params, resolve=resolve, spacing=spacing,
+                                                  title=title, transform=transform, usermeta=usermeta,
+                                                  **kwds)
 
-    Mapping(required=[vconcat])
 
-    Attributes
+class TopLevelLayerSpec(TopLevelSpec):
+    """TopLevelLayerSpec schema wrapper
+
+    Mapping(required=[layer])
+
+    Parameters
     ----------
 
-    vconcat : List(:class:`NormalizedSpec`)
-        A list of views to be concatenated and put into a column.
+    layer : List(anyOf(:class:`LayerSpec`, :class:`UnitSpec`))
+        Layer or single view specifications to be layered.
+
+        **Note** : Specifications inside ``layer`` cannot use ``row`` and ``column``
+        channels as layering facet specifications is not allowed. Instead, use the `facet
+        operator <https://vega.github.io/vega-lite/docs/facet.html>`__ and place a layer
+        inside a facet.
     autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
         How the visualization size should be determined. If a string, should be one of
         ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify
@@ -18026,23 +19742,6 @@ class TopLevelNormalizedVConcatSpecGenericSpec(TopLevelSpec):
         CSS color property to use as the background of the entire view.
 
         **Default value:** ``"white"``
-    bounds : enum('full', 'flush')
-        The bounds calculation method to use for determining the extent of a sub-plot. One
-        of ``full`` (the default) or ``flush``.
-
-
-        * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
-
-        **Default value:** ``"full"``
-    center : boolean
-        Boolean flag indicating if subviews should be centered relative to their respective
-        rows or columns.
-
-        **Default value:** ``false``
     config : :class:`Config`
         Vega-Lite configuration object. This property can only be defined at the top-level
         of a specification.
@@ -18055,6 +19754,29 @@ class TopLevelNormalizedVConcatSpecGenericSpec(TopLevelSpec):
         primitive values are ingested as objects with a ``data`` property.
     description : string
         Description of this mark for commenting purpose.
+    encoding : :class:`SharedEncoding`
+        A shared key-value mapping between encoding channels and definition of fields in the
+        underlying layers.
+    height : anyOf(float, string, :class:`Step`)
+        The height of a visualization.
+
+
+        * For a plot with a continuous y-field, height should be a number.
+        * For a plot with either a discrete y-field or no y-field, height can be either a
+          number indicating a fixed height or an object in the form of ``{step: number}``
+          defining the height per discrete step. (No y-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on height, it should be set to ``"container"``.
+
+        **Default value:** Based on ``config.view.continuousHeight`` for a plot with a
+        continuous y-field and ``config.view.discreteHeight`` otherwise.
+
+        **Note:** For plots with `row and column channels
+        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
+        height of a single view and the ``"container"`` option cannot be used.
+
+        **See also:** `height <https://vega.github.io/vega-lite/docs/size.html>`__
+        documentation.
     name : string
         Name of the visualization for later reference.
     padding : anyOf(:class:`Padding`, :class:`ExprRef`)
@@ -18064,47 +19786,65 @@ class TopLevelNormalizedVConcatSpecGenericSpec(TopLevelSpec):
         "bottom": 5}`` to specify padding for each side of the visualization.
 
         **Default value** : ``5``
-    params : List(:class:`Parameter`)
-        Dynamic variables that parameterize a visualization.
+    params : List(:class:`TopLevelParameter`)
+        Dynamic variables or selections that parameterize a visualization.
+    projection : :class:`Projection`
+        An object defining properties of the geographic projection shared by underlying
+        layers.
     resolve : :class:`Resolve`
         Scale, axis, and legend resolutions for view composition specifications.
-    spacing : float
-        The spacing in pixels between sub-views of the concat operator.
-
-        **Default value** : ``10``
     title : anyOf(:class:`Text`, :class:`TitleParams`)
         Title for the plot.
     transform : List(:class:`Transform`)
         An array of data transformations such as filter and new field calculation.
-    usermeta : :class:`Dictunknown`
+    usermeta : :class:`Dict`
         Optional metadata that will be passed to Vega. This object is completely ignored by
         Vega and Vega-Lite and can be used for custom metadata.
+    view : :class:`ViewBackground`
+        An object defining the view background's fill and stroke.
+
+        **Default value:** none (transparent)
+    width : anyOf(float, string, :class:`Step`)
+        The width of a visualization.
+
+
+        * For a plot with a continuous x-field, width should be a number.
+        * For a plot with either a discrete x-field or no x-field, width can be either a
+          number indicating a fixed width or an object in the form of ``{step: number}``
+          defining the width per discrete step. (No x-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on width, it should be set to ``"container"``.
+
+        **Default value:** Based on ``config.view.continuousWidth`` for a plot with a
+        continuous x-field and ``config.view.discreteWidth`` otherwise.
+
+        **Note:** For plots with `row and column channels
+        <https://vega.github.io/vega-lite/docs/encoding.html#facet>`__, this represents the
+        width of a single view and the ``"container"`` option cannot be used.
+
+        **See also:** `width <https://vega.github.io/vega-lite/docs/size.html>`__
+        documentation.
     $schema : string
         URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
         Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema``
+        ``https://vega.github.io/schema/vega-lite/v5.json``. Setting the ``$schema``
         property allows automatic validation and autocomplete in editors that support JSON
         schema.
     """
-    _schema = {'$ref': '#/definitions/TopLevelNormalizedVConcatSpec<GenericSpec>'}
+    _schema = {'$ref': '#/definitions/TopLevelLayerSpec'}
 
-    def __init__(self, vconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined,
-                 center=Undefined, config=Undefined, data=Undefined, datasets=Undefined,
-                 description=Undefined, name=Undefined, padding=Undefined, params=Undefined,
-                 resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined,
-                 usermeta=Undefined, **kwds):
-        super(TopLevelNormalizedVConcatSpecGenericSpec, self).__init__(vconcat=vconcat,
-                                                                       autosize=autosize,
-                                                                       background=background,
-                                                                       bounds=bounds, center=center,
-                                                                       config=config, data=data,
-                                                                       datasets=datasets,
-                                                                       description=description,
-                                                                       name=name, padding=padding,
-                                                                       params=params, resolve=resolve,
-                                                                       spacing=spacing, title=title,
-                                                                       transform=transform,
-                                                                       usermeta=usermeta, **kwds)
+    def __init__(self, layer=Undefined, autosize=Undefined, background=Undefined, config=Undefined,
+                 data=Undefined, datasets=Undefined, description=Undefined, encoding=Undefined,
+                 height=Undefined, name=Undefined, padding=Undefined, params=Undefined,
+                 projection=Undefined, resolve=Undefined, title=Undefined, transform=Undefined,
+                 usermeta=Undefined, view=Undefined, width=Undefined, **kwds):
+        super(TopLevelLayerSpec, self).__init__(layer=layer, autosize=autosize, background=background,
+                                                config=config, data=data, datasets=datasets,
+                                                description=description, encoding=encoding,
+                                                height=height, name=name, padding=padding,
+                                                params=params, projection=projection, resolve=resolve,
+                                                title=title, transform=transform, usermeta=usermeta,
+                                                view=view, width=width, **kwds)
 
 
 class TopLevelRepeatSpec(TopLevelSpec):
@@ -18123,7 +19863,7 @@ class TopLevelUnitSpec(TopLevelSpec):
 
     Mapping(required=[data, mark])
 
-    Attributes
+    Parameters
     ----------
 
     data : anyOf(:class:`Data`, None)
@@ -18140,9 +19880,10 @@ class TopLevelUnitSpec(TopLevelSpec):
 
 
         * For ``"none"``, a flow layout will be used, in which adjacent subviews are simply
-          placed one after the other. - For ``"each"``, subviews will be aligned into a
-          clean grid structure, but each row or column may be of variable size. - For
-          ``"all"``, subviews will be aligned and each row or column will be sized
+          placed one after the other.
+        * For ``"each"``, subviews will be aligned into a clean grid structure, but each row
+          or column may be of variable size.
+        * For ``"all"``, subviews will be aligned and each row or column will be sized
           identically based on the maximum observed size. String values for this property
           will be applied to both grid rows and columns.
 
@@ -18166,10 +19907,10 @@ class TopLevelUnitSpec(TopLevelSpec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : anyOf(boolean, :class:`RowColboolean`)
@@ -18195,11 +19936,12 @@ class TopLevelUnitSpec(TopLevelSpec):
         The height of a visualization.
 
 
-        * For a plot with a continuous y-field, height should be a number. - For a plot with
-          either a discrete y-field or no y-field, height can be either a number indicating
-          a fixed height or an object in the form of ``{step: number}`` defining the height
-          per discrete step. (No y-field is equivalent to having one discrete step.) - To
-          enable responsive sizing on height, it should be set to ``"container"``.
+        * For a plot with a continuous y-field, height should be a number.
+        * For a plot with either a discrete y-field or no y-field, height can be either a
+          number indicating a fixed height or an object in the form of ``{step: number}``
+          defining the height per discrete step. (No y-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on height, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousHeight`` for a plot with a
         continuous y-field and ``config.view.discreteHeight`` otherwise.
@@ -18219,16 +19961,15 @@ class TopLevelUnitSpec(TopLevelSpec):
         "bottom": 5}`` to specify padding for each side of the visualization.
 
         **Default value** : ``5``
-    params : List(:class:`Parameter`)
-        Dynamic variables that parameterize a visualization.
+    params : List(:class:`TopLevelParameter`)
+        An array of parameters that may either be simple variables, or more complex
+        selections that map user input to data queries.
     projection : :class:`Projection`
         An object defining properties of geographic projection, which will be applied to
         ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"``
         channels for other marks.
     resolve : :class:`Resolve`
         Scale, axis, and legend resolutions for view composition specifications.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
     spacing : anyOf(float, :class:`RowColnumber`)
         The spacing in pixels between sub-views of the composition operator. An object of
         the form ``{"row": number, "column": number}`` can be used to set different spacing
@@ -18241,7 +19982,7 @@ class TopLevelUnitSpec(TopLevelSpec):
         Title for the plot.
     transform : List(:class:`Transform`)
         An array of data transformations such as filter and new field calculation.
-    usermeta : :class:`Dictunknown`
+    usermeta : :class:`Dict`
         Optional metadata that will be passed to Vega. This object is completely ignored by
         Vega and Vega-Lite and can be used for custom metadata.
     view : :class:`ViewBackground`
@@ -18252,11 +19993,12 @@ class TopLevelUnitSpec(TopLevelSpec):
         The width of a visualization.
 
 
-        * For a plot with a continuous x-field, width should be a number. - For a plot with
-          either a discrete x-field or no x-field, width can be either a number indicating a
-          fixed width or an object in the form of ``{step: number}`` defining the width per
-          discrete step. (No x-field is equivalent to having one discrete step.) - To enable
-          responsive sizing on width, it should be set to ``"container"``.
+        * For a plot with a continuous x-field, width should be a number.
+        * For a plot with either a discrete x-field or no x-field, width can be either a
+          number indicating a fixed width or an object in the form of ``{step: number}``
+          defining the width per discrete step. (No x-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on width, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousWidth`` for a plot with a
         continuous x-field and ``config.view.discreteWidth`` otherwise.
@@ -18270,7 +20012,7 @@ class TopLevelUnitSpec(TopLevelSpec):
     $schema : string
         URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
         Unless you have a reason to change this, use
-        ``https://vega.github.io/schema/vega-lite/v4.json``. Setting the ``$schema``
+        ``https://vega.github.io/schema/vega-lite/v5.json``. Setting the ``$schema``
         property allows automatic validation and autocomplete in editors that support JSON
         schema.
     """
@@ -18280,17 +20022,112 @@ class TopLevelUnitSpec(TopLevelSpec):
                  background=Undefined, bounds=Undefined, center=Undefined, config=Undefined,
                  datasets=Undefined, description=Undefined, encoding=Undefined, height=Undefined,
                  name=Undefined, padding=Undefined, params=Undefined, projection=Undefined,
-                 resolve=Undefined, selection=Undefined, spacing=Undefined, title=Undefined,
-                 transform=Undefined, usermeta=Undefined, view=Undefined, width=Undefined, **kwds):
+                 resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined,
+                 usermeta=Undefined, view=Undefined, width=Undefined, **kwds):
         super(TopLevelUnitSpec, self).__init__(data=data, mark=mark, align=align, autosize=autosize,
                                                background=background, bounds=bounds, center=center,
                                                config=config, datasets=datasets,
                                                description=description, encoding=encoding,
                                                height=height, name=name, padding=padding, params=params,
-                                               projection=projection, resolve=resolve,
-                                               selection=selection, spacing=spacing, title=title,
-                                               transform=transform, usermeta=usermeta, view=view,
-                                               width=width, **kwds)
+                                               projection=projection, resolve=resolve, spacing=spacing,
+                                               title=title, transform=transform, usermeta=usermeta,
+                                               view=view, width=width, **kwds)
+
+
+class TopLevelVConcatSpec(TopLevelSpec):
+    """TopLevelVConcatSpec schema wrapper
+
+    Mapping(required=[vconcat])
+
+    Parameters
+    ----------
+
+    vconcat : List(:class:`NonNormalizedSpec`)
+        A list of views to be concatenated and put into a column.
+    autosize : anyOf(:class:`AutosizeType`, :class:`AutoSizeParams`)
+        How the visualization size should be determined. If a string, should be one of
+        ``"pad"``, ``"fit"`` or ``"none"``. Object values can additionally specify
+        parameters for content sizing and automatic resizing.
+
+        **Default value** : ``pad``
+    background : anyOf(:class:`Color`, :class:`ExprRef`)
+        CSS color property to use as the background of the entire view.
+
+        **Default value:** ``"white"``
+    bounds : enum('full', 'flush')
+        The bounds calculation method to use for determining the extent of a sub-plot. One
+        of ``full`` (the default) or ``flush``.
+
+
+        * If set to ``full``, the entire calculated bounds (including axes, title, and
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
+
+        **Default value:** ``"full"``
+    center : boolean
+        Boolean flag indicating if subviews should be centered relative to their respective
+        rows or columns.
+
+        **Default value:** ``false``
+    config : :class:`Config`
+        Vega-Lite configuration object. This property can only be defined at the top-level
+        of a specification.
+    data : anyOf(:class:`Data`, None)
+        An object describing the data source. Set to ``null`` to ignore the parent's data
+        source. If no data is set, it is derived from the parent.
+    datasets : :class:`Datasets`
+        A global data store for named datasets. This is a mapping from names to inline
+        datasets. This can be an array of objects or primitive values or a string. Arrays of
+        primitive values are ingested as objects with a ``data`` property.
+    description : string
+        Description of this mark for commenting purpose.
+    name : string
+        Name of the visualization for later reference.
+    padding : anyOf(:class:`Padding`, :class:`ExprRef`)
+        The default visualization padding, in pixels, from the edge of the visualization
+        canvas to the data rectangle. If a number, specifies padding for all sides. If an
+        object, the value should have the format ``{"left": 5, "top": 5, "right": 5,
+        "bottom": 5}`` to specify padding for each side of the visualization.
+
+        **Default value** : ``5``
+    params : List(:class:`TopLevelParameter`)
+        Dynamic variables or selections that parameterize a visualization.
+    resolve : :class:`Resolve`
+        Scale, axis, and legend resolutions for view composition specifications.
+    spacing : float
+        The spacing in pixels between sub-views of the concat operator.
+
+        **Default value** : ``10``
+    title : anyOf(:class:`Text`, :class:`TitleParams`)
+        Title for the plot.
+    transform : List(:class:`Transform`)
+        An array of data transformations such as filter and new field calculation.
+    usermeta : :class:`Dict`
+        Optional metadata that will be passed to Vega. This object is completely ignored by
+        Vega and Vega-Lite and can be used for custom metadata.
+    $schema : string
+        URL to `JSON schema <http://json-schema.org/>`__ for a Vega-Lite specification.
+        Unless you have a reason to change this, use
+        ``https://vega.github.io/schema/vega-lite/v5.json``. Setting the ``$schema``
+        property allows automatic validation and autocomplete in editors that support JSON
+        schema.
+    """
+    _schema = {'$ref': '#/definitions/TopLevelVConcatSpec'}
+
+    def __init__(self, vconcat=Undefined, autosize=Undefined, background=Undefined, bounds=Undefined,
+                 center=Undefined, config=Undefined, data=Undefined, datasets=Undefined,
+                 description=Undefined, name=Undefined, padding=Undefined, params=Undefined,
+                 resolve=Undefined, spacing=Undefined, title=Undefined, transform=Undefined,
+                 usermeta=Undefined, **kwds):
+        super(TopLevelVConcatSpec, self).__init__(vconcat=vconcat, autosize=autosize,
+                                                  background=background, bounds=bounds, center=center,
+                                                  config=config, data=data, datasets=datasets,
+                                                  description=description, name=name, padding=padding,
+                                                  params=params, resolve=resolve, spacing=spacing,
+                                                  title=title, transform=transform, usermeta=usermeta,
+                                                  **kwds)
 
 
 class TopoDataFormat(DataFormat):
@@ -18298,7 +20135,7 @@ class TopoDataFormat(DataFormat):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     feature : string
@@ -18308,7 +20145,7 @@ class TopoDataFormat(DataFormat):
         object for each country.
     mesh : string
         The name of the TopoJSON object set to convert to mesh. Similar to the ``feature``
-        option, ``mesh`` extracts a named TopoJSON object set.   Unlike the ``feature``
+        option, ``mesh`` extracts a named TopoJSON object set.  Unlike the ``feature``
         option, the corresponding geo data is returned as a single, unified mesh instance,
         not as individual GeoJSON features. Extracting a mesh is useful for more efficiently
         drawing borders or other geographic elements that you do not need to associate with
@@ -18322,7 +20159,7 @@ class TopoDataFormat(DataFormat):
         {"modified_on": "date"}`` parses the ``modified_on`` field in each input record a
         Date value.
 
-        For ``"date"``, we parse data based using Javascript's `Date.parse()
+        For ``"date"``, we parse data based using JavaScript's `Date.parse()
         <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse>`__.
         For Specific date formats can be provided (e.g., ``{foo: "date:'%m%d%Y'"}`` ), using
         the `d3-time-format syntax <https://github.com/d3/d3-time-format#locale_format>`__.
@@ -18362,7 +20199,7 @@ class AggregateTransform(Transform):
 
     Mapping(required=[aggregate])
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : List(:class:`AggregatedFieldDef`)
@@ -18382,7 +20219,7 @@ class BinTransform(Transform):
 
     Mapping(required=[bin, field, as])
 
-    Attributes
+    Parameters
     ----------
 
     bin : anyOf(boolean, :class:`BinParams`)
@@ -18407,7 +20244,7 @@ class CalculateTransform(Transform):
 
     Mapping(required=[calculate, as])
 
-    Attributes
+    Parameters
     ----------
 
     calculate : string
@@ -18427,7 +20264,7 @@ class DensityTransform(Transform):
 
     Mapping(required=[density])
 
-    Attributes
+    Parameters
     ----------
 
     density : :class:`FieldName`
@@ -18446,7 +20283,7 @@ class DensityTransform(Transform):
         density estimates (true).
 
         **Default value:** ``false``
-    extent : List([float, float])
+    extent : List(float)
         A [min, max] domain from which to sample the distribution. If unspecified, the
         extent will be determined by the observed minimum and maximum values of the density
         value field.
@@ -18468,7 +20305,7 @@ class DensityTransform(Transform):
         density. If specified, overrides both minsteps and maxsteps to set an exact number
         of uniform samples. Potentially useful in conjunction with a fixed extent to ensure
         consistent sample points for stacked densities.
-    as : List([:class:`FieldName`, :class:`FieldName`])
+    as : List(:class:`FieldName`)
         The output fields for the sample value and corresponding density estimate.
 
         **Default value:** ``["value", "density"]``
@@ -18488,7 +20325,7 @@ class FilterTransform(Transform):
 
     Mapping(required=[filter])
 
-    Attributes
+    Parameters
     ----------
 
     filter : :class:`PredicateComposition`
@@ -18501,7 +20338,7 @@ class FilterTransform(Transform):
         items that have values in the field ``b2`` over 60.
 
         2) one of the `field predicates
-        <https://vega.github.io/vega-lite/docs/predicate.html#field-predicate>`__ :  `equal
+        <https://vega.github.io/vega-lite/docs/predicate.html#field-predicate>`__ : `equal
         <https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate>`__, `lt
         <https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate>`__, `lte
         <https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate>`__, `gt
@@ -18531,7 +20368,7 @@ class FlattenTransform(Transform):
 
     Mapping(required=[flatten])
 
-    Attributes
+    Parameters
     ----------
 
     flatten : List(:class:`FieldName`)
@@ -18555,12 +20392,12 @@ class FoldTransform(Transform):
 
     Mapping(required=[fold])
 
-    Attributes
+    Parameters
     ----------
 
     fold : List(:class:`FieldName`)
         An array of data fields indicating the properties to fold.
-    as : List([:class:`FieldName`, :class:`FieldName`])
+    as : List(:class:`FieldName`)
         The output field names for the key and value properties produced by the fold
         transform. **Default value:** ``["key", "value"]``
     """
@@ -18575,7 +20412,7 @@ class ImputeTransform(Transform):
 
     Mapping(required=[impute, key])
 
-    Attributes
+    Parameters
     ----------
 
     impute : :class:`FieldName`
@@ -18583,7 +20420,7 @@ class ImputeTransform(Transform):
     key : :class:`FieldName`
         A key field that uniquely identifies data objects within a group. Missing key values
         (those occurring in the data but not in the current group) will be imputed.
-    frame : List([anyOf(None, float), anyOf(None, float)])
+    frame : List(anyOf(None, float))
         A frame specification as a two-element array used to control the window over which
         the specified method is applied. The array entries should either be a number
         indicating the offset from the current data object, or null to indicate unbounded
@@ -18628,7 +20465,7 @@ class JoinAggregateTransform(Transform):
 
     Mapping(required=[joinaggregate])
 
-    Attributes
+    Parameters
     ----------
 
     joinaggregate : List(:class:`JoinAggregateFieldDef`)
@@ -18649,7 +20486,7 @@ class LoessTransform(Transform):
 
     Mapping(required=[loess, on])
 
-    Attributes
+    Parameters
     ----------
 
     loess : :class:`FieldName`
@@ -18664,7 +20501,7 @@ class LoessTransform(Transform):
     groupby : List(:class:`FieldName`)
         The data fields to group by. If not specified, a single group containing all data
         objects will be used.
-    as : List([:class:`FieldName`, :class:`FieldName`])
+    as : List(:class:`FieldName`)
         The output field names for the smoothed points generated by the loess transform.
 
         **Default value:** The field names of the input x and y values.
@@ -18681,12 +20518,12 @@ class LookupTransform(Transform):
 
     Mapping(required=[lookup, from])
 
-    Attributes
+    Parameters
     ----------
 
     lookup : string
         Key in primary data source.
-    default : string
+    default : Any
         The default value to use if lookup fails.
 
         **Default value:** ``null``
@@ -18714,7 +20551,7 @@ class PivotTransform(Transform):
 
     Mapping(required=[pivot, value])
 
-    Attributes
+    Parameters
     ----------
 
     pivot : :class:`FieldName`
@@ -18730,7 +20567,7 @@ class PivotTransform(Transform):
         An optional parameter indicating the maximum number of pivoted fields to generate.
         The default ( ``0`` ) applies no limit. The pivoted ``pivot`` names are sorted in
         ascending order prior to enforcing the limit. **Default value:** ``0``
-    op : string
+    op : :class:`AggregateOp`
         The aggregation operation to apply to grouped ``value`` field values. **Default
         value:** ``sum``
     """
@@ -18747,7 +20584,7 @@ class QuantileTransform(Transform):
 
     Mapping(required=[quantile])
 
-    Attributes
+    Parameters
     ----------
 
     quantile : :class:`FieldName`
@@ -18762,7 +20599,7 @@ class QuantileTransform(Transform):
         A probability step size (default 0.01) for sampling quantile values. All values from
         one-half the step size up to 1 (exclusive) will be sampled. This parameter is only
         used if the *probs* parameter is not provided.
-    as : List([:class:`FieldName`, :class:`FieldName`])
+    as : List(:class:`FieldName`)
         The output field names for the probability and quantile values.
 
         **Default value:** ``["prob", "value"]``
@@ -18779,14 +20616,14 @@ class RegressionTransform(Transform):
 
     Mapping(required=[regression, on])
 
-    Attributes
+    Parameters
     ----------
 
     on : :class:`FieldName`
         The data field of the independent variable to use a predictor.
     regression : :class:`FieldName`
         The data field of the dependent variable to predict.
-    extent : List([float, float])
+    extent : List(float)
         A [min, max] domain over the independent (x) field for the starting and ending
         points of the generated trend line.
     groupby : List(:class:`FieldName`)
@@ -18809,7 +20646,7 @@ class RegressionTransform(Transform):
         value (indicating the total variance explained by the model).
 
         **Default value:** ``false``
-    as : List([:class:`FieldName`, :class:`FieldName`])
+    as : List(:class:`FieldName`)
         The output field names for the smoothed points generated by the regression
         transform.
 
@@ -18829,7 +20666,7 @@ class SampleTransform(Transform):
 
     Mapping(required=[sample])
 
-    Attributes
+    Parameters
     ----------
 
     sample : float
@@ -18848,7 +20685,7 @@ class StackTransform(Transform):
 
     Mapping(required=[stack, groupby, as])
 
-    Attributes
+    Parameters
     ----------
 
     groupby : List(:class:`FieldName`)
@@ -18864,7 +20701,7 @@ class StackTransform(Transform):
         **Default value:** ``"zero"``
     sort : List(:class:`SortField`)
         Field that determines the order of leaves in the stacked charts.
-    as : anyOf(:class:`FieldName`, List([:class:`FieldName`, :class:`FieldName`]))
+    as : anyOf(:class:`FieldName`, List(:class:`FieldName`))
         Output field names. This can be either a string or an array of strings with two
         elements denoting the name for the fields for stack start and stack end
         respectively. If a single string(e.g., ``"val"`` ) is provided, the end field will
@@ -18882,7 +20719,7 @@ class TimeUnitTransform(Transform):
 
     Mapping(required=[timeUnit, field, as])
 
-    Attributes
+    Parameters
     ----------
 
     field : :class:`FieldName`
@@ -18927,7 +20764,7 @@ class TypedFieldDef(VegaLiteSchema):
     Mapping(required=[])
     Definition object for a data field, its type and transformation of an encoding channel.
 
-    Attributes
+    Parameters
     ----------
 
     aggregate : :class:`Aggregate`
@@ -18938,26 +20775,19 @@ class TypedFieldDef(VegaLiteSchema):
 
         **See also:** `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__
         documentation.
-    band : float
-        For rect-based marks ( ``rect``, ``bar``, and ``image`` ), mark size relative to
-        bandwidth of `band scales
-        <https://vega.github.io/vega-lite/docs/scale.html#band>`__, bins or time units. If
-        set to ``1``, the mark size is set to the bandwidth, the bin interval, or the time
-        unit interval. If set to ``0.5``, the mark size is half of the bandwidth or the time
-        unit interval.
-
-        For other marks, relative position on a band of a stacked, binned, time unit or band
-        scale. If set to ``0``, the marks will be positioned at the beginning of the band.
-        If set to ``0.5``, the marks will be positioned in the middle of the band.
+    bandPosition : float
+        Relative position on a band of a stacked, binned, time unit, or band scale. For
+        example, the marks will be positioned at the beginning of the band if set to ``0``,
+        and at the middle of the band if set to ``0.5``.
     bin : anyOf(boolean, :class:`BinParams`, string, None)
         A flag for binning a ``quantitative`` field, `an object defining binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html#params>`__, or indicating that the
-        data for ``x`` or ``y`` channel are binned before they are imported into Vega-Lite (
-        ``"binned"`` ).
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__, or indicating
+        that the data for ``x`` or ``y`` channel are binned before they are imported into
+        Vega-Lite ( ``"binned"`` ).
 
 
         If ``true``, default `binning parameters
-        <https://vega.github.io/vega-lite/docs/bin.html>`__ will be applied.
+        <https://vega.github.io/vega-lite/docs/bin.html#bin-parameters>`__ will be applied.
 
         If ``"binned"``, this indicates that the data for the ``x`` (or ``y`` ) channel are
         already binned. You can map the bin-start field to ``x`` (or ``y`` ) and the bin-end
@@ -19010,7 +20840,7 @@ class TypedFieldDef(VegaLiteSchema):
         <https://vega.github.io/vega-lite/docs/config.html#top-level-config>`__ property in
         the `config <https://vega.github.io/vega-lite/docs/config.html>`__ or `fieldTitle
         function via the compile function's options
-        <https://vega.github.io/vega-lite/docs/compile.html#field-title>`__.
+        <https://vega.github.io/vega-lite/usage/compile.html#field-title>`__.
 
         2) If both field definition's ``title`` and axis, header, or legend ``title`` are
         defined, axis/header/legend title will be used.
@@ -19030,54 +20860,67 @@ class TypedFieldDef(VegaLiteSchema):
 
         1) For a data ``field``, ``"nominal"`` is the default data type unless the field
         encoding has ``aggregate``, ``channel``, ``bin``, scale type, ``sort``, or
-        ``timeUnit`` that satisfies the following criteria: - ``"quantitative"`` is the
-        default type if (1) the encoded field contains ``bin`` or ``aggregate`` except
-        ``"argmin"`` and ``"argmax"``, (2) the encoding channel is ``latitude`` or
-        ``longitude`` channel or (3) if the specified scale type is `a quantitative scale
-        <https://vega.github.io/vega-lite/docs/scale.html#type>`__. - ``"temporal"`` is the
-        default type if (1) the encoded field contains ``timeUnit`` or (2) the specified
-        scale type is a time or utc scale - ``ordinal""`` is the default type if (1) the
-        encoded field contains a `custom sort order
-        <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
-        (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
-        channel is ``order``.
-
-        2) For a constant value in data domain ( ``datum`` ): - ``"quantitative"`` if the
-        datum is a number - ``"nominal"`` if the datum is a string - ``"temporal"`` if the
-        datum is `a date time object
-        <https://vega.github.io/vega-lite/docs/datetime.html>`__
-
-        **Note:** - Data ``type`` describes the semantics of the data rather than the
-        primitive data types (number, string, etc.). The same primitive data type can have
-        different types of measurement. For example, numeric data can represent
-        quantitative, ordinal, or nominal data. - Data values for a temporal field can be
-        either a date-time string (e.g., ``"2015-03-07 12:32:17"``, ``"17:01"``,
-        ``"2015-03-16"``. ``"2015"`` ) or a timestamp number (e.g., ``1552199579097`` ). -
-        When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
-        ``type`` property can be either ``"quantitative"`` (for using a linear bin scale) or
-        `"ordinal" (for using an ordinal bin scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `timeUnit <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type``
-        property can be either ``"temporal"`` (default, for using a temporal scale) or
-        `"ordinal" (for using an ordinal scale)
-        <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__. - When using with
-        `aggregate <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type``
-        property refers to the post-aggregation data type. For example, we can calculate
-        count ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate":
-        "distinct", "field": "cat"}``. The ``"type"`` of the aggregate output is
-        ``"quantitative"``. - Secondary channels (e.g., ``x2``, ``y2``, ``xError``,
-        ``yError`` ) do not have ``type`` as they must have exactly the same type as their
-        primary channels (e.g., ``x``, ``y`` ).
+        ``timeUnit`` that satisfies the following criteria:
+
+
+        * ``"quantitative"`` is the default type if (1) the encoded field contains ``bin``
+          or ``aggregate`` except ``"argmin"`` and ``"argmax"``, (2) the encoding channel is
+          ``latitude`` or ``longitude`` channel or (3) if the specified scale type is `a
+          quantitative scale <https://vega.github.io/vega-lite/docs/scale.html#type>`__.
+        * ``"temporal"`` is the default type if (1) the encoded field contains ``timeUnit``
+          or (2) the specified scale type is a time or utc scale
+        * ``"ordinal"`` is the default type if (1) the encoded field contains a `custom sort
+          order
+          <https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order>`__,
+          (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding
+          channel is ``order``.
+
+        2) For a constant value in data domain ( ``datum`` ):
+
+
+        * ``"quantitative"`` if the datum is a number
+        * ``"nominal"`` if the datum is a string
+        * ``"temporal"`` if the datum is `a date time object
+          <https://vega.github.io/vega-lite/docs/datetime.html>`__
+
+        **Note:**
+
+
+        * Data ``type`` describes the semantics of the data rather than the primitive data
+          types (number, string, etc.). The same primitive data type can have different
+          types of measurement. For example, numeric data can represent quantitative,
+          ordinal, or nominal data.
+        * Data values for a temporal field can be either a date-time string (e.g.,
+          ``"2015-03-07 12:32:17"``, ``"17:01"``, ``"2015-03-16"``. ``"2015"`` ) or a
+          timestamp number (e.g., ``1552199579097`` ).
+        * When using with `bin <https://vega.github.io/vega-lite/docs/bin.html>`__, the
+          ``type`` property can be either ``"quantitative"`` (for using a linear bin scale)
+          or `"ordinal" (for using an ordinal bin scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `timeUnit
+          <https://vega.github.io/vega-lite/docs/timeunit.html>`__, the ``type`` property
+          can be either ``"temporal"`` (default, for using a temporal scale) or `"ordinal"
+          (for using an ordinal scale)
+          <https://vega.github.io/vega-lite/docs/type.html#cast-bin>`__.
+        * When using with `aggregate
+          <https://vega.github.io/vega-lite/docs/aggregate.html>`__, the ``type`` property
+          refers to the post-aggregation data type. For example, we can calculate count
+          ``distinct`` of a categorical field ``"cat"`` using ``{"aggregate": "distinct",
+          "field": "cat"}``. The ``"type"`` of the aggregate output is ``"quantitative"``.
+        * Secondary channels (e.g., ``x2``, ``y2``, ``xError``, ``yError`` ) do not have
+          ``type`` as they must have exactly the same type as their primary channels (e.g.,
+          ``x``, ``y`` ).
 
         **See also:** `type <https://vega.github.io/vega-lite/docs/type.html>`__
         documentation.
     """
     _schema = {'$ref': '#/definitions/TypedFieldDef'}
 
-    def __init__(self, aggregate=Undefined, band=Undefined, bin=Undefined, field=Undefined,
+    def __init__(self, aggregate=Undefined, bandPosition=Undefined, bin=Undefined, field=Undefined,
                  timeUnit=Undefined, title=Undefined, type=Undefined, **kwds):
-        super(TypedFieldDef, self).__init__(aggregate=aggregate, band=band, bin=bin, field=field,
-                                            timeUnit=timeUnit, title=title, type=type, **kwds)
+        super(TypedFieldDef, self).__init__(aggregate=aggregate, bandPosition=bandPosition, bin=bin,
+                                            field=field, timeUnit=timeUnit, title=title, type=type,
+                                            **kwds)
 
 
 class URI(VegaLiteSchema):
@@ -19095,10 +20938,9 @@ class UnitSpec(VegaLiteSchema):
     """UnitSpec schema wrapper
 
     Mapping(required=[mark])
-    A unit specification, which can contain either `primitive marks or composite marks
-    <https://vega.github.io/vega-lite/docs/mark.html#types>`__.
+    Base interface for a unit (single-view) specification.
 
-    Attributes
+    Parameters
     ----------
 
     mark : :class:`AnyMark`
@@ -19113,37 +20955,28 @@ class UnitSpec(VegaLiteSchema):
         Description of this mark for commenting purpose.
     encoding : :class:`Encoding`
         A key-value mapping between encoding channels and definition of fields.
-    height : anyOf(float, string, :class:`Step`)
-        **Deprecated:** Please avoid using width in a unit spec that's a part of a layer
-        spec.
     name : string
         Name of the visualization for later reference.
+    params : List(:class:`SelectionParameter`)
+        An array of parameters that may either be simple variables, or more complex
+        selections that map user input to data queries.
     projection : :class:`Projection`
         An object defining properties of geographic projection, which will be applied to
         ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"``
         channels for other marks.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
     title : anyOf(:class:`Text`, :class:`TitleParams`)
         Title for the plot.
     transform : List(:class:`Transform`)
         An array of data transformations such as filter and new field calculation.
-    view : :class:`ViewBackground`
-        **Deprecated:** Please avoid using width in a unit spec that's a part of a layer
-        spec.
-    width : anyOf(float, string, :class:`Step`)
-        **Deprecated:** Please avoid using width in a unit spec that's a part of a layer
-        spec.
     """
     _schema = {'$ref': '#/definitions/UnitSpec'}
 
     def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, projection=Undefined, selection=Undefined,
-                 title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds):
+                 name=Undefined, params=Undefined, projection=Undefined, title=Undefined,
+                 transform=Undefined, **kwds):
         super(UnitSpec, self).__init__(mark=mark, data=data, description=description, encoding=encoding,
-                                       height=height, name=name, projection=projection,
-                                       selection=selection, title=title, transform=transform, view=view,
-                                       width=width, **kwds)
+                                       name=name, params=params, projection=projection, title=title,
+                                       transform=transform, **kwds)
 
 
 class UnitSpecWithFrame(VegaLiteSchema):
@@ -19151,7 +20984,7 @@ class UnitSpecWithFrame(VegaLiteSchema):
 
     Mapping(required=[mark])
 
-    Attributes
+    Parameters
     ----------
 
     mark : :class:`AnyMark`
@@ -19170,11 +21003,12 @@ class UnitSpecWithFrame(VegaLiteSchema):
         The height of a visualization.
 
 
-        * For a plot with a continuous y-field, height should be a number. - For a plot with
-          either a discrete y-field or no y-field, height can be either a number indicating
-          a fixed height or an object in the form of ``{step: number}`` defining the height
-          per discrete step. (No y-field is equivalent to having one discrete step.) - To
-          enable responsive sizing on height, it should be set to ``"container"``.
+        * For a plot with a continuous y-field, height should be a number.
+        * For a plot with either a discrete y-field or no y-field, height can be either a
+          number indicating a fixed height or an object in the form of ``{step: number}``
+          defining the height per discrete step. (No y-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on height, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousHeight`` for a plot with a
         continuous y-field and ``config.view.discreteHeight`` otherwise.
@@ -19187,12 +21021,13 @@ class UnitSpecWithFrame(VegaLiteSchema):
         documentation.
     name : string
         Name of the visualization for later reference.
+    params : List(:class:`SelectionParameter`)
+        An array of parameters that may either be simple variables, or more complex
+        selections that map user input to data queries.
     projection : :class:`Projection`
         An object defining properties of geographic projection, which will be applied to
         ``shape`` path for ``"geoshape"`` marks and to ``latitude`` and ``"longitude"``
         channels for other marks.
-    selection : Mapping(required=[])
-        A key-value mapping between selection names and definitions.
     title : anyOf(:class:`Text`, :class:`TitleParams`)
         Title for the plot.
     transform : List(:class:`Transform`)
@@ -19205,11 +21040,12 @@ class UnitSpecWithFrame(VegaLiteSchema):
         The width of a visualization.
 
 
-        * For a plot with a continuous x-field, width should be a number. - For a plot with
-          either a discrete x-field or no x-field, width can be either a number indicating a
-          fixed width or an object in the form of ``{step: number}`` defining the width per
-          discrete step. (No x-field is equivalent to having one discrete step.) - To enable
-          responsive sizing on width, it should be set to ``"container"``.
+        * For a plot with a continuous x-field, width should be a number.
+        * For a plot with either a discrete x-field or no x-field, width can be either a
+          number indicating a fixed width or an object in the form of ``{step: number}``
+          defining the width per discrete step. (No x-field is equivalent to having one
+          discrete step.)
+        * To enable responsive sizing on width, it should be set to ``"container"``.
 
         **Default value:** Based on ``config.view.continuousWidth`` for a plot with a
         continuous x-field and ``config.view.discreteWidth`` otherwise.
@@ -19224,11 +21060,11 @@ class UnitSpecWithFrame(VegaLiteSchema):
     _schema = {'$ref': '#/definitions/UnitSpecWithFrame'}
 
     def __init__(self, mark=Undefined, data=Undefined, description=Undefined, encoding=Undefined,
-                 height=Undefined, name=Undefined, projection=Undefined, selection=Undefined,
+                 height=Undefined, name=Undefined, params=Undefined, projection=Undefined,
                  title=Undefined, transform=Undefined, view=Undefined, width=Undefined, **kwds):
         super(UnitSpecWithFrame, self).__init__(mark=mark, data=data, description=description,
                                                 encoding=encoding, height=height, name=name,
-                                                projection=projection, selection=selection, title=title,
+                                                params=params, projection=projection, title=title,
                                                 transform=transform, view=view, width=width, **kwds)
 
 
@@ -19237,7 +21073,7 @@ class UrlData(DataSource):
 
     Mapping(required=[url])
 
-    Attributes
+    Parameters
     ----------
 
     url : string
@@ -19285,13 +21121,13 @@ class UtcSingleTimeUnit(SingleTimeUnit):
         super(UtcSingleTimeUnit, self).__init__(*args)
 
 
-class VConcatSpecGenericSpec(Spec):
+class VConcatSpecGenericSpec(Spec, NonNormalizedSpec):
     """VConcatSpecGenericSpec schema wrapper
 
     Mapping(required=[vconcat])
     Base interface for a vertical concatenation specification.
 
-    Attributes
+    Parameters
     ----------
 
     vconcat : List(:class:`Spec`)
@@ -19302,10 +21138,10 @@ class VConcatSpecGenericSpec(Spec):
 
 
         * If set to ``full``, the entire calculated bounds (including axes, title, and
-          legend) will be used. - If set to ``flush``, only the specified width and height
-          values for the sub-view will be used. The ``flush`` setting can be useful when
-          attempting to place sub-plots without axes or legends into a uniform grid
-          structure.
+          legend) will be used.
+        * If set to ``flush``, only the specified width and height values for the sub-view
+          will be used. The ``flush`` setting can be useful when attempting to place
+          sub-plots without axes or legends into a uniform grid structure.
 
         **Default value:** ``"full"``
     center : boolean
@@ -19347,13 +21183,11 @@ class ValueDefWithConditionMarkPropFieldOrDatumDefGradientstringnull(ColorDef, M
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefGradientstringnullExprRef`,
-    List(:class:`ConditionalValueDefGradientstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefGradientstringnullExprRef`, List(:class:`ConditionalValueDefGradientstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
     value : anyOf(:class:`Gradient`, string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
@@ -19372,13 +21206,11 @@ class ValueDefWithConditionMarkPropFieldOrDatumDefTypeForShapestringnull(MarkPro
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDefTypeForShape`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDefTypeForShape`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
     value : anyOf(string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
@@ -19397,12 +21229,11 @@ class ValueDefWithConditionMarkPropFieldOrDatumDefnumber(MarkPropDefnumber, Nume
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberExprRef`, List(:class:`ConditionalValueDefnumberExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
     value : anyOf(float, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
@@ -19420,13 +21251,11 @@ class ValueDefWithConditionMarkPropFieldOrDatumDefnumberArray(MarkPropDefnumberA
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefnumberArrayExprRef`,
-    List(:class:`ConditionalValueDefnumberArrayExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefnumberArrayExprRef`, List(:class:`ConditionalValueDefnumberArrayExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
     value : anyOf(List(float), :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
@@ -19445,13 +21274,11 @@ class ValueDefWithConditionMarkPropFieldOrDatumDefstringnull(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`,
-    :class:`ConditionalValueDefstringnullExprRef`,
-    List(:class:`ConditionalValueDefstringnullExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
+    condition : anyOf(:class:`ConditionalMarkPropFieldOrDatumDef`, :class:`ConditionalValueDefstringnullExprRef`, List(:class:`ConditionalValueDefstringnullExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
     value : anyOf(string, None, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
@@ -19469,12 +21296,11 @@ class ValueDefWithConditionStringFieldDefText(TextDef):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
-    condition : anyOf(:class:`ConditionalStringFieldDef`,
-    :class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
-        A field definition or one or more value definition(s) with a selection predicate.
+    condition : anyOf(:class:`ConditionalStringFieldDef`, :class:`ConditionalValueDefTextExprRef`, List(:class:`ConditionalValueDefTextExprRef`))
+        A field definition or one or more value definition(s) with a parameter predicate.
     value : anyOf(:class:`Text`, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
@@ -19487,14 +21313,14 @@ class ValueDefWithConditionStringFieldDefText(TextDef):
                                                                       **kwds)
 
 
-class ValueDefnumber(VegaLiteSchema):
+class ValueDefnumber(OffsetDef):
     """ValueDefnumber schema wrapper
 
     Mapping(required=[value])
     Definition object for a constant value (primitive value or gradient definition) of an
     encoding channel.
 
-    Attributes
+    Parameters
     ----------
 
     value : float
@@ -19508,52 +21334,85 @@ class ValueDefnumber(VegaLiteSchema):
         super(ValueDefnumber, self).__init__(value=value, **kwds)
 
 
-class ValueDefnumberExprRef(VegaLiteSchema):
-    """ValueDefnumberExprRef schema wrapper
+class ValueDefnumberwidthheightExprRef(VegaLiteSchema):
+    """ValueDefnumberwidthheightExprRef schema wrapper
 
     Mapping(required=[value])
     Definition object for a constant value (primitive value or gradient definition) of an
     encoding channel.
 
-    Attributes
+    Parameters
     ----------
 
-    value : anyOf(float, :class:`ExprRef`)
+    value : anyOf(float, string, string, :class:`ExprRef`)
         A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
         definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
         values between ``0`` to ``1`` for opacity).
     """
-    _schema = {'$ref': '#/definitions/ValueDef<(number|ExprRef)>'}
+    _schema = {'$ref': '#/definitions/ValueDef<(number|"width"|"height"|ExprRef)>'}
 
     def __init__(self, value=Undefined, **kwds):
-        super(ValueDefnumberExprRef, self).__init__(value=value, **kwds)
+        super(ValueDefnumberwidthheightExprRef, self).__init__(value=value, **kwds)
 
 
-class ValueDefnumberwidthheightExprRef(VegaLiteSchema):
-    """ValueDefnumberwidthheightExprRef schema wrapper
+class VariableParameter(TopLevelParameter):
+    """VariableParameter schema wrapper
 
-    Mapping(required=[value])
-    Definition object for a constant value (primitive value or gradient definition) of an
-    encoding channel.
+    Mapping(required=[name])
 
-    Attributes
+    Parameters
     ----------
 
-    value : anyOf(float, string, string, :class:`ExprRef`)
-        A constant value in visual domain (e.g., ``"red"`` / ``"#0099ff"`` / `gradient
-        definition <https://vega.github.io/vega-lite/docs/types.html#gradient>`__ for color,
-        values between ``0`` to ``1`` for opacity).
+    name : :class:`ParameterName`
+        A unique name for the variable parameter. Parameter names should be valid JavaScript
+        identifiers: they should contain only alphanumeric characters (or "$", or "_") and
+        may not start with a digit. Reserved keywords that may not be used as parameter
+        names are "datum", "event", "item", and "parent".
+    bind : :class:`Binding`
+        Binds the parameter to an external input element such as a slider, selection list or
+        radio button group.
+    expr : :class:`Expr`
+        An expression for the value of the parameter. This expression may include other
+        parameters, in which case the parameter will automatically update in response to
+        upstream parameter changes.
+    value : Any
+        The `initial value <http://vega.github.io/vega-lite/docs/value.html>`__ of the
+        parameter.
+
+        **Default value:** ``undefined``
     """
-    _schema = {'$ref': '#/definitions/ValueDef<(number|"width"|"height"|ExprRef)>'}
+    _schema = {'$ref': '#/definitions/VariableParameter'}
 
-    def __init__(self, value=Undefined, **kwds):
-        super(ValueDefnumberwidthheightExprRef, self).__init__(value=value, **kwds)
+    def __init__(self, name=Undefined, bind=Undefined, expr=Undefined, value=Undefined, **kwds):
+        super(VariableParameter, self).__init__(name=name, bind=bind, expr=expr, value=value, **kwds)
+
+
+class Vector10string(VegaLiteSchema):
+    """Vector10string schema wrapper
+
+    List(string)
+    """
+    _schema = {'$ref': '#/definitions/Vector10<string>'}
+
+    def __init__(self, *args):
+        super(Vector10string, self).__init__(*args)
+
+
+class Vector12string(VegaLiteSchema):
+    """Vector12string schema wrapper
+
+    List(string)
+    """
+    _schema = {'$ref': '#/definitions/Vector12<string>'}
+
+    def __init__(self, *args):
+        super(Vector12string, self).__init__(*args)
 
 
 class Vector2DateTime(SelectionInitInterval):
     """Vector2DateTime schema wrapper
 
-    List([:class:`DateTime`, :class:`DateTime`])
+    List(:class:`DateTime`)
     """
     _schema = {'$ref': '#/definitions/Vector2<DateTime>'}
 
@@ -19564,7 +21423,7 @@ class Vector2DateTime(SelectionInitInterval):
 class Vector2Vector2number(VegaLiteSchema):
     """Vector2Vector2number schema wrapper
 
-    List([:class:`Vector2number`, :class:`Vector2number`])
+    List(:class:`Vector2number`)
     """
     _schema = {'$ref': '#/definitions/Vector2<Vector2<number>>'}
 
@@ -19575,7 +21434,7 @@ class Vector2Vector2number(VegaLiteSchema):
 class Vector2boolean(SelectionInitInterval):
     """Vector2boolean schema wrapper
 
-    List([boolean, boolean])
+    List(boolean)
     """
     _schema = {'$ref': '#/definitions/Vector2<boolean>'}
 
@@ -19586,7 +21445,7 @@ class Vector2boolean(SelectionInitInterval):
 class Vector2number(SelectionInitInterval):
     """Vector2number schema wrapper
 
-    List([float, float])
+    List(float)
     """
     _schema = {'$ref': '#/definitions/Vector2<number>'}
 
@@ -19597,7 +21456,7 @@ class Vector2number(SelectionInitInterval):
 class Vector2string(SelectionInitInterval):
     """Vector2string schema wrapper
 
-    List([string, string])
+    List(string)
     """
     _schema = {'$ref': '#/definitions/Vector2<string>'}
 
@@ -19608,7 +21467,7 @@ class Vector2string(SelectionInitInterval):
 class Vector3number(VegaLiteSchema):
     """Vector3number schema wrapper
 
-    List([float, float, float])
+    List(float)
     """
     _schema = {'$ref': '#/definitions/Vector3<number>'}
 
@@ -19616,16 +21475,29 @@ class Vector3number(VegaLiteSchema):
         super(Vector3number, self).__init__(*args)
 
 
+class Vector7string(VegaLiteSchema):
+    """Vector7string schema wrapper
+
+    List(string)
+    """
+    _schema = {'$ref': '#/definitions/Vector7<string>'}
+
+    def __init__(self, *args):
+        super(Vector7string, self).__init__(*args)
+
+
 class ViewBackground(VegaLiteSchema):
     """ViewBackground schema wrapper
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cursor : :class:`Cursor`
         The mouse cursor used over the view. Any valid `CSS cursor type
         <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
@@ -19634,7 +21506,9 @@ class ViewBackground(VegaLiteSchema):
 
         **Default value:** ``undefined``
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
+        **Default value:** ``1``
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -19645,19 +21519,26 @@ class ViewBackground(VegaLiteSchema):
 
         **Default value:** ``"#ddd"``
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
+        The stroke width, in pixels.
     style : anyOf(string, List(string))
         A string or array of strings indicating the name of custom styles to apply to the
         view background. A style is a named collection of mark property defaults defined
@@ -19688,7 +21569,7 @@ class ViewConfig(VegaLiteSchema):
 
     Mapping(required=[])
 
-    Attributes
+    Parameters
     ----------
 
     clip : boolean
@@ -19704,7 +21585,9 @@ class ViewConfig(VegaLiteSchema):
 
         **Default value:** ``200``
     cornerRadius : anyOf(float, :class:`ExprRef`)
+        The radius in pixels of rounded rectangles or arcs' corners.
 
+        **Default value:** ``0``
     cursor : :class:`Cursor`
         The mouse cursor used over the view. Any valid `CSS cursor type
         <https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values>`__ can be used.
@@ -19725,12 +21608,9 @@ class ViewConfig(VegaLiteSchema):
 
         **Default value:** ``undefined``
     fillOpacity : anyOf(float, :class:`ExprRef`)
+        The fill opacity (value between [0,1]).
 
-    height : float
-        Default height
-
-        **Deprecated:** Since Vega-Lite 4.0. Please use continuousHeight and discreteHeight
-        instead.
+        **Default value:** ``1``
     opacity : anyOf(float, :class:`ExprRef`)
         The overall opacity (value between [0,1]).
 
@@ -19743,44 +21623,44 @@ class ViewConfig(VegaLiteSchema):
 
         **Default value:** ``"#ddd"``
     strokeCap : anyOf(:class:`StrokeCap`, :class:`ExprRef`)
+        The stroke cap for line ending style. One of ``"butt"``, ``"round"``, or
+        ``"square"``.
 
+        **Default value:** ``"butt"``
     strokeDash : anyOf(List(float), :class:`ExprRef`)
-
+        An array of alternating stroke, space lengths for creating dashed or dotted lines.
     strokeDashOffset : anyOf(float, :class:`ExprRef`)
-
+        The offset (in pixels) into which to begin drawing with the stroke dash array.
     strokeJoin : anyOf(:class:`StrokeJoin`, :class:`ExprRef`)
+        The stroke line join method. One of ``"miter"``, ``"round"`` or ``"bevel"``.
 
+        **Default value:** ``"miter"``
     strokeMiterLimit : anyOf(float, :class:`ExprRef`)
-
+        The miter limit at which to bevel a line join.
     strokeOpacity : anyOf(float, :class:`ExprRef`)
+        The stroke opacity (value between [0,1]).
 
+        **Default value:** ``1``
     strokeWidth : anyOf(float, :class:`ExprRef`)
-
-    width : float
-        Default width
-
-        **Deprecated:** Since Vega-Lite 4.0. Please use continuousWidth and discreteWidth
-        instead.
+        The stroke width, in pixels.
     """
     _schema = {'$ref': '#/definitions/ViewConfig'}
 
     def __init__(self, clip=Undefined, continuousHeight=Undefined, continuousWidth=Undefined,
                  cornerRadius=Undefined, cursor=Undefined, discreteHeight=Undefined,
-                 discreteWidth=Undefined, fill=Undefined, fillOpacity=Undefined, height=Undefined,
-                 opacity=Undefined, step=Undefined, stroke=Undefined, strokeCap=Undefined,
-                 strokeDash=Undefined, strokeDashOffset=Undefined, strokeJoin=Undefined,
-                 strokeMiterLimit=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
-                 width=Undefined, **kwds):
+                 discreteWidth=Undefined, fill=Undefined, fillOpacity=Undefined, opacity=Undefined,
+                 step=Undefined, stroke=Undefined, strokeCap=Undefined, strokeDash=Undefined,
+                 strokeDashOffset=Undefined, strokeJoin=Undefined, strokeMiterLimit=Undefined,
+                 strokeOpacity=Undefined, strokeWidth=Undefined, **kwds):
         super(ViewConfig, self).__init__(clip=clip, continuousHeight=continuousHeight,
                                          continuousWidth=continuousWidth, cornerRadius=cornerRadius,
                                          cursor=cursor, discreteHeight=discreteHeight,
                                          discreteWidth=discreteWidth, fill=fill,
-                                         fillOpacity=fillOpacity, height=height, opacity=opacity,
-                                         step=step, stroke=stroke, strokeCap=strokeCap,
-                                         strokeDash=strokeDash, strokeDashOffset=strokeDashOffset,
-                                         strokeJoin=strokeJoin, strokeMiterLimit=strokeMiterLimit,
-                                         strokeOpacity=strokeOpacity, strokeWidth=strokeWidth,
-                                         width=width, **kwds)
+                                         fillOpacity=fillOpacity, opacity=opacity, step=step,
+                                         stroke=stroke, strokeCap=strokeCap, strokeDash=strokeDash,
+                                         strokeDashOffset=strokeDashOffset, strokeJoin=strokeJoin,
+                                         strokeMiterLimit=strokeMiterLimit, strokeOpacity=strokeOpacity,
+                                         strokeWidth=strokeWidth, **kwds)
 
 
 class WindowEventType(VegaLiteSchema):
@@ -19812,7 +21692,7 @@ class WindowFieldDef(VegaLiteSchema):
 
     Mapping(required=[op, as])
 
-    Attributes
+    Parameters
     ----------
 
     op : anyOf(:class:`AggregateOp`, :class:`WindowOnlyOp`)
@@ -19855,7 +21735,7 @@ class WindowTransform(Transform):
 
     Mapping(required=[window])
 
-    Attributes
+    Parameters
     ----------
 
     window : List(:class:`WindowFieldDef`)
diff --git a/altair/vegalite/v4/schema/mixins.py b/altair/vegalite/v5/schema/mixins.py
similarity index 88%
rename from altair/vegalite/v4/schema/mixins.py
rename to altair/vegalite/v5/schema/mixins.py
index bb1860f..569daef 100644
--- a/altair/vegalite/v4/schema/mixins.py
+++ b/altair/vegalite/v5/schema/mixins.py
@@ -1,11 +1,18 @@
 # The contents of this file are automatically written by
 # tools/generate_schema_wrapper.py. Do not modify directly.
+import sys
+
 from . import core
 from altair.utils import use_signature
 from altair.utils.schemapi import Undefined
 
+if sys.version_info >= (3, 11):
+    from typing import Self
+else:
+    from typing_extensions import Self
+
 
-class MarkMethodMixin(object):
+class MarkMethodMixin:
     """A mixin class that defines mark methods"""
 
     def mark_arc(self, align=Undefined, angle=Undefined, aria=Undefined, ariaRole=Undefined,
@@ -28,13 +35,11 @@ class MarkMethodMixin(object):
                  strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
                  theta2Offset=Undefined, thetaOffset=Undefined, thickness=Undefined,
-                 timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
+                 timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined,
                  url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined,
                  xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined,
-                 **kwds):
-        """Set the chart's mark to 'arc'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                 **kwds) -> Self:
+        """Set the chart's mark to 'arc' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -56,10 +61,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="arc", **kwds)
@@ -87,13 +92,11 @@ class MarkMethodMixin(object):
                   strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                   strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                   theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                  thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                  thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                   tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                  yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'area'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                  yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'area' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -115,10 +118,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="area", **kwds)
@@ -146,13 +149,11 @@ class MarkMethodMixin(object):
                  strokeOffset=Undefined, strokeOpacity=Undefined, strokeWidth=Undefined,
                  style=Undefined, tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
                  theta2Offset=Undefined, thetaOffset=Undefined, thickness=Undefined,
-                 timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
+                 timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined,
                  url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined,
                  xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined, yOffset=Undefined,
-                 **kwds):
-        """Set the chart's mark to 'bar'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                 **kwds) -> Self:
+        """Set the chart's mark to 'bar' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -174,10 +175,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="bar", **kwds)
@@ -205,13 +206,11 @@ class MarkMethodMixin(object):
                    strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                    strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                    theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                   thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                   thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                    tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                    x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                   yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'image'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                   yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'image' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -233,10 +232,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="image", **kwds)
@@ -264,13 +263,11 @@ class MarkMethodMixin(object):
                   strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                   strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                   theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                  thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                  thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                   tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                  yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'line'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                  yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'line' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -292,10 +289,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="line", **kwds)
@@ -323,13 +320,11 @@ class MarkMethodMixin(object):
                    strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                    strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                    theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                   thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                   thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                    tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                    x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                   yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'point'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                   yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'point' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -351,10 +346,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="point", **kwds)
@@ -382,13 +377,11 @@ class MarkMethodMixin(object):
                   strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                   strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                   theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                  thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                  thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                   tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                  yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'rect'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                  yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'rect' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -410,10 +403,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="rect", **kwds)
@@ -441,13 +434,11 @@ class MarkMethodMixin(object):
                   strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                   strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                   theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                  thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                  thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                   tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                  yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'rule'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                  yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'rule' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -469,10 +460,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="rule", **kwds)
@@ -500,13 +491,11 @@ class MarkMethodMixin(object):
                   strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                   strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                   theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                  thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                  thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                   tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                  yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'text'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                  yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'text' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -528,10 +517,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="text", **kwds)
@@ -559,13 +548,11 @@ class MarkMethodMixin(object):
                   strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                   strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                   theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                  thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                  thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                   tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                   x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                  yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'tick'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                  yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'tick' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -587,10 +574,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="tick", **kwds)
@@ -618,13 +605,11 @@ class MarkMethodMixin(object):
                    strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                    strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                    theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                   thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                   thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                    tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                    x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                   yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'trail'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                   yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'trail' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -646,10 +631,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="trail", **kwds)
@@ -677,13 +662,11 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                     strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                     theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                    thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                    thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                     tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                     x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
-                    y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'circle'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                    y2Offset=Undefined, yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'circle' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -705,10 +688,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="circle", **kwds)
@@ -736,13 +719,11 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=Undefined, strokeOffset=Undefined, strokeOpacity=Undefined,
                     strokeWidth=Undefined, style=Undefined, tension=Undefined, text=Undefined,
                     theta=Undefined, theta2=Undefined, theta2Offset=Undefined, thetaOffset=Undefined,
-                    thickness=Undefined, timeUnitBand=Undefined, timeUnitBandPosition=Undefined,
+                    thickness=Undefined, timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined,
                     tooltip=Undefined, url=Undefined, width=Undefined, x=Undefined, x2=Undefined,
                     x2Offset=Undefined, xOffset=Undefined, y=Undefined, y2=Undefined,
-                    y2Offset=Undefined, yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'square'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                    y2Offset=Undefined, yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'square' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -764,10 +745,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="square", **kwds)
@@ -796,13 +777,11 @@ class MarkMethodMixin(object):
                       strokeOpacity=Undefined, strokeWidth=Undefined, style=Undefined,
                       tension=Undefined, text=Undefined, theta=Undefined, theta2=Undefined,
                       theta2Offset=Undefined, thetaOffset=Undefined, thickness=Undefined,
-                      timeUnitBand=Undefined, timeUnitBandPosition=Undefined, tooltip=Undefined,
+                      timeUnitBandPosition=Undefined, timeUnitBandSize=Undefined, tooltip=Undefined,
                       url=Undefined, width=Undefined, x=Undefined, x2=Undefined, x2Offset=Undefined,
                       xOffset=Undefined, y=Undefined, y2=Undefined, y2Offset=Undefined,
-                      yOffset=Undefined, **kwds):
-        """Set the chart's mark to 'geoshape'
-    
-        For information on additional arguments, see :class:`MarkDef`
+                      yOffset=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'geoshape' (see :class:`MarkDef`)
         """
         kwds = dict(align=align, angle=angle, aria=aria, ariaRole=ariaRole,
                     ariaRoleDescription=ariaRoleDescription, aspect=aspect, bandSize=bandSize,
@@ -824,10 +803,10 @@ class MarkMethodMixin(object):
                     strokeMiterLimit=strokeMiterLimit, strokeOffset=strokeOffset,
                     strokeOpacity=strokeOpacity, strokeWidth=strokeWidth, style=style, tension=tension,
                     text=text, theta=theta, theta2=theta2, theta2Offset=theta2Offset,
-                    thetaOffset=thetaOffset, thickness=thickness, timeUnitBand=timeUnitBand,
-                    timeUnitBandPosition=timeUnitBandPosition, tooltip=tooltip, url=url, width=width,
-                    x=x, x2=x2, x2Offset=x2Offset, xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset,
-                    yOffset=yOffset, **kwds)
+                    thetaOffset=thetaOffset, thickness=thickness,
+                    timeUnitBandPosition=timeUnitBandPosition, timeUnitBandSize=timeUnitBandSize,
+                    tooltip=tooltip, url=url, width=width, x=x, x2=x2, x2Offset=x2Offset,
+                    xOffset=xOffset, y=y, y2=y2, y2Offset=y2Offset, yOffset=yOffset, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.MarkDef(type="geoshape", **kwds)
@@ -836,14 +815,13 @@ class MarkMethodMixin(object):
         return copy
 
     def mark_boxplot(self, box=Undefined, clip=Undefined, color=Undefined, extent=Undefined,
-                     median=Undefined, opacity=Undefined, orient=Undefined, outliers=Undefined,
-                     rule=Undefined, size=Undefined, ticks=Undefined, **kwds):
-        """Set the chart's mark to 'boxplot'
-    
-        For information on additional arguments, see :class:`BoxPlotDef`
+                     invalid=Undefined, median=Undefined, opacity=Undefined, orient=Undefined,
+                     outliers=Undefined, rule=Undefined, size=Undefined, ticks=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'boxplot' (see :class:`BoxPlotDef`)
         """
-        kwds = dict(box=box, clip=clip, color=color, extent=extent, median=median, opacity=opacity,
-                    orient=orient, outliers=outliers, rule=rule, size=size, ticks=ticks, **kwds)
+        kwds = dict(box=box, clip=clip, color=color, extent=extent, invalid=invalid, median=median,
+                    opacity=opacity, orient=orient, outliers=outliers, rule=rule, size=size,
+                    ticks=ticks, **kwds)
         copy = self.copy(deep=False)
         if any(val is not Undefined for val in kwds.values()):
             copy.mark = core.BoxPlotDef(type="boxplot", **kwds)
@@ -853,10 +831,8 @@ class MarkMethodMixin(object):
 
     def mark_errorbar(self, clip=Undefined, color=Undefined, extent=Undefined, opacity=Undefined,
                       orient=Undefined, rule=Undefined, size=Undefined, thickness=Undefined,
-                      ticks=Undefined, **kwds):
-        """Set the chart's mark to 'errorbar'
-    
-        For information on additional arguments, see :class:`ErrorBarDef`
+                      ticks=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'errorbar' (see :class:`ErrorBarDef`)
         """
         kwds = dict(clip=clip, color=color, extent=extent, opacity=opacity, orient=orient, rule=rule,
                     size=size, thickness=thickness, ticks=ticks, **kwds)
@@ -869,10 +845,8 @@ class MarkMethodMixin(object):
 
     def mark_errorband(self, band=Undefined, borders=Undefined, clip=Undefined, color=Undefined,
                        extent=Undefined, interpolate=Undefined, opacity=Undefined, orient=Undefined,
-                       tension=Undefined, **kwds):
-        """Set the chart's mark to 'errorband'
-    
-        For information on additional arguments, see :class:`ErrorBandDef`
+                       tension=Undefined, **kwds) -> Self:
+        """Set the chart's mark to 'errorband' (see :class:`ErrorBandDef`)
         """
         kwds = dict(band=band, borders=borders, clip=clip, color=color, extent=extent,
                     interpolate=interpolate, opacity=opacity, orient=orient, tension=tension, **kwds)
@@ -884,17 +858,17 @@ class MarkMethodMixin(object):
         return copy
 
 
-class ConfigMethodMixin(object):
+class ConfigMethodMixin:
     """A mixin class that defines config methods"""
 
     @use_signature(core.Config)
-    def configure(self, *args, **kwargs):
+    def configure(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=False)
         copy.config = core.Config(*args, **kwargs)
         return copy
 
     @use_signature(core.RectConfig)
-    def configure_arc(self, *args, **kwargs):
+    def configure_arc(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -902,7 +876,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AreaConfig)
-    def configure_area(self, *args, **kwargs):
+    def configure_area(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -910,7 +884,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axis(self, *args, **kwargs):
+    def configure_axis(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -918,7 +892,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisBand(self, *args, **kwargs):
+    def configure_axisBand(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -926,7 +900,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisBottom(self, *args, **kwargs):
+    def configure_axisBottom(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -934,7 +908,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisDiscrete(self, *args, **kwargs):
+    def configure_axisDiscrete(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -942,7 +916,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisLeft(self, *args, **kwargs):
+    def configure_axisLeft(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -950,7 +924,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisPoint(self, *args, **kwargs):
+    def configure_axisPoint(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -958,7 +932,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisQuantitative(self, *args, **kwargs):
+    def configure_axisQuantitative(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -966,7 +940,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisRight(self, *args, **kwargs):
+    def configure_axisRight(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -974,7 +948,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisTemporal(self, *args, **kwargs):
+    def configure_axisTemporal(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -982,7 +956,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisTop(self, *args, **kwargs):
+    def configure_axisTop(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -990,7 +964,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisX(self, *args, **kwargs):
+    def configure_axisX(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -998,7 +972,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisXBand(self, *args, **kwargs):
+    def configure_axisXBand(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1006,7 +980,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisXDiscrete(self, *args, **kwargs):
+    def configure_axisXDiscrete(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1014,7 +988,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisXPoint(self, *args, **kwargs):
+    def configure_axisXPoint(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1022,7 +996,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisXQuantitative(self, *args, **kwargs):
+    def configure_axisXQuantitative(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1030,7 +1004,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisXTemporal(self, *args, **kwargs):
+    def configure_axisXTemporal(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1038,7 +1012,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisY(self, *args, **kwargs):
+    def configure_axisY(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1046,7 +1020,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisYBand(self, *args, **kwargs):
+    def configure_axisYBand(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1054,7 +1028,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisYDiscrete(self, *args, **kwargs):
+    def configure_axisYDiscrete(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1062,7 +1036,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisYPoint(self, *args, **kwargs):
+    def configure_axisYPoint(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1070,7 +1044,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisYQuantitative(self, *args, **kwargs):
+    def configure_axisYQuantitative(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1078,7 +1052,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.AxisConfig)
-    def configure_axisYTemporal(self, *args, **kwargs):
+    def configure_axisYTemporal(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1086,7 +1060,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.BarConfig)
-    def configure_bar(self, *args, **kwargs):
+    def configure_bar(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1094,7 +1068,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.BoxPlotConfig)
-    def configure_boxplot(self, *args, **kwargs):
+    def configure_boxplot(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1102,7 +1076,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.MarkConfig)
-    def configure_circle(self, *args, **kwargs):
+    def configure_circle(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1110,7 +1084,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.CompositionConfig)
-    def configure_concat(self, *args, **kwargs):
+    def configure_concat(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1118,7 +1092,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.ErrorBandConfig)
-    def configure_errorband(self, *args, **kwargs):
+    def configure_errorband(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1126,7 +1100,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.ErrorBarConfig)
-    def configure_errorbar(self, *args, **kwargs):
+    def configure_errorbar(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1134,7 +1108,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.CompositionConfig)
-    def configure_facet(self, *args, **kwargs):
+    def configure_facet(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1142,7 +1116,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.MarkConfig)
-    def configure_geoshape(self, *args, **kwargs):
+    def configure_geoshape(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1150,7 +1124,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.HeaderConfig)
-    def configure_header(self, *args, **kwargs):
+    def configure_header(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1158,7 +1132,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.HeaderConfig)
-    def configure_headerColumn(self, *args, **kwargs):
+    def configure_headerColumn(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1166,7 +1140,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.HeaderConfig)
-    def configure_headerFacet(self, *args, **kwargs):
+    def configure_headerFacet(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1174,7 +1148,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.HeaderConfig)
-    def configure_headerRow(self, *args, **kwargs):
+    def configure_headerRow(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1182,7 +1156,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.RectConfig)
-    def configure_image(self, *args, **kwargs):
+    def configure_image(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1190,7 +1164,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.LegendConfig)
-    def configure_legend(self, *args, **kwargs):
+    def configure_legend(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1198,7 +1172,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.LineConfig)
-    def configure_line(self, *args, **kwargs):
+    def configure_line(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1206,7 +1180,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.MarkConfig)
-    def configure_mark(self, *args, **kwargs):
+    def configure_mark(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1214,7 +1188,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.MarkConfig)
-    def configure_point(self, *args, **kwargs):
+    def configure_point(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1222,7 +1196,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.ProjectionConfig)
-    def configure_projection(self, *args, **kwargs):
+    def configure_projection(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1230,7 +1204,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.RangeConfig)
-    def configure_range(self, *args, **kwargs):
+    def configure_range(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1238,7 +1212,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.RectConfig)
-    def configure_rect(self, *args, **kwargs):
+    def configure_rect(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1246,7 +1220,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.MarkConfig)
-    def configure_rule(self, *args, **kwargs):
+    def configure_rule(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1254,7 +1228,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.ScaleConfig)
-    def configure_scale(self, *args, **kwargs):
+    def configure_scale(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1262,7 +1236,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.SelectionConfig)
-    def configure_selection(self, *args, **kwargs):
+    def configure_selection(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1270,7 +1244,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.MarkConfig)
-    def configure_square(self, *args, **kwargs):
+    def configure_square(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1278,7 +1252,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.MarkConfig)
-    def configure_text(self, *args, **kwargs):
+    def configure_text(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1286,7 +1260,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.TickConfig)
-    def configure_tick(self, *args, **kwargs):
+    def configure_tick(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1294,7 +1268,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.TitleConfig)
-    def configure_title(self, *args, **kwargs):
+    def configure_title(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1302,7 +1276,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.LineConfig)
-    def configure_trail(self, *args, **kwargs):
+    def configure_trail(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
@@ -1310,7 +1284,7 @@ class ConfigMethodMixin(object):
         return copy
 
     @use_signature(core.ViewConfig)
-    def configure_view(self, *args, **kwargs):
+    def configure_view(self, *args, **kwargs) -> Self:
         copy = self.copy(deep=['config'])
         if copy.config is Undefined:
             copy.config = core.Config()
diff --git a/altair/vegalite/v4/schema/vega-lite-schema.json b/altair/vegalite/v5/schema/vega-lite-schema.json
similarity index 67%
rename from altair/vegalite/v4/schema/vega-lite-schema.json
rename to altair/vegalite/v5/schema/vega-lite-schema.json
index dc73fa4..a6c9d50 100644
--- a/altair/vegalite/v4/schema/vega-lite-schema.json
+++ b/altair/vegalite/v5/schema/vega-lite-schema.json
@@ -128,7 +128,7 @@
     "AnyMarkConfig": {
       "anyOf": [
         {
-          "$ref": "#/definitions/MarkConfig<>"
+          "$ref": "#/definitions/MarkConfig"
         },
         {
           "$ref": "#/definitions/AreaConfig"
@@ -252,7 +252,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "cornerRadius": {
           "anyOf": [
@@ -496,13 +496,14 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -510,7 +511,7 @@
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -586,7 +587,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -597,7 +598,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -634,7 +636,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -645,7 +648,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "shape": {
           "anyOf": [
@@ -658,7 +662,7 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -674,7 +678,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
           "minimum": 0
         },
         "smooth": {
@@ -856,14 +860,14 @@
           ],
           "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
         "timeUnitBandPosition": {
           "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
           "type": "number"
         },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
         "tooltip": {
           "anyOf": [
             {
@@ -885,7 +889,7 @@
               "type": "null"
             }
           ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
         "url": {
           "anyOf": [
@@ -976,7 +980,7 @@
       "additionalProperties": false,
       "properties": {
         "argmax": {
-          "type": "string"
+          "$ref": "#/definitions/FieldName"
         }
       },
       "required": [
@@ -988,7 +992,7 @@
       "additionalProperties": false,
       "properties": {
         "argmin": {
-          "type": "string"
+          "$ref": "#/definitions/FieldName"
         }
       },
       "required": [
@@ -1045,7 +1049,7 @@
         "bandPosition": {
           "anyOf": [
             {
-              "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n  __Default value:__ `0.5`",
+              "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n __Default value:__ `0.5`",
               "type": "number"
             },
             {
@@ -1065,15 +1069,8 @@
           ]
         },
         "domain": {
-          "anyOf": [
-            {
-              "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`",
+          "type": "boolean"
         },
         "domainCap": {
           "anyOf": [
@@ -1157,13 +1154,13 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/Dict<unknown>"
+              "$ref": "#/definitions/Dict"
             }
           ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
         "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
           "type": "string"
         },
         "grid": {
@@ -1506,15 +1503,8 @@
           ]
         },
         "labels": {
-          "anyOf": [
-            {
-              "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
+          "type": "boolean"
         },
         "maxExtent": {
           "anyOf": [
@@ -1539,8 +1529,15 @@
           ]
         },
         "offset": {
-          "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)",
-          "type": "number"
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)"
         },
         "orient": {
           "anyOf": [
@@ -1675,15 +1672,8 @@
           ]
         },
         "tickExtra": {
-          "anyOf": [
-            {
-              "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.",
+          "type": "boolean"
         },
         "tickMinStep": {
           "anyOf": [
@@ -1722,15 +1712,8 @@
           ]
         },
         "tickRound": {
-          "anyOf": [
-            {
-              "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
+          "type": "boolean"
         },
         "tickSize": {
           "anyOf": [
@@ -1763,15 +1746,8 @@
           ]
         },
         "ticks": {
-          "anyOf": [
-            {
-              "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
+          "type": "boolean"
         },
         "title": {
           "anyOf": [
@@ -1782,7 +1758,7 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "titleAlign": {
           "anyOf": [
@@ -2026,7 +2002,7 @@
         "bandPosition": {
           "anyOf": [
             {
-              "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n  __Default value:__ `0.5`",
+              "description": "An interpolation fraction indicating where, for `band` scales, axis ticks should be positioned. A value of `0` places ticks at the left edge of their bands. A value of `0.5` places ticks in the middle of their bands.\n\n __Default value:__ `0.5`",
               "type": "number"
             },
             {
@@ -2050,15 +2026,8 @@
           "type": "boolean"
         },
         "domain": {
-          "anyOf": [
-            {
-              "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "A boolean flag indicating if the domain (the axis baseline) should be included as part of the axis.\n\n__Default value:__ `true`",
+          "type": "boolean"
         },
         "domainCap": {
           "anyOf": [
@@ -2142,13 +2111,13 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/Dict<unknown>"
+              "$ref": "#/definitions/Dict"
             }
           ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
         "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
           "type": "string"
         },
         "grid": {
@@ -2326,7 +2295,7 @@
           ]
         },
         "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
+          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
           "type": "string"
         },
         "labelFlush": {
@@ -2491,15 +2460,8 @@
           ]
         },
         "labels": {
-          "anyOf": [
-            {
-              "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "A boolean flag indicating if labels should be included as part of the axis.\n\n__Default value:__ `true`.",
+          "type": "boolean"
         },
         "maxExtent": {
           "anyOf": [
@@ -2524,8 +2486,15 @@
           ]
         },
         "offset": {
-          "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)",
-          "type": "number"
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "The offset, in pixels, by which to displace the axis from the edge of the enclosing group or data rectangle.\n\n__Default value:__ derived from the [axis config](https://vega.github.io/vega-lite/docs/config.html#facet-scale-config)'s `offset` (`0` by default)"
         },
         "orient": {
           "anyOf": [
@@ -2660,15 +2629,8 @@
           ]
         },
         "tickExtra": {
-          "anyOf": [
-            {
-              "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "Boolean flag indicating if an extra axis tick should be added for the initial position of the axis. This flag is useful for styling axes for `band` scales such that ticks are placed on band boundaries rather in the middle of a band. Use in conjunction with `\"bandPosition\": 1` and an axis `\"padding\"` value of `0`.",
+          "type": "boolean"
         },
         "tickMinStep": {
           "anyOf": [
@@ -2707,15 +2669,8 @@
           ]
         },
         "tickRound": {
-          "anyOf": [
-            {
-              "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "Boolean flag indicating if pixel position values should be rounded to the nearest integer.\n\n__Default value:__ `true`",
+          "type": "boolean"
         },
         "tickSize": {
           "anyOf": [
@@ -2748,15 +2703,8 @@
           ]
         },
         "ticks": {
-          "anyOf": [
-            {
-              "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+          "description": "Boolean value that determines whether the axis should include ticks.\n\n__Default value:__ `true`",
+          "type": "boolean"
         },
         "title": {
           "anyOf": [
@@ -2767,7 +2715,7 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "titleAlign": {
           "anyOf": [
@@ -3015,6 +2963,27 @@
       },
       "type": "object"
     },
+    "BBox": {
+      "anyOf": [
+        {
+          "items": {
+            "type": "number"
+          },
+          "maxItems": 4,
+          "minItems": 4,
+          "type": "array"
+        },
+        {
+          "items": {
+            "type": "number"
+          },
+          "maxItems": 6,
+          "minItems": 6,
+          "type": "array"
+        }
+      ],
+      "description": "Bounding box https://tools.ietf.org/html/rfc7946#section-5"
+    },
     "BarConfig": {
       "additionalProperties": false,
       "properties": {
@@ -3125,7 +3094,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "continuousBandSize": {
           "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`",
@@ -3174,7 +3143,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "- For vertical bars, top-left and top-right corner radius. - For horizontal bars, top-right and bottom-right corner radius."
+          "description": "- For vertical bars, top-left and top-right corner radius.\n\n- For horizontal bars, top-right and bottom-right corner radius."
         },
         "cornerRadiusTopLeft": {
           "anyOf": [
@@ -3232,9 +3201,16 @@
           ]
         },
         "discreteBandSize": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/RelativeBandSize"
+            }
+          ],
           "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is  `step-2`, which provides 2 pixel offset between bars.",
-          "minimum": 0,
-          "type": "number"
+          "minimum": 0
         },
         "dx": {
           "anyOf": [
@@ -3390,13 +3366,14 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -3404,7 +3381,7 @@
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -3469,7 +3446,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -3480,7 +3457,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -3502,7 +3480,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -3513,7 +3492,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "shape": {
           "anyOf": [
@@ -3526,7 +3506,7 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -3542,7 +3522,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
           "minimum": 0
         },
         "smooth": {
@@ -3724,14 +3704,14 @@
           ],
           "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
         "timeUnitBandPosition": {
           "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
           "type": "number"
         },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
         "tooltip": {
           "anyOf": [
             {
@@ -3753,7 +3733,7 @@
               "type": "null"
             }
           ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
         "url": {
           "anyOf": [
@@ -4143,20 +4123,15 @@
     "BinExtent": {
       "anyOf": [
         {
-          "items": [
-            {
-              "type": "number"
-            },
-            {
-              "type": "number"
-            }
-          ],
+          "items": {
+            "type": "number"
+          },
           "maxItems": 2,
           "minItems": 2,
           "type": "array"
         },
         {
-          "$ref": "#/definitions/SelectionExtent"
+          "$ref": "#/definitions/ParameterExtent"
         }
       ]
     },
@@ -4178,14 +4153,9 @@
         },
         "divide": {
           "description": "Scale factors indicating allowable subdivisions. The default value is [5, 2], which indicates that for base 10 numbers (the default base), the method may consider dividing bin sizes by 5 and/or 2. For example, for an initial step size of 10, the method can check if bin sizes of 2 (= 10/5), 5 (= 10/2), or 1 (= 10/(5*2)) might also satisfy the given constraints.\n\n__Default value:__ `[5, 2]`",
-          "items": [
-            {
-              "type": "number"
-            },
-            {
-              "type": "number"
-            }
-          ],
+          "items": {
+            "type": "number"
+          },
           "maxItems": 2,
           "minItems": 1,
           "type": "array"
@@ -4267,35 +4237,96 @@
       "additionalProperties": false,
       "properties": {
         "debounce": {
+          "description": "If defined, delays event handling until the specified milliseconds have elapsed since the last event was fired.",
           "type": "number"
         },
         "element": {
-          "$ref": "#/definitions/Element"
+          "$ref": "#/definitions/Element",
+          "description": "An optional CSS selector string indicating the parent element to which the input element should be added. By default, all input elements are added within the parent container of the Vega view."
         },
         "input": {
           "const": "checkbox",
           "type": "string"
         },
         "name": {
+          "description": "By default, the signal name is used to label input elements. This `name` property can be used instead to specify a custom label for the bound signal.",
           "type": "string"
+        }
+      },
+      "required": [
+        "input"
+      ],
+      "type": "object"
+    },
+    "BindDirect": {
+      "additionalProperties": false,
+      "properties": {
+        "debounce": {
+          "description": "If defined, delays event handling until the specified milliseconds have elapsed since the last event was fired.",
+          "type": "number"
         },
-        "type": {
+        "element": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Element"
+            },
+            {
+              "additionalProperties": false,
+              "type": "object"
+            }
+          ],
+          "description": "An input element that exposes a _value_ property and supports the [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) interface, or a CSS selector string to such an element. When the element updates and dispatches an event, the _value_ property will be used as the new, bound signal value. When the signal updates independent of the element, the _value_ property will be set to the signal value and a new event will be dispatched on the element."
+        },
+        "event": {
+          "description": "The event (default `\"input\"`) to listen for to track changes on the external element.",
           "type": "string"
         }
       },
       "required": [
-        "input"
+        "element"
       ],
       "type": "object"
     },
+    "BindInput": {
+      "additionalProperties": false,
+      "properties": {
+        "autocomplete": {
+          "description": "A hint for form autofill. See the [HTML autocomplete attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) for additional information.",
+          "type": "string"
+        },
+        "debounce": {
+          "description": "If defined, delays event handling until the specified milliseconds have elapsed since the last event was fired.",
+          "type": "number"
+        },
+        "element": {
+          "$ref": "#/definitions/Element",
+          "description": "An optional CSS selector string indicating the parent element to which the input element should be added. By default, all input elements are added within the parent container of the Vega view."
+        },
+        "input": {
+          "description": "The type of input element to use. The valid values are `\"checkbox\"`, `\"radio\"`, `\"range\"`, `\"select\"`, and any other legal [HTML form input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input).",
+          "type": "string"
+        },
+        "name": {
+          "description": "By default, the signal name is used to label input elements. This `name` property can be used instead to specify a custom label for the bound signal.",
+          "type": "string"
+        },
+        "placeholder": {
+          "description": "Text that appears in the form control when it has no value set.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "BindRadioSelect": {
       "additionalProperties": false,
       "properties": {
         "debounce": {
+          "description": "If defined, delays event handling until the specified milliseconds have elapsed since the last event was fired.",
           "type": "number"
         },
         "element": {
-          "$ref": "#/definitions/Element"
+          "$ref": "#/definitions/Element",
+          "description": "An optional CSS selector string indicating the parent element to which the input element should be added. By default, all input elements are added within the parent container of the Vega view."
         },
         "input": {
           "enum": [
@@ -4305,21 +4336,20 @@
           "type": "string"
         },
         "labels": {
+          "description": "An array of label strings to represent the `options` values. If unspecified, the `options` value will be coerced to a string and used as the label.",
           "items": {
             "type": "string"
           },
           "type": "array"
         },
         "name": {
+          "description": "By default, the signal name is used to label input elements. This `name` property can be used instead to specify a custom label for the bound signal.",
           "type": "string"
         },
         "options": {
-          "items": {
-          },
+          "description": "An array of options to select from.",
+          "items": {},
           "type": "array"
-        },
-        "type": {
-          "type": "string"
         }
       },
       "required": [
@@ -4332,29 +4362,32 @@
       "additionalProperties": false,
       "properties": {
         "debounce": {
+          "description": "If defined, delays event handling until the specified milliseconds have elapsed since the last event was fired.",
           "type": "number"
         },
         "element": {
-          "$ref": "#/definitions/Element"
+          "$ref": "#/definitions/Element",
+          "description": "An optional CSS selector string indicating the parent element to which the input element should be added. By default, all input elements are added within the parent container of the Vega view."
         },
         "input": {
           "const": "range",
           "type": "string"
         },
         "max": {
+          "description": "Sets the maximum slider value. Defaults to the larger of the signal value and `100`.",
           "type": "number"
         },
         "min": {
+          "description": "Sets the minimum slider value. Defaults to the smaller of the signal value and `0`.",
           "type": "number"
         },
         "name": {
+          "description": "By default, the signal name is used to label input elements. This `name` property can be used instead to specify a custom label for the bound signal.",
           "type": "string"
         },
         "step": {
+          "description": "Sets the minimum slider increment. If undefined, the step size will be automatically determined based on the `min` and `max` values.",
           "type": "number"
-        },
-        "type": {
-          "type": "string"
         }
       },
       "required": [
@@ -4374,7 +4407,10 @@
           "$ref": "#/definitions/BindRange"
         },
         {
-          "$ref": "#/definitions/InputBinding"
+          "$ref": "#/definitions/BindInput"
+        },
+        {
+          "$ref": "#/definitions/BindDirect"
         }
       ]
     },
@@ -4415,7 +4451,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4429,7 +4465,7 @@
               "type": "number"
             }
           ],
-          "description": "The extent of the whiskers. Available options include: - `\"min-max\"`: min and max are the lower and upper whiskers respectively. - A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`."
+          "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`."
         },
         "median": {
           "anyOf": [
@@ -4437,7 +4473,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4447,7 +4483,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4457,7 +4493,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4471,7 +4507,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         }
@@ -4487,7 +4523,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4507,7 +4543,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "extent": {
           "anyOf": [
@@ -4519,7 +4555,18 @@
               "type": "number"
             }
           ],
-          "description": "The extent of the whiskers. Available options include: - `\"min-max\"`: min and max are the lower and upper whiskers respectively. - A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`."
+          "description": "The extent of the whiskers. Available options include:\n- `\"min-max\"`: min and max are the lower and upper whiskers respectively.\n- A number representing multiple of the interquartile range. This number will be multiplied by the IQR to determine whisker boundary, which spans from the smallest data to the largest data within the range _[Q1 - k * IQR, Q3 + k * IQR]_ where _Q1_ and _Q3_ are the first and third quartiles while _IQR_ is the interquartile range (_Q3-Q1_).\n\n__Default value:__ `1.5`."
+        },
+        "invalid": {
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "enum": [
+            "filter",
+            null
+          ],
+          "type": [
+            "string",
+            "null"
+          ]
         },
         "median": {
           "anyOf": [
@@ -4527,12 +4574,14 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
         "opacity": {
           "description": "The opacity (value between [0,1]) of the mark.",
+          "maximum": 1,
+          "minimum": 0,
           "type": "number"
         },
         "orient": {
@@ -4545,7 +4594,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4555,7 +4604,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4569,7 +4618,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
           ]
         },
@@ -4943,7 +4992,7 @@
               "$ref": "#/definitions/OrderValueDef"
             }
           ],
-          "description": "Order of the marks. - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order). - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources. - Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
+          "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
         },
         "radius": {
           "$ref": "#/definitions/PolarDef",
@@ -4955,11 +5004,11 @@
         },
         "shape": {
           "$ref": "#/definitions/ShapeDef",
-          "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:    - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.    - the line symbol `\"stroke\"`    - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`    - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)"
+          "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:   - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.   - the line symbol `\"stroke\"`   - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`   - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)"
         },
         "size": {
           "$ref": "#/definitions/NumericMarkPropDef",
-          "description": "Size of the mark. - For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark. - For `\"bar\"` and `\"tick\"` – the bar and tick's size. - For `\"text\"` – the text's font size. - Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)"
+          "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)"
         },
         "stroke": {
           "$ref": "#/definitions/ColorDef",
@@ -5050,6 +5099,10 @@
           ],
           "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
         },
+        "xOffset": {
+          "$ref": "#/definitions/OffsetDef",
+          "description": "Offset of x-position of the marks"
+        },
         "y": {
           "$ref": "#/definitions/PositionDef",
           "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
@@ -5079,6 +5132,10 @@
             }
           ],
           "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
+        },
+        "yOffset": {
+          "$ref": "#/definitions/OffsetDef",
+          "description": "Offset of y-position of the marks"
         }
       },
       "type": "object"
@@ -5113,7 +5170,7 @@
       "additionalProperties": false,
       "properties": {
         "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
           "type": "number"
         },
         "spacing": {
@@ -5129,7 +5186,7 @@
           "$ref": "#/definitions/ConditionalPredicate<MarkPropFieldOrDatumDef>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<MarkPropFieldOrDatumDef>"
+          "$ref": "#/definitions/ConditionalParameter<MarkPropFieldOrDatumDef>"
         }
       ]
     },
@@ -5139,7 +5196,7 @@
           "$ref": "#/definitions/ConditionalPredicate<MarkPropFieldOrDatumDef<TypeForShape>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<MarkPropFieldOrDatumDef<TypeForShape>>"
+          "$ref": "#/definitions/ConditionalParameter<MarkPropFieldOrDatumDef<TypeForShape>>"
         }
       ]
     },
@@ -5149,7 +5206,7 @@
           "$ref": "#/definitions/ConditionalPredicate<StringFieldDef>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<StringFieldDef>"
+          "$ref": "#/definitions/ConditionalParameter<StringFieldDef>"
         }
       ]
     },
@@ -5159,7 +5216,7 @@
           "$ref": "#/definitions/ConditionalPredicate<ValueDef<(Gradient|string|null|ExprRef)>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef<(Gradient|string|null|ExprRef)>>"
+          "$ref": "#/definitions/ConditionalParameter<ValueDef<(Gradient|string|null|ExprRef)>>"
         }
       ]
     },
@@ -5169,7 +5226,7 @@
           "$ref": "#/definitions/ConditionalPredicate<ValueDef<(Text|ExprRef)>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef<(Text|ExprRef)>>"
+          "$ref": "#/definitions/ConditionalParameter<ValueDef<(Text|ExprRef)>>"
         }
       ]
     },
@@ -5179,7 +5236,7 @@
           "$ref": "#/definitions/ConditionalPredicate<ValueDef<(number[]|ExprRef)>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef<(number[]|ExprRef)>>"
+          "$ref": "#/definitions/ConditionalParameter<ValueDef<(number[]|ExprRef)>>"
         }
       ]
     },
@@ -5189,7 +5246,7 @@
           "$ref": "#/definitions/ConditionalPredicate<ValueDef<(number|ExprRef)>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef<(number|ExprRef)>>"
+          "$ref": "#/definitions/ConditionalParameter<ValueDef<(number|ExprRef)>>"
         }
       ]
     },
@@ -5199,7 +5256,7 @@
           "$ref": "#/definitions/ConditionalPredicate<ValueDef<(string|ExprRef)>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef<(string|ExprRef)>>"
+          "$ref": "#/definitions/ConditionalParameter<ValueDef<(string|ExprRef)>>"
         }
       ]
     },
@@ -5209,7 +5266,7 @@
           "$ref": "#/definitions/ConditionalPredicate<ValueDef<(string|null|ExprRef)>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef<(string|null|ExprRef)>>"
+          "$ref": "#/definitions/ConditionalParameter<ValueDef<(string|null|ExprRef)>>"
         }
       ]
     },
@@ -5219,7 +5276,7 @@
           "$ref": "#/definitions/ConditionalPredicate<ValueDef<number>>"
         },
         {
-          "$ref": "#/definitions/ConditionalSelection<ValueDef<number>>"
+          "$ref": "#/definitions/ConditionalParameter<ValueDef<number>>"
         }
       ]
     },
@@ -5762,378 +5819,185 @@
     "ConditionalAxisString": {
       "$ref": "#/definitions/ConditionalAxisProperty<(string|null)>"
     },
-    "ConditionalPredicate<(ValueDef<(Align|null)>|ExprRef)>": {
+    "ConditionalParameter<MarkPropFieldOrDatumDef>": {
       "anyOf": [
         {
           "additionalProperties": false,
           "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
+            "aggregate": {
+              "$ref": "#/definitions/Aggregate",
+              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "value": {
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
+            },
+            "bin": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/Align"
+                  "type": "boolean"
+                },
+                {
+                  "$ref": "#/definitions/BinParams"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-            }
-          },
-          "required": [
-            "test",
-            "value"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            }
-          },
-          "required": [
-            "expr",
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<(ValueDef<(Color|null)>|ExprRef)>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
+            "empty": {
+              "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+              "type": "boolean"
             },
-            "value": {
+            "field": {
+              "$ref": "#/definitions/Field",
+              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+            },
+            "legend": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/Color"
+                  "$ref": "#/definitions/Legend"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-            }
-          },
-          "required": [
-            "test",
-            "value"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
+              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            }
-          },
-          "required": [
-            "expr",
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<(ValueDef<(FontStyle|null)>|ExprRef)>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
+            "param": {
+              "$ref": "#/definitions/ParameterName",
+              "description": "Filter using a parameter name."
             },
-            "value": {
+            "scale": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/FontStyle"
+                  "$ref": "#/definitions/Scale"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-            }
-          },
-          "required": [
-            "test",
-            "value"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
             },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            }
-          },
-          "required": [
-            "expr",
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<(ValueDef<(FontWeight|null)>|ExprRef)>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
+            "sort": {
+              "$ref": "#/definitions/Sort",
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
-            "value": {
+            "timeUnit": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/FontWeight"
+                  "$ref": "#/definitions/TimeUnit"
+                },
+                {
+                  "$ref": "#/definitions/TimeUnitParams"
+                }
+              ],
+              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+            },
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "$ref": "#/definitions/StandardType",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
           },
           "required": [
-            "test",
-            "value"
+            "param"
           ],
           "type": "object"
         },
         {
           "additionalProperties": false,
           "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
             },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            }
-          },
-          "required": [
-            "expr",
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<(ValueDef<(TextBaseline|null)>|ExprRef)>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
+            "datum": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/PrimitiveValue"
+                },
+                {
+                  "$ref": "#/definitions/DateTime"
+                },
+                {
+                  "$ref": "#/definitions/ExprRef"
+                },
+                {
+                  "$ref": "#/definitions/RepeatRef"
+                }
+              ],
+              "description": "A constant value in data domain."
             },
-            "value": {
+            "empty": {
+              "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+              "type": "boolean"
+            },
+            "legend": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/TextBaseline"
+                  "$ref": "#/definitions/Legend"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-            }
-          },
-          "required": [
-            "test",
-            "value"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
+              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
+            "param": {
+              "$ref": "#/definitions/ParameterName",
+              "description": "Filter using a parameter name."
+            },
+            "scale": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Scale"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+            },
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "$ref": "#/definitions/Type",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
           },
           "required": [
-            "expr",
-            "test"
+            "param"
           ],
           "type": "object"
         }
       ]
     },
-    "ConditionalPredicate<(ValueDef<(number[]|null)>|ExprRef)>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            },
-            "value": {
-              "anyOf": [
-                {
-                  "items": {
-                    "type": "number"
-                  },
-                  "type": "array"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-            }
-          },
-          "required": [
-            "test",
-            "value"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
-            },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            }
-          },
-          "required": [
-            "expr",
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<(ValueDef<(number|null)>|ExprRef)>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            },
-            "value": {
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
-              "type": [
-                "number",
-                "null"
-              ]
-            }
-          },
-          "required": [
-            "test",
-            "value"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
-            },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            }
-          },
-          "required": [
-            "expr",
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<(ValueDef<(string|null)>|ExprRef)>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            },
-            "value": {
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
-              "type": [
-                "string",
-                "null"
-              ]
-            }
-          },
-          "required": [
-            "test",
-            "value"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "expr": {
-              "description": "Vega expression (which can refer to Vega-Lite parameters).",
-              "type": "string"
-            },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            }
-          },
-          "required": [
-            "expr",
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<MarkPropFieldOrDatumDef>": {
+    "ConditionalParameter<MarkPropFieldOrDatumDef<TypeForShape>>": {
       "anyOf": [
         {
           "additionalProperties": false,
@@ -6142,8 +6006,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -6160,7 +6024,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+            },
+            "empty": {
+              "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+              "type": "boolean"
             },
             "field": {
               "$ref": "#/definitions/Field",
@@ -6177,6 +6045,10 @@
               ],
               "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
+            "param": {
+              "$ref": "#/definitions/ParameterName",
+              "description": "Filter using a parameter name."
+            },
             "scale": {
               "anyOf": [
                 {
@@ -6190,11 +6062,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-            },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -6216,23 +6084,23 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
-              "$ref": "#/definitions/StandardType",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "$ref": "#/definitions/TypeForShape",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
           },
           "required": [
-            "test"
+            "param"
           ],
           "type": "object"
         },
         {
           "additionalProperties": false,
           "properties": {
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -6254,76 +6122,9 @@
               ],
               "description": "A constant value in data domain."
             },
-            "legend": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Legend"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-            },
-            "scale": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Scale"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-            },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            },
-            "type": {
-              "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-            }
-          },
-          "required": [
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<MarkPropFieldOrDatumDef<TypeForShape>>": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "aggregate": {
-              "$ref": "#/definitions/Aggregate",
-              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-            },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-              "maximum": 1,
-              "minimum": 0,
-              "type": "number"
-            },
-            "bin": {
-              "anyOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "$ref": "#/definitions/BinParams"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-            },
-            "field": {
-              "$ref": "#/definitions/Field",
-              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+            "empty": {
+              "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+              "type": "boolean"
             },
             "legend": {
               "anyOf": [
@@ -6336,6 +6137,10 @@
               ],
               "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
+            "param": {
+              "$ref": "#/definitions/ParameterName",
+              "description": "Filter using a parameter name."
+            },
             "scale": {
               "anyOf": [
                 {
@@ -6347,25 +6152,6 @@
               ],
               "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
             },
-            "sort": {
-              "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
-            },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            },
-            "timeUnit": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/TimeUnit"
-                },
-                {
-                  "$ref": "#/definitions/TimeUnitParams"
-                }
-              ],
-              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-            },
             "title": {
               "anyOf": [
                 {
@@ -6375,99 +6161,37 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
-              "$ref": "#/definitions/TypeForShape",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "$ref": "#/definitions/Type",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
           },
           "required": [
-            "test"
+            "param"
           ],
           "type": "object"
+        }
+      ]
+    },
+    "ConditionalParameter<StringFieldDef>": {
+      "additionalProperties": false,
+      "properties": {
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-              "maximum": 1,
-              "minimum": 0,
-              "type": "number"
-            },
-            "datum": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/PrimitiveValue"
-                },
-                {
-                  "$ref": "#/definitions/DateTime"
-                },
-                {
-                  "$ref": "#/definitions/ExprRef"
-                },
-                {
-                  "$ref": "#/definitions/RepeatRef"
-                }
-              ],
-              "description": "A constant value in data domain."
-            },
-            "legend": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Legend"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-            },
-            "scale": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Scale"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-            },
-            "test": {
-              "$ref": "#/definitions/PredicateComposition",
-              "description": "Predicate for triggering the condition"
-            },
-            "type": {
-              "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-            }
-          },
-          "required": [
-            "test"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "ConditionalPredicate<StringFieldDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "bin": {
+          "anyOf": [
+            {
+              "type": "boolean"
             },
             {
               "$ref": "#/definitions/BinParams"
@@ -6480,7 +6204,11 @@
               "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+        },
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
         },
         "field": {
           "$ref": "#/definitions/Field",
@@ -6492,22 +6220,18 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/Dict<unknown>"
+              "$ref": "#/definitions/Dict"
             }
           ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
         "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
           "type": "string"
         },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
-          "type": "string"
-        },
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "timeUnit": {
           "anyOf": [
@@ -6529,24 +6253,28 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "required": [
-        "test"
+        "param"
       ],
       "type": "object"
     },
-    "ConditionalPredicate<ValueDef<(Gradient|string|null|ExprRef)>>": {
+    "ConditionalParameter<ValueDef<(Gradient|string|null|ExprRef)>>": {
       "additionalProperties": false,
       "properties": {
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
+        },
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "value": {
           "anyOf": [
@@ -6567,17 +6295,21 @@
         }
       },
       "required": [
-        "test",
+        "param",
         "value"
       ],
       "type": "object"
     },
-    "ConditionalPredicate<ValueDef<(Text|ExprRef)>>": {
+    "ConditionalParameter<ValueDef<(Text|ExprRef)>>": {
       "additionalProperties": false,
       "properties": {
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
+        },
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "value": {
           "anyOf": [
@@ -6592,17 +6324,21 @@
         }
       },
       "required": [
-        "test",
+        "param",
         "value"
       ],
       "type": "object"
     },
-    "ConditionalPredicate<ValueDef<(number[]|ExprRef)>>": {
+    "ConditionalParameter<ValueDef<(number[]|ExprRef)>>": {
       "additionalProperties": false,
       "properties": {
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
+        },
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "value": {
           "anyOf": [
@@ -6620,17 +6356,21 @@
         }
       },
       "required": [
-        "test",
+        "param",
         "value"
       ],
       "type": "object"
     },
-    "ConditionalPredicate<ValueDef<(number|ExprRef)>>": {
+    "ConditionalParameter<ValueDef<(number|ExprRef)>>": {
       "additionalProperties": false,
       "properties": {
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
+        },
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "value": {
           "anyOf": [
@@ -6645,17 +6385,21 @@
         }
       },
       "required": [
-        "test",
+        "param",
         "value"
       ],
       "type": "object"
     },
-    "ConditionalPredicate<ValueDef<(string|ExprRef)>>": {
+    "ConditionalParameter<ValueDef<(string|ExprRef)>>": {
       "additionalProperties": false,
       "properties": {
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
+        },
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "value": {
           "anyOf": [
@@ -6670,17 +6414,21 @@
         }
       },
       "required": [
-        "test",
+        "param",
         "value"
       ],
       "type": "object"
     },
-    "ConditionalPredicate<ValueDef<(string|null|ExprRef)>>": {
+    "ConditionalParameter<ValueDef<(string|null|ExprRef)>>": {
       "additionalProperties": false,
       "properties": {
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
+        },
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "value": {
           "anyOf": [
@@ -6698,17 +6446,21 @@
         }
       },
       "required": [
-        "test",
+        "param",
         "value"
       ],
       "type": "object"
     },
-    "ConditionalPredicate<ValueDef<number>>": {
+    "ConditionalParameter<ValueDef<number>>": {
       "additionalProperties": false,
       "properties": {
-        "test": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "Predicate for triggering the condition"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
+        },
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         },
         "value": {
           "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
@@ -6716,3084 +6468,731 @@
         }
       },
       "required": [
-        "test",
+        "param",
         "value"
       ],
       "type": "object"
     },
-    "ConditionalSelection<MarkPropFieldOrDatumDef>": {
+    "ConditionalPredicate<(ValueDef<(Align|null)>|ExprRef)>": {
       "anyOf": [
         {
           "additionalProperties": false,
           "properties": {
-            "aggregate": {
-              "$ref": "#/definitions/Aggregate",
-              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-            },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-              "maximum": 1,
-              "minimum": 0,
-              "type": "number"
-            },
-            "bin": {
-              "anyOf": [
-                {
-                  "type": "boolean"
-                },
-                {
-                  "$ref": "#/definitions/BinParams"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-            },
-            "field": {
-              "$ref": "#/definitions/Field",
-              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
-            },
-            "legend": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Legend"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            "scale": {
+            "value": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/Scale"
+                  "$ref": "#/definitions/Align"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-            },
-            "selection": {
-              "$ref": "#/definitions/SelectionComposition",
-              "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-            },
-            "sort": {
-              "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+            }
+          },
+          "required": [
+            "test",
+            "value"
+          ],
+          "type": "object"
+        },
+        {
+          "additionalProperties": false,
+          "properties": {
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
+              "type": "string"
             },
-            "timeUnit": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/TimeUnit"
-                },
-                {
-                  "$ref": "#/definitions/TimeUnitParams"
-                }
-              ],
-              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
+            }
+          },
+          "required": [
+            "expr",
+            "test"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "ConditionalPredicate<(ValueDef<(Color|null)>|ExprRef)>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            "title": {
+            "value": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/Text"
+                  "$ref": "#/definitions/Color"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-            },
-            "type": {
-              "$ref": "#/definitions/StandardType",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
             }
           },
           "required": [
-            "selection"
+            "test",
+            "value"
           ],
           "type": "object"
         },
         {
           "additionalProperties": false,
           "properties": {
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-              "maximum": 1,
-              "minimum": 0,
-              "type": "number"
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
+              "type": "string"
             },
-            "datum": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/PrimitiveValue"
-                },
-                {
-                  "$ref": "#/definitions/DateTime"
-                },
-                {
-                  "$ref": "#/definitions/ExprRef"
-                },
-                {
-                  "$ref": "#/definitions/RepeatRef"
-                }
-              ],
-              "description": "A constant value in data domain."
-            },
-            "legend": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Legend"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
-            },
-            "scale": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Scale"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-            },
-            "selection": {
-              "$ref": "#/definitions/SelectionComposition",
-              "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-            },
-            "type": {
-              "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             }
           },
           "required": [
-            "selection"
+            "expr",
+            "test"
           ],
           "type": "object"
         }
       ]
     },
-    "ConditionalSelection<MarkPropFieldOrDatumDef<TypeForShape>>": {
+    "ConditionalPredicate<(ValueDef<(FontStyle|null)>|ExprRef)>": {
       "anyOf": [
         {
           "additionalProperties": false,
           "properties": {
-            "aggregate": {
-              "$ref": "#/definitions/Aggregate",
-              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-            },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-              "maximum": 1,
-              "minimum": 0,
-              "type": "number"
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            "bin": {
+            "value": {
               "anyOf": [
                 {
-                  "type": "boolean"
-                },
-                {
-                  "$ref": "#/definitions/BinParams"
+                  "$ref": "#/definitions/FontStyle"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-            },
-            "field": {
-              "$ref": "#/definitions/Field",
-              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+            }
+          },
+          "required": [
+            "test",
+            "value"
+          ],
+          "type": "object"
+        },
+        {
+          "additionalProperties": false,
+          "properties": {
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
+              "type": "string"
             },
-            "legend": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Legend"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
+            }
+          },
+          "required": [
+            "expr",
+            "test"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "ConditionalPredicate<(ValueDef<(FontWeight|null)>|ExprRef)>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            "scale": {
+            "value": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/Scale"
+                  "$ref": "#/definitions/FontWeight"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-            },
-            "selection": {
-              "$ref": "#/definitions/SelectionComposition",
-              "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-            },
-            "sort": {
-              "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+            }
+          },
+          "required": [
+            "test",
+            "value"
+          ],
+          "type": "object"
+        },
+        {
+          "additionalProperties": false,
+          "properties": {
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
+              "type": "string"
             },
-            "timeUnit": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/TimeUnit"
-                },
-                {
-                  "$ref": "#/definitions/TimeUnitParams"
-                }
-              ],
-              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
+            }
+          },
+          "required": [
+            "expr",
+            "test"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "ConditionalPredicate<(ValueDef<(TextBaseline|null)>|ExprRef)>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            "title": {
+            "value": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/Text"
+                  "$ref": "#/definitions/TextBaseline"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-            },
-            "type": {
-              "$ref": "#/definitions/TypeForShape",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
             }
           },
           "required": [
-            "selection"
+            "test",
+            "value"
           ],
           "type": "object"
         },
         {
           "additionalProperties": false,
           "properties": {
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-              "maximum": 1,
-              "minimum": 0,
-              "type": "number"
-            },
-            "datum": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/PrimitiveValue"
-                },
-                {
-                  "$ref": "#/definitions/DateTime"
-                },
-                {
-                  "$ref": "#/definitions/ExprRef"
-                },
-                {
-                  "$ref": "#/definitions/RepeatRef"
-                }
-              ],
-              "description": "A constant value in data domain."
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
+              "type": "string"
             },
-            "legend": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Legend"
-                },
-                {
-                  "type": "null"
-                }
-              ],
-              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
+            }
+          },
+          "required": [
+            "expr",
+            "test"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "ConditionalPredicate<(ValueDef<(number[]|null)>|ExprRef)>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            "scale": {
+            "value": {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/Scale"
+                  "items": {
+                    "type": "number"
+                  },
+                  "type": "array"
                 },
                 {
                   "type": "null"
                 }
               ],
-              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-            },
-            "selection": {
-              "$ref": "#/definitions/SelectionComposition",
-              "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-            },
-            "type": {
-              "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
             }
           },
           "required": [
-            "selection"
+            "test",
+            "value"
           ],
           "type": "object"
-        }
-      ]
-    },
-    "ConditionalSelection<StringFieldDef>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "const": "binned",
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
-        },
-        "format": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Dict<unknown>"
-            }
-          ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
-        },
-        "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-          "type": "string"
-        },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
-          "type": "string"
-        },
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "required": [
-        "selection"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<ValueDef<(Gradient|string|null|ExprRef)>>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Gradient"
-            },
-            {
+        {
+          "additionalProperties": false,
+          "properties": {
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
               "type": "string"
             },
-            {
-              "type": "null"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             }
+          },
+          "required": [
+            "expr",
+            "test"
           ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+          "type": "object"
         }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
+      ]
     },
-    "ConditionalSelection<ValueDef<(Text|ExprRef)>>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
+    "ConditionalPredicate<(ValueDef<(number|null)>|ExprRef)>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "value": {
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
+              "type": [
+                "number",
+                "null"
+              ]
             }
+          },
+          "required": [
+            "test",
+            "value"
           ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<ValueDef<(number[]|ExprRef)>>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
+          "type": "object"
         },
-        "value": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
+        {
+          "additionalProperties": false,
+          "properties": {
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
+              "type": "string"
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             }
+          },
+          "required": [
+            "expr",
+            "test"
           ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+          "type": "object"
         }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
+      ]
     },
-    "ConditionalSelection<ValueDef<(number|ExprRef)>>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "anyOf": [
-            {
-              "type": "number"
+    "ConditionalPredicate<(ValueDef<(string|null)>|ExprRef)>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "value": {
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
+              "type": [
+                "string",
+                "null"
+              ]
             }
+          },
+          "required": [
+            "test",
+            "value"
           ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<ValueDef<(string|ExprRef)>>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
+          "type": "object"
         },
-        "value": {
-          "anyOf": [
-            {
+        {
+          "additionalProperties": false,
+          "properties": {
+            "expr": {
+              "description": "Vega expression (which can refer to Vega-Lite parameters).",
               "type": "string"
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             }
+          },
+          "required": [
+            "expr",
+            "test"
           ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+          "type": "object"
         }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
+      ]
     },
-    "ConditionalSelection<ValueDef<(string|null|ExprRef)>>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "anyOf": [
-            {
-              "type": "string"
+    "ConditionalPredicate<MarkPropFieldOrDatumDef>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "aggregate": {
+              "$ref": "#/definitions/Aggregate",
+              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            {
-              "type": "null"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
-    },
-    "ConditionalSelection<ValueDef<number>>": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "A [selection name](https://vega.github.io/vega-lite/docs/selection.html), or a series of [composed selections](https://vega.github.io/vega-lite/docs/selection.html#compose)."
-        },
-        "value": {
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
-          "type": "number"
-        }
-      },
-      "required": [
-        "selection",
-        "value"
-      ],
-      "type": "object"
-    },
-    "Config": {
-      "additionalProperties": false,
-      "properties": {
-        "arc": {
-          "$ref": "#/definitions/RectConfig",
-          "description": "Arc-specific Config"
-        },
-        "area": {
-          "$ref": "#/definitions/AreaConfig",
-          "description": "Area-Specific Config"
-        },
-        "aria": {
-          "description": "A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `\"aria-hidden\"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.\n\n__Default value:__ `true`.",
-          "type": "boolean"
-        },
-        "autosize": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/AutosizeType"
-            },
-            {
-              "$ref": "#/definitions/AutoSizeParams"
-            }
-          ],
-          "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`. Object values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`"
-        },
-        "axis": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config)."
-        },
-        "axisBand": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for axes with \"band\" scales."
-        },
-        "axisBottom": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for x-axis along the bottom edge of the chart."
-        },
-        "axisDiscrete": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for axes with \"point\" or \"band\" scales."
-        },
-        "axisLeft": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for y-axis along the left edge of the chart."
-        },
-        "axisPoint": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for axes with \"point\" scales."
-        },
-        "axisQuantitative": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for quantitative axes."
-        },
-        "axisRight": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for y-axis along the right edge of the chart."
-        },
-        "axisTemporal": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for temporal axes."
-        },
-        "axisTop": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for x-axis along the top edge of the chart."
-        },
-        "axisX": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "X-axis specific config."
-        },
-        "axisXBand": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for x-axes with \"band\" scales."
-        },
-        "axisXDiscrete": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for x-axes with \"point\" or \"band\" scales."
-        },
-        "axisXPoint": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for x-axes with \"point\" scales."
-        },
-        "axisXQuantitative": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for x-quantitative axes."
-        },
-        "axisXTemporal": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for x-temporal axes."
-        },
-        "axisY": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Y-axis specific config."
-        },
-        "axisYBand": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for y-axes with \"band\" scales."
-        },
-        "axisYDiscrete": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for y-axes with \"point\" or \"band\" scales."
-        },
-        "axisYPoint": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for y-axes with \"point\" scales."
-        },
-        "axisYQuantitative": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for y-quantitative axes."
-        },
-        "axisYTemporal": {
-          "$ref": "#/definitions/AxisConfig",
-          "description": "Config for y-temporal axes."
-        },
-        "background": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
-        },
-        "bar": {
-          "$ref": "#/definitions/BarConfig",
-          "description": "Bar-Specific Config"
-        },
-        "boxplot": {
-          "$ref": "#/definitions/BoxPlotConfig",
-          "description": "Box Config"
-        },
-        "circle": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Circle-Specific Config"
-        },
-        "concat": {
-          "$ref": "#/definitions/CompositionConfig",
-          "description": "Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`)"
-        },
-        "countTitle": {
-          "description": "Default axis and legend title for count fields.\n\n__Default value:__ `'Count of Records`.",
-          "type": "string"
-        },
-        "customFormatTypes": {
-          "description": "Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).",
-          "type": "boolean"
-        },
-        "errorband": {
-          "$ref": "#/definitions/ErrorBandConfig",
-          "description": "ErrorBand Config"
-        },
-        "errorbar": {
-          "$ref": "#/definitions/ErrorBarConfig",
-          "description": "ErrorBar Config"
-        },
-        "facet": {
-          "$ref": "#/definitions/CompositionConfig",
-          "description": "Default configuration for the `facet` view composition operator"
-        },
-        "fieldTitle": {
-          "description": "Defines how Vega-Lite generates title for fields. There are three possible styles: - `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\"). - `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\"). - `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").",
-          "enum": [
-            "verbal",
-            "functional",
-            "plain"
-          ],
-          "type": "string"
-        },
-        "font": {
-          "description": "Default font for all text marks, titles, and labels.",
-          "type": "string"
-        },
-        "geoshape": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Geoshape-Specific Config"
-        },
-        "header": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "headerColumn": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "headerFacet": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "headerRow": {
-          "$ref": "#/definitions/HeaderConfig",
-          "description": "Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
-        },
-        "image": {
-          "$ref": "#/definitions/RectConfig",
-          "description": "Image-specific Config"
-        },
-        "legend": {
-          "$ref": "#/definitions/LegendConfig",
-          "description": "Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config)."
-        },
-        "line": {
-          "$ref": "#/definitions/LineConfig",
-          "description": "Line-Specific Config"
-        },
-        "lineBreak": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid."
-        },
-        "mark": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Mark Config"
-        },
-        "numberFormat": {
-          "description": "D3 Number format for guide labels and text marks. For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).",
-          "type": "string"
-        },
-        "padding": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Padding"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
-        },
-        "params": {
-          "description": "Dynamic variables that parameterize a visualization.",
-          "items": {
-            "$ref": "#/definitions/Parameter"
-          },
-          "type": "array"
-        },
-        "point": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Point-Specific Config"
-        },
-        "projection": {
-          "$ref": "#/definitions/ProjectionConfig",
-          "description": "Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config)."
-        },
-        "range": {
-          "$ref": "#/definitions/RangeConfig",
-          "description": "An object hash that defines default range arrays or schemes for using with scales. For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)."
-        },
-        "rect": {
-          "$ref": "#/definitions/RectConfig",
-          "description": "Rect-Specific Config"
-        },
-        "rule": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Rule-Specific Config"
-        },
-        "scale": {
-          "$ref": "#/definitions/ScaleConfig",
-          "description": "Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)."
-        },
-        "selection": {
-          "$ref": "#/definitions/SelectionConfig",
-          "description": "An object hash for defining default properties for each type of selections."
-        },
-        "square": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Square-Specific Config"
-        },
-        "style": {
-          "$ref": "#/definitions/StyleConfigIndex",
-          "description": "An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config)."
-        },
-        "text": {
-          "$ref": "#/definitions/MarkConfig",
-          "description": "Text-Specific Config"
-        },
-        "tick": {
-          "$ref": "#/definitions/TickConfig",
-          "description": "Tick-Specific Config"
-        },
-        "timeFormat": {
-          "description": "Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n\n__Default value:__ `\"%b %d, %Y\"` __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.",
-          "type": "string"
-        },
-        "title": {
-          "$ref": "#/definitions/TitleConfig",
-          "description": "Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config)."
-        },
-        "trail": {
-          "$ref": "#/definitions/LineConfig",
-          "description": "Trail-Specific Config"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewConfig",
-          "description": "Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single)."
-        }
-      },
-      "type": "object"
-    },
-    "CsvDataFormat": {
-      "additionalProperties": false,
-      "properties": {
-        "parse": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Parse"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
-        },
-        "type": {
-          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL. If no extension is detected, `\"json\"` will be used by default.",
-          "enum": [
-            "csv",
-            "tsv"
-          ],
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "Cursor": {
-      "enum": [
-        "auto",
-        "default",
-        "none",
-        "context-menu",
-        "help",
-        "pointer",
-        "progress",
-        "wait",
-        "cell",
-        "crosshair",
-        "text",
-        "vertical-text",
-        "alias",
-        "copy",
-        "move",
-        "no-drop",
-        "not-allowed",
-        "e-resize",
-        "n-resize",
-        "ne-resize",
-        "nw-resize",
-        "s-resize",
-        "se-resize",
-        "sw-resize",
-        "w-resize",
-        "ew-resize",
-        "ns-resize",
-        "nesw-resize",
-        "nwse-resize",
-        "col-resize",
-        "row-resize",
-        "all-scroll",
-        "zoom-in",
-        "zoom-out",
-        "grab",
-        "grabbing"
-      ],
-      "type": "string"
-    },
-    "Cyclical": {
-      "enum": [
-        "rainbow",
-        "sinebow"
-      ],
-      "type": "string"
-    },
-    "Data": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/DataSource"
-        },
-        {
-          "$ref": "#/definitions/Generator"
-        }
-      ]
-    },
-    "DataFormat": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/CsvDataFormat"
-        },
-        {
-          "$ref": "#/definitions/DsvDataFormat"
-        },
-        {
-          "$ref": "#/definitions/JsonDataFormat"
-        },
-        {
-          "$ref": "#/definitions/TopoDataFormat"
-        }
-      ]
-    },
-    "DataSource": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/UrlData"
-        },
-        {
-          "$ref": "#/definitions/InlineData"
-        },
-        {
-          "$ref": "#/definitions/NamedData"
-        }
-      ]
-    },
-    "Datasets": {
-      "$ref": "#/definitions/Dict<InlineDataset>"
-    },
-    "DateTime": {
-      "additionalProperties": false,
-      "description": "Object for defining datetime in Vega-Lite Filter. If both month and quarter are provided, month has higher precedence. `day` cannot be combined with other date. We accept string for month and day names.",
-      "properties": {
-        "date": {
-          "description": "Integer value representing the date (day of the month) from 1-31.",
-          "maximum": 31,
-          "minimum": 1,
-          "type": "number"
-        },
-        "day": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Day"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "Value representing the day of a week. This can be one of: (1) integer value -- `1` represents Monday; (2) case-insensitive day name (e.g., `\"Monday\"`); (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n\n**Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`."
-        },
-        "hours": {
-          "description": "Integer value representing the hour of a day from 0-23.",
-          "maximum": 24,
-          "minimum": 0,
-          "type": "number"
-        },
-        "milliseconds": {
-          "description": "Integer value representing the millisecond segment of time.",
-          "maximum": 1000,
-          "minimum": 0,
-          "type": "number"
-        },
-        "minutes": {
-          "description": "Integer value representing the minute segment of time from 0-59.",
-          "maximum": 60,
-          "minimum": 0,
-          "type": "number"
-        },
-        "month": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Month"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "One of: (1) integer value representing the month from `1`-`12`. `1` represents January; (2) case-insensitive month name (e.g., `\"January\"`); (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`)."
-        },
-        "quarter": {
-          "description": "Integer value representing the quarter of the year (from 1-4).",
-          "maximum": 4,
-          "minimum": 1,
-          "type": "number"
-        },
-        "seconds": {
-          "description": "Integer value representing the second segment (0-59) of a time value",
-          "maximum": 60,
-          "minimum": 0,
-          "type": "number"
-        },
-        "utc": {
-          "description": "A boolean flag indicating if date time is in utc time. If false, the date time is in local time",
-          "type": "boolean"
-        },
-        "year": {
-          "description": "Integer value representing the year.",
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "DatumDef": {
-      "additionalProperties": false,
-      "properties": {
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "datum": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PrimitiveValue"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            },
-            {
-              "$ref": "#/definitions/RepeatRef"
-            }
-          ],
-          "description": "A constant value in data domain."
-        },
-        "type": {
-          "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "Day": {
-      "maximum": 7,
-      "minimum": 1,
-      "type": "number"
-    },
-    "DensityTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "description": "The output fields for the sample value and corresponding density estimate.\n\n__Default value:__ `[\"value\", \"density\"]`",
-          "items": [
-            {
-              "$ref": "#/definitions/FieldName"
-            },
-            {
-              "$ref": "#/definitions/FieldName"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        "bandwidth": {
-          "description": "The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule.",
-          "type": "number"
-        },
-        "counts": {
-          "description": "A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n\n__Default value:__ `false`",
-          "type": "boolean"
-        },
-        "cumulative": {
-          "description": "A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n\n__Default value:__ `false`",
-          "type": "boolean"
-        },
-        "density": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field for which to perform density estimation."
-        },
-        "extent": {
-          "description": "A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.",
-          "items": [
-            {
-              "type": "number"
-            },
-            {
-              "type": "number"
-            }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        "groupby": {
-          "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "maxsteps": {
-          "description": "The maximum number of samples to take along the extent domain for plotting the density.\n\n__Default value:__ `200`",
-          "type": "number"
-        },
-        "minsteps": {
-          "description": "The minimum number of samples to take along the extent domain for plotting the density.\n\n__Default value:__ `25`",
-          "type": "number"
-        },
-        "steps": {
-          "description": "The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "density"
-      ],
-      "type": "object"
-    },
-    "DerivedStream": {
-      "additionalProperties": false,
-      "properties": {
-        "between": {
-          "items": {
-            "$ref": "#/definitions/Stream"
-          },
-          "type": "array"
-        },
-        "consume": {
-          "type": "boolean"
-        },
-        "debounce": {
-          "type": "number"
-        },
-        "filter": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Expr"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/Expr"
-              },
-              "type": "array"
-            }
-          ]
-        },
-        "markname": {
-          "type": "string"
-        },
-        "marktype": {
-          "$ref": "#/definitions/MarkType"
-        },
-        "stream": {
-          "$ref": "#/definitions/Stream"
-        },
-        "throttle": {
-          "type": "number"
-        }
-      },
-      "required": [
-        "stream"
-      ],
-      "type": "object"
-    },
-    "Dict<InlineDataset>": {
-      "additionalProperties": {
-        "$ref": "#/definitions/InlineDataset"
-      },
-      "type": "object"
-    },
-    "Dict<SelectionInit>": {
-      "additionalProperties": {
-        "$ref": "#/definitions/SelectionInit"
-      },
-      "type": "object"
-    },
-    "Dict<SelectionInitInterval>": {
-      "additionalProperties": {
-        "$ref": "#/definitions/SelectionInitInterval"
-      },
-      "type": "object"
-    },
-    "Dict<unknown>": {
-      "additionalProperties": {
-      },
-      "type": "object"
-    },
-    "Diverging": {
-      "enum": [
-        "blueorange",
-        "blueorange-3",
-        "blueorange-4",
-        "blueorange-5",
-        "blueorange-6",
-        "blueorange-7",
-        "blueorange-8",
-        "blueorange-9",
-        "blueorange-10",
-        "blueorange-11",
-        "brownbluegreen",
-        "brownbluegreen-3",
-        "brownbluegreen-4",
-        "brownbluegreen-5",
-        "brownbluegreen-6",
-        "brownbluegreen-7",
-        "brownbluegreen-8",
-        "brownbluegreen-9",
-        "brownbluegreen-10",
-        "brownbluegreen-11",
-        "purplegreen",
-        "purplegreen-3",
-        "purplegreen-4",
-        "purplegreen-5",
-        "purplegreen-6",
-        "purplegreen-7",
-        "purplegreen-8",
-        "purplegreen-9",
-        "purplegreen-10",
-        "purplegreen-11",
-        "pinkyellowgreen",
-        "pinkyellowgreen-3",
-        "pinkyellowgreen-4",
-        "pinkyellowgreen-5",
-        "pinkyellowgreen-6",
-        "pinkyellowgreen-7",
-        "pinkyellowgreen-8",
-        "pinkyellowgreen-9",
-        "pinkyellowgreen-10",
-        "pinkyellowgreen-11",
-        "purpleorange",
-        "purpleorange-3",
-        "purpleorange-4",
-        "purpleorange-5",
-        "purpleorange-6",
-        "purpleorange-7",
-        "purpleorange-8",
-        "purpleorange-9",
-        "purpleorange-10",
-        "purpleorange-11",
-        "redblue",
-        "redblue-3",
-        "redblue-4",
-        "redblue-5",
-        "redblue-6",
-        "redblue-7",
-        "redblue-8",
-        "redblue-9",
-        "redblue-10",
-        "redblue-11",
-        "redgrey",
-        "redgrey-3",
-        "redgrey-4",
-        "redgrey-5",
-        "redgrey-6",
-        "redgrey-7",
-        "redgrey-8",
-        "redgrey-9",
-        "redgrey-10",
-        "redgrey-11",
-        "redyellowblue",
-        "redyellowblue-3",
-        "redyellowblue-4",
-        "redyellowblue-5",
-        "redyellowblue-6",
-        "redyellowblue-7",
-        "redyellowblue-8",
-        "redyellowblue-9",
-        "redyellowblue-10",
-        "redyellowblue-11",
-        "redyellowgreen",
-        "redyellowgreen-3",
-        "redyellowgreen-4",
-        "redyellowgreen-5",
-        "redyellowgreen-6",
-        "redyellowgreen-7",
-        "redyellowgreen-8",
-        "redyellowgreen-9",
-        "redyellowgreen-10",
-        "redyellowgreen-11",
-        "spectral",
-        "spectral-3",
-        "spectral-4",
-        "spectral-5",
-        "spectral-6",
-        "spectral-7",
-        "spectral-8",
-        "spectral-9",
-        "spectral-10",
-        "spectral-11"
-      ],
-      "type": "string"
-    },
-    "DomainUnionWith": {
-      "additionalProperties": false,
-      "properties": {
-        "unionWith": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "boolean"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/DateTime"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Customized domain values to be union with the field's values.\n\n1) `domain` for _quantitative_ fields can take one of the following forms:\n\n- a two-element array with minimum and maximum values. - an array with more than two entries, for [Piecewise  quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). (Alternatively, the `domainMid` property can be set for a diverging scale.) - a string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n\n2) `domain` for _temporal_ fields can be a two-element array minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n\n3) `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values."
-        }
-      },
-      "required": [
-        "unionWith"
-      ],
-      "type": "object"
-    },
-    "DsvDataFormat": {
-      "additionalProperties": false,
-      "properties": {
-        "delimiter": {
-          "description": "The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.",
-          "maxLength": 1,
-          "minLength": 1,
-          "type": "string"
-        },
-        "parse": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Parse"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
-        },
-        "type": {
-          "const": "dsv",
-          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL. If no extension is detected, `\"json\"` will be used by default.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "delimiter"
-      ],
-      "type": "object"
-    },
-    "Element": {
-      "type": "string"
-    },
-    "EncodingSortField": {
-      "additionalProperties": false,
-      "description": "A sort definition for sorting a discrete scale in an encoding field definition.",
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n\n__Default value:__ If unspecified, defaults to the field specified in the outer data reference."
-        },
-        "op": {
-          "$ref": "#/definitions/NonArgAggregateOp",
-          "description": "An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`). An aggregation is required when there are multiple values of the sort field for each encoded data field. The input data objects will be aggregated, grouped by the encoded data field.\n\nFor a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n\n__Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`."
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)."
-        }
-      },
-      "type": "object"
-    },
-    "EncodingSortField<FieldName>": {
-      "additionalProperties": false,
-      "description": "A sort definition for sorting a discrete scale in an encoding field definition.",
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n\n__Default value:__ If unspecified, defaults to the field specified in the outer data reference."
-        },
-        "op": {
-          "$ref": "#/definitions/NonArgAggregateOp",
-          "description": "An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`). An aggregation is required when there are multiple values of the sort field for each encoded data field. The input data objects will be aggregated, grouped by the encoded data field.\n\nFor a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n\n__Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`."
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)."
-        }
-      },
-      "type": "object"
-    },
-    "ErrorBand": {
-      "const": "errorband",
-      "type": "string"
-    },
-    "ErrorBandConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "band": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        },
-        "borders": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        },
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the band. Available options include: - `\"ci\"`: Extend the band to the confidence interval of the mean. - `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean. - `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean. - `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method for the error band. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values. - `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value. - `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "tension": {
-          "description": "The tension parameter for the interpolation type of the error band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "ErrorBandDef": {
-      "additionalProperties": false,
-      "properties": {
-        "band": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        },
-        "borders": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        },
-        "clip": {
-          "description": "Whether a composite mark be clipped to the enclosing group’s width and height.",
-          "type": "boolean"
-        },
-        "color": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "$ref": "#/definitions/Gradient"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
-        },
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the band. Available options include: - `\"ci\"`: Extend the band to the confidence interval of the mean. - `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean. - `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean. - `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method for the error band. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values. - `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value. - `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "opacity": {
-          "description": "The opacity (value between [0,1]) of the mark.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined."
-        },
-        "tension": {
-          "description": "The tension parameter for the interpolation type of the error band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "type": {
-          "$ref": "#/definitions/ErrorBand",
-          "description": "The mark type. This could a primitive mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`) or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "ErrorBar": {
-      "const": "errorbar",
-      "type": "string"
-    },
-    "ErrorBarConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the rule. Available options include: - `\"ci\"`: Extend the rule to the confidence interval of the mean. - `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean. - `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean. - `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        },
-        "size": {
-          "description": "Size of the ticks of an error bar",
-          "type": "number"
-        },
-        "thickness": {
-          "description": "Thickness of the ticks and the bar of an error bar",
-          "type": "number"
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        }
-      },
-      "type": "object"
-    },
-    "ErrorBarDef": {
-      "additionalProperties": false,
-      "properties": {
-        "clip": {
-          "description": "Whether a composite mark be clipped to the enclosing group’s width and height.",
-          "type": "boolean"
-        },
-        "color": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "$ref": "#/definitions/Gradient"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
-        },
-        "extent": {
-          "$ref": "#/definitions/ErrorBarExtent",
-          "description": "The extent of the rule. Available options include: - `\"ci\"`: Extend the rule to the confidence interval of the mean. - `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean. - `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean. - `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
-        },
-        "opacity": {
-          "description": "The opacity (value between [0,1]) of the mark.",
-          "type": "number"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined."
-        },
-        "rule": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        },
-        "size": {
-          "description": "Size of the ticks of an error bar",
-          "type": "number"
-        },
-        "thickness": {
-          "description": "Thickness of the ticks and the bar of an error bar",
-          "type": "number"
-        },
-        "ticks": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/MarkConfig<ExprOrSignalRef>"
-            }
-          ]
-        },
-        "type": {
-          "$ref": "#/definitions/ErrorBar",
-          "description": "The mark type. This could a primitive mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`) or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "ErrorBarExtent": {
-      "enum": [
-        "ci",
-        "iqr",
-        "stderr",
-        "stdev"
-      ],
-      "type": "string"
-    },
-    "EventStream": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "between": {
-              "items": {
-                "$ref": "#/definitions/Stream"
-              },
-              "type": "array"
-            },
-            "consume": {
-              "type": "boolean"
-            },
-            "debounce": {
-              "type": "number"
-            },
-            "filter": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Expr"
-                },
-                {
-                  "items": {
-                    "$ref": "#/definitions/Expr"
-                  },
-                  "type": "array"
-                }
-              ]
-            },
-            "markname": {
-              "type": "string"
-            },
-            "marktype": {
-              "$ref": "#/definitions/MarkType"
-            },
-            "source": {
-              "enum": [
-                "view",
-                "scope"
-              ],
-              "type": "string"
-            },
-            "throttle": {
-              "type": "number"
-            },
-            "type": {
-              "$ref": "#/definitions/EventType"
-            }
-          },
-          "required": [
-            "type"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "between": {
-              "items": {
-                "$ref": "#/definitions/Stream"
-              },
-              "type": "array"
-            },
-            "consume": {
-              "type": "boolean"
-            },
-            "debounce": {
-              "type": "number"
-            },
-            "filter": {
-              "anyOf": [
-                {
-                  "$ref": "#/definitions/Expr"
-                },
-                {
-                  "items": {
-                    "$ref": "#/definitions/Expr"
-                  },
-                  "type": "array"
-                }
-              ]
-            },
-            "markname": {
-              "type": "string"
-            },
-            "marktype": {
-              "$ref": "#/definitions/MarkType"
-            },
-            "source": {
-              "const": "window",
-              "type": "string"
-            },
-            "throttle": {
-              "type": "number"
-            },
-            "type": {
-              "$ref": "#/definitions/WindowEventType"
-            }
-          },
-          "required": [
-            "source",
-            "type"
-          ],
-          "type": "object"
-        }
-      ]
-    },
-    "EventType": {
-      "enum": [
-        "click",
-        "dblclick",
-        "dragenter",
-        "dragleave",
-        "dragover",
-        "keydown",
-        "keypress",
-        "keyup",
-        "mousedown",
-        "mousemove",
-        "mouseout",
-        "mouseover",
-        "mouseup",
-        "mousewheel",
-        "timer",
-        "touchend",
-        "touchmove",
-        "touchstart",
-        "wheel"
-      ],
-      "type": "string"
-    },
-    "Expr": {
-      "type": "string"
-    },
-    "ExprOrSignalRef": {
-      "$ref": "#/definitions/ExprRef"
-    },
-    "ExprRef": {
-      "additionalProperties": false,
-      "properties": {
-        "expr": {
-          "description": "Vega expression (which can refer to Vega-Lite parameters).",
-          "type": "string"
-        }
-      },
-      "required": [
-        "expr"
-      ],
-      "type": "object"
-    },
-    "FacetEncodingFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
-        },
-        "header": {
-          "$ref": "#/definitions/Header",
-          "description": "An object defining properties of a facet's header."
-        },
-        "sort": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortArray"
-            },
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "$ref": "#/definitions/EncodingSortField"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "FacetFieldDef": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
-        },
-        "header": {
-          "$ref": "#/definitions/Header",
-          "description": "An object defining properties of a facet's header."
-        },
-        "sort": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortArray"
-            },
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "$ref": "#/definitions/EncodingSortField"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "FacetFieldDef<FieldName>": {
-      "additionalProperties": false,
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
-        },
-        "header": {
-          "$ref": "#/definitions/Header",
-          "description": "An object defining properties of a facet's header."
-        },
-        "sort": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SortArray"
-            },
-            {
-              "$ref": "#/definitions/SortOrder"
-            },
-            {
-              "$ref": "#/definitions/EncodingSortField<FieldName>"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
-        },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "FacetMapping": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "$ref": "#/definitions/FacetFieldDef",
-          "description": "A field definition for the horizontal facet of trellis plots."
-        },
-        "row": {
-          "$ref": "#/definitions/FacetFieldDef",
-          "description": "A field definition for the vertical facet of trellis plots."
-        }
-      },
-      "type": "object"
-    },
-    "FacetMapping<FieldName>": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "$ref": "#/definitions/FacetFieldDef<FieldName>",
-          "description": "A field definition for the horizontal facet of trellis plots."
-        },
-        "row": {
-          "$ref": "#/definitions/FacetFieldDef<FieldName>",
-          "description": "A field definition for the vertical facet of trellis plots."
-        }
-      },
-      "type": "object"
-    },
-    "FacetedEncoding": {
-      "additionalProperties": false,
-      "properties": {
-        "angle": {
-          "$ref": "#/definitions/NumericMarkPropDef",
-          "description": "Rotation angle of point and text marks."
-        },
-        "color": {
-          "$ref": "#/definitions/ColorDef",
-          "description": "Color of the marks – either fill or stroke color based on  the `filled` property of mark definition. By default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`, `\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n\n_Note:_ 1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified. 2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)."
-        },
-        "column": {
-          "$ref": "#/definitions/RowColumnEncodingFieldDef",
-          "description": "A field definition for the horizontal facet of trellis plots."
-        },
-        "description": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "A text description of this mark for ARIA accessibility (SVG output only). For SVG output the `\"aria-label\"` attribute will be set to this description."
-        },
-        "detail": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FieldDefWithoutScale"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/FieldDefWithoutScale"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "Additional levels of detail for grouping data in aggregate views and in line, trail, and area marks without mapping data to a specific visual channel."
-        },
-        "facet": {
-          "$ref": "#/definitions/FacetEncodingFieldDef",
-          "description": "A field definition for the (flexible) facet of trellis plots.\n\nIf either `row` or `column` is specified, this channel will be ignored."
-        },
-        "fill": {
-          "$ref": "#/definitions/ColorDef",
-          "description": "Fill color of the marks. __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n\n_Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified."
-        },
-        "fillOpacity": {
-          "$ref": "#/definitions/NumericMarkPropDef",
-          "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `fillOpacity` property."
-        },
-        "href": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "A URL to load upon mouse click."
-        },
-        "key": {
-          "$ref": "#/definitions/FieldDefWithoutScale",
-          "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data."
-        },
-        "latitude": {
-          "$ref": "#/definitions/LatLongDef",
-          "description": "Latitude position of geographically projected marks."
-        },
-        "latitude2": {
-          "$ref": "#/definitions/Position2Def",
-          "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
-        },
-        "longitude": {
-          "$ref": "#/definitions/LatLongDef",
-          "description": "Longitude position of geographically projected marks."
-        },
-        "longitude2": {
-          "$ref": "#/definitions/Position2Def",
-          "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
-        },
-        "opacity": {
-          "$ref": "#/definitions/NumericMarkPropDef",
-          "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `opacity` property."
-        },
-        "order": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/OrderFieldDef"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/OrderFieldDef"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/OrderValueDef"
-            }
-          ],
-          "description": "Order of the marks. - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order). - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources. - Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
-        },
-        "radius": {
-          "$ref": "#/definitions/PolarDef",
-          "description": "The outer radius in pixels of arc marks."
-        },
-        "radius2": {
-          "$ref": "#/definitions/Position2Def",
-          "description": "The inner radius in pixels of arc marks."
-        },
-        "row": {
-          "$ref": "#/definitions/RowColumnEncodingFieldDef",
-          "description": "A field definition for the vertical facet of trellis plots."
-        },
-        "shape": {
-          "$ref": "#/definitions/ShapeDef",
-          "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:    - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.    - the line symbol `\"stroke\"`    - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`    - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)"
-        },
-        "size": {
-          "$ref": "#/definitions/NumericMarkPropDef",
-          "description": "Size of the mark. - For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark. - For `\"bar\"` and `\"tick\"` – the bar and tick's size. - For `\"text\"` – the text's font size. - Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)"
-        },
-        "stroke": {
-          "$ref": "#/definitions/ColorDef",
-          "description": "Stroke color of the marks. __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n\n_Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified."
-        },
-        "strokeDash": {
-          "$ref": "#/definitions/NumericArrayMarkPropDef",
-          "description": "Stroke dash of the marks.\n\n__Default value:__ `[1,0]` (No dash)."
-        },
-        "strokeOpacity": {
-          "$ref": "#/definitions/NumericMarkPropDef",
-          "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeOpacity` property."
-        },
-        "strokeWidth": {
-          "$ref": "#/definitions/NumericMarkPropDef",
-          "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeWidth` property."
-        },
-        "text": {
-          "$ref": "#/definitions/TextDef",
-          "description": "Text of the `text` mark."
-        },
-        "theta": {
-          "$ref": "#/definitions/PolarDef",
-          "description": "- For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n\n- For text marks, polar coordinate angle in radians."
-        },
-        "theta2": {
-          "$ref": "#/definitions/Position2Def",
-          "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
-        },
-        "tooltip": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/StringFieldDef"
-              },
-              "type": "array"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite."
-        },
-        "url": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StringFieldDefWithCondition"
-            },
-            {
-              "$ref": "#/definitions/StringValueDefWithCondition"
-            }
-          ],
-          "description": "The URL of an image mark."
-        },
-        "x": {
-          "$ref": "#/definitions/PositionDef",
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "x2": {
-          "$ref": "#/definitions/Position2Def",
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
-        },
-        "xError": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/ValueDef<number>"
-            }
-          ],
-          "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "xError2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/ValueDef<number>"
-            }
-          ],
-          "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "y": {
-          "$ref": "#/definitions/PositionDef",
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "y2": {
-          "$ref": "#/definitions/Position2Def",
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        },
-        "yError": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/ValueDef<number>"
-            }
-          ],
-          "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        },
-        "yError2": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/SecondaryFieldDef"
-            },
-            {
-              "$ref": "#/definitions/ValueDef<number>"
-            }
-          ],
-          "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
-        }
-      },
-      "type": "object"
-    },
-    "FacetedUnitSpec": {
-      "additionalProperties": false,
-      "description": "Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).",
-      "properties": {
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/RowCol<boolean>"
-            }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "encoding": {
-          "$ref": "#/definitions/FacetedEncoding",
-          "description": "A key-value mapping between encoding channels and definition of fields."
-        },
-        "height": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "container",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Step"
-            }
-          ],
-          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number. - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) - To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
-        },
-        "mark": {
-          "$ref": "#/definitions/AnyMark",
-          "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)."
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks and to `latitude` and `\"longitude\"` channels for other marks."
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "selection": {
-          "additionalProperties": {
-            "$ref": "#/definitions/SelectionDef"
-          },
-          "description": "A key-value mapping between selection names and definitions.",
-          "type": "object"
-        },
-        "spacing": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/RowCol<number>"
-            }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
-        },
-        "width": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "container",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Step"
-            }
-          ],
-          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number. - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) - To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
-        }
-      },
-      "required": [
-        "mark"
-      ],
-      "type": "object"
-    },
-    "Field": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/FieldName"
-        },
-        {
-          "$ref": "#/definitions/RepeatRef"
-        }
-      ]
-    },
-    "FieldDefWithoutScale": {
-      "$ref": "#/definitions/TypedFieldDef",
-      "description": "Field Def without scale (and without bin: \"binned\" support)."
-    },
-    "FieldEqualPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "equal": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "The value that the field should be equal to."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit for the field to be tested."
-        }
-      },
-      "required": [
-        "equal",
-        "field"
-      ],
-      "type": "object"
-    },
-    "FieldGTEPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
-        },
-        "gte": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "The value that the field should be greater than or equals to."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit for the field to be tested."
-        }
-      },
-      "required": [
-        "field",
-        "gte"
-      ],
-      "type": "object"
-    },
-    "FieldGTPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
-        },
-        "gt": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "The value that the field should be greater than."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit for the field to be tested."
-        }
-      },
-      "required": [
-        "field",
-        "gt"
-      ],
-      "type": "object"
-    },
-    "FieldLTEPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
-        },
-        "lte": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "The value that the field should be less than or equals to."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit for the field to be tested."
-        }
-      },
-      "required": [
-        "field",
-        "lte"
-      ],
-      "type": "object"
-    },
-    "FieldLTPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
-        },
-        "lt": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
               "type": "number"
             },
-            {
-              "$ref": "#/definitions/DateTime"
+            "bin": {
+              "anyOf": [
+                {
+                  "type": "boolean"
+                },
+                {
+                  "$ref": "#/definitions/BinParams"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "The value that the field should be less than."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
+            "field": {
+              "$ref": "#/definitions/Field",
+              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
             },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit for the field to be tested."
-        }
-      },
-      "required": [
-        "field",
-        "lt"
-      ],
-      "type": "object"
-    },
-    "FieldName": {
-      "type": "string"
-    },
-    "FieldOneOfPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
-        },
-        "oneOf": {
-          "anyOf": [
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
+            "legend": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Legend"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
-            {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
+            "scale": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Scale"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
             },
-            {
-              "items": {
-                "type": "boolean"
-              },
-              "type": "array"
+            "sort": {
+              "$ref": "#/definitions/Sort",
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
-            {
-              "items": {
-                "$ref": "#/definitions/DateTime"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "A set of values that the `field`'s value should be a member of, for a data item included in the filtered data."
-        },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit for the field to be tested."
-        }
-      },
-      "required": [
-        "field",
-        "oneOf"
-      ],
-      "type": "object"
-    },
-    "FieldOrDatumDefWithCondition<DatumDef,(Gradient|string|null)>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
-      "properties": {
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
+            "timeUnit": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/TimeUnit"
+                },
+                {
+                  "$ref": "#/definitions/TimeUnitParams"
+                }
+              ],
+              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
             },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
-              },
-              "type": "array"
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "$ref": "#/definitions/StandardType",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
+          },
+          "required": [
+            "test"
           ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+          "type": "object"
         },
-        "datum": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PrimitiveValue"
+        {
+          "additionalProperties": false,
+          "properties": {
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
             },
-            {
-              "$ref": "#/definitions/DateTime"
+            "datum": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/PrimitiveValue"
+                },
+                {
+                  "$ref": "#/definitions/DateTime"
+                },
+                {
+                  "$ref": "#/definitions/ExprRef"
+                },
+                {
+                  "$ref": "#/definitions/RepeatRef"
+                }
+              ],
+              "description": "A constant value in data domain."
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "legend": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Legend"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
-            {
-              "$ref": "#/definitions/RepeatRef"
+            "scale": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Scale"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+            },
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
+            },
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "$ref": "#/definitions/Type",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
+          },
+          "required": [
+            "test"
           ],
-          "description": "A constant value in data domain."
-        },
-        "type": {
-          "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "type": "object"
         }
-      },
-      "type": "object"
+      ]
     },
-    "FieldOrDatumDefWithCondition<DatumDef,(string|null)>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
-      "properties": {
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
+    "ConditionalPredicate<MarkPropFieldOrDatumDef<TypeForShape>>": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "aggregate": {
+              "$ref": "#/definitions/Aggregate",
+              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "datum": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PrimitiveValue"
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
             },
-            {
-              "$ref": "#/definitions/DateTime"
+            "bin": {
+              "anyOf": [
+                {
+                  "type": "boolean"
+                },
+                {
+                  "$ref": "#/definitions/BinParams"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "field": {
+              "$ref": "#/definitions/Field",
+              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
             },
-            {
-              "$ref": "#/definitions/RepeatRef"
-            }
-          ],
-          "description": "A constant value in data domain."
-        },
-        "type": {
-          "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "FieldOrDatumDefWithCondition<DatumDef,number>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
-      "properties": {
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
+            "legend": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Legend"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "datum": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PrimitiveValue"
+            "scale": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Scale"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
             },
-            {
-              "$ref": "#/definitions/DateTime"
+            "sort": {
+              "$ref": "#/definitions/Sort",
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
             },
-            {
-              "$ref": "#/definitions/RepeatRef"
-            }
-          ],
-          "description": "A constant value in data domain."
-        },
-        "type": {
-          "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "FieldOrDatumDefWithCondition<DatumDef,number[]>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
-      "properties": {
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
+            "timeUnit": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/TimeUnit"
+                },
+                {
+                  "$ref": "#/definitions/TimeUnitParams"
+                }
+              ],
+              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
             },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
-              },
-              "type": "array"
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "$ref": "#/definitions/TypeForShape",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
+          },
+          "required": [
+            "test"
           ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+          "type": "object"
         },
-        "datum": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PrimitiveValue"
+        {
+          "additionalProperties": false,
+          "properties": {
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
             },
-            {
-              "$ref": "#/definitions/DateTime"
+            "datum": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/PrimitiveValue"
+                },
+                {
+                  "$ref": "#/definitions/DateTime"
+                },
+                {
+                  "$ref": "#/definitions/ExprRef"
+                },
+                {
+                  "$ref": "#/definitions/RepeatRef"
+                }
+              ],
+              "description": "A constant value in data domain."
             },
-            {
-              "$ref": "#/definitions/ExprRef"
+            "legend": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Legend"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
             },
-            {
-              "$ref": "#/definitions/RepeatRef"
+            "scale": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Scale"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+            },
+            "test": {
+              "$ref": "#/definitions/PredicateComposition",
+              "description": "Predicate for triggering the condition"
+            },
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "$ref": "#/definitions/Type",
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
+          },
+          "required": [
+            "test"
           ],
-          "description": "A constant value in data domain."
-        },
-        "type": {
-          "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "type": "object"
         }
-      },
-      "type": "object"
+      ]
     },
-    "FieldOrDatumDefWithCondition<MarkPropFieldDef,(Gradient|string|null)>": {
+    "ConditionalPredicate<StringFieldDef>": {
       "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
       "properties": {
         "aggregate": {
           "$ref": "#/definitions/Aggregate",
           "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -9807,54 +7206,37 @@
               "$ref": "#/definitions/BinParams"
             },
             {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
+              "const": "binned",
+              "type": "string"
             },
             {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
-              },
-              "type": "array"
+              "type": "null"
             }
           ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "field": {
           "$ref": "#/definitions/Field",
           "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
-        "legend": {
+        "format": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Legend"
+              "type": "string"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/Dict"
             }
           ],
-          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
-        "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+        "formatType": {
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "type": "string"
         },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
         "timeUnit": {
           "anyOf": [
@@ -9876,562 +7258,737 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
+      "required": [
+        "test"
+      ],
       "type": "object"
     },
-    "FieldOrDatumDefWithCondition<MarkPropFieldDef,number>": {
+    "ConditionalPredicate<ValueDef<(Gradient|string|null|ExprRef)>>": {
       "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
       "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
-        "bin": {
+        "value": {
           "anyOf": [
             {
-              "type": "boolean"
+              "$ref": "#/definitions/Gradient"
             },
             {
-              "$ref": "#/definitions/BinParams"
+              "type": "string"
             },
             {
               "type": "null"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+        }
+      },
+      "required": [
+        "test",
+        "value"
+      ],
+      "type": "object"
+    },
+    "ConditionalPredicate<ValueDef<(Text|ExprRef)>>": {
+      "additionalProperties": false,
+      "properties": {
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
-        "condition": {
+        "value": {
           "anyOf": [
             {
-              "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
+              "$ref": "#/definitions/Text"
             },
             {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
-              },
-              "type": "array"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+        }
+      },
+      "required": [
+        "test",
+        "value"
+      ],
+      "type": "object"
+    },
+    "ConditionalPredicate<ValueDef<(number[]|ExprRef)>>": {
+      "additionalProperties": false,
+      "properties": {
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
-        "legend": {
+        "value": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Legend"
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
+          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+        }
+      },
+      "required": [
+        "test",
+        "value"
+      ],
+      "type": "object"
+    },
+    "ConditionalPredicate<ValueDef<(number|ExprRef)>>": {
+      "additionalProperties": false,
+      "properties": {
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
-        "scale": {
+        "value": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Scale"
+              "type": "number"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
-        },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+        }
+      },
+      "required": [
+        "test",
+        "value"
+      ],
+      "type": "object"
+    },
+    "ConditionalPredicate<ValueDef<(string|ExprRef)>>": {
+      "additionalProperties": false,
+      "properties": {
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
-        "timeUnit": {
+        "value": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TimeUnit"
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/TimeUnitParams"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+        }
+      },
+      "required": [
+        "test",
+        "value"
+      ],
+      "type": "object"
+    },
+    "ConditionalPredicate<ValueDef<(string|null|ExprRef)>>": {
+      "additionalProperties": false,
+      "properties": {
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
-        "title": {
+        "value": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "type": "string"
             },
             {
               "type": "null"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-        },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
         }
       },
+      "required": [
+        "test",
+        "value"
+      ],
       "type": "object"
     },
-    "FieldOrDatumDefWithCondition<MarkPropFieldDef,number[]>": {
+    "ConditionalPredicate<ValueDef<number>>": {
       "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
       "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        "test": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "Predicate for triggering the condition"
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
+        "value": {
+          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
           "type": "number"
+        }
+      },
+      "required": [
+        "test",
+        "value"
+      ],
+      "type": "object"
+    },
+    "Config": {
+      "additionalProperties": false,
+      "properties": {
+        "arc": {
+          "$ref": "#/definitions/RectConfig",
+          "description": "Arc-specific Config"
         },
-        "bin": {
+        "area": {
+          "$ref": "#/definitions/AreaConfig",
+          "description": "Area-Specific Config"
+        },
+        "aria": {
+          "description": "A boolean flag indicating if ARIA default attributes should be included for marks and guides (SVG output only). If false, the `\"aria-hidden\"` attribute will be set for all guides, removing them from the ARIA accessibility tree and Vega-Lite will not generate default descriptions for marks.\n\n__Default value:__ `true`.",
+          "type": "boolean"
+        },
+        "autosize": {
           "anyOf": [
             {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
+              "$ref": "#/definitions/AutosizeType"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/AutoSizeParams"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "How the visualization size should be determined. If a string, should be one of `\"pad\"`, `\"fit\"` or `\"none\"`. Object values can additionally specify parameters for content sizing and automatic resizing.\n\n__Default value__: `pad`"
         },
-        "condition": {
+        "axis": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Axis configuration, which determines default properties for all `x` and `y` [axes](https://vega.github.io/vega-lite/docs/axis.html). For a full list of axis configuration options, please see the [corresponding section of the axis documentation](https://vega.github.io/vega-lite/docs/axis.html#config)."
+        },
+        "axisBand": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for axes with \"band\" scales."
+        },
+        "axisBottom": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for x-axis along the bottom edge of the chart."
+        },
+        "axisDiscrete": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for axes with \"point\" or \"band\" scales."
+        },
+        "axisLeft": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for y-axis along the left edge of the chart."
+        },
+        "axisPoint": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for axes with \"point\" scales."
+        },
+        "axisQuantitative": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for quantitative axes."
+        },
+        "axisRight": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for y-axis along the right edge of the chart."
+        },
+        "axisTemporal": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for temporal axes."
+        },
+        "axisTop": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for x-axis along the top edge of the chart."
+        },
+        "axisX": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "X-axis specific config."
+        },
+        "axisXBand": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for x-axes with \"band\" scales."
+        },
+        "axisXDiscrete": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for x-axes with \"point\" or \"band\" scales."
+        },
+        "axisXPoint": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for x-axes with \"point\" scales."
+        },
+        "axisXQuantitative": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for x-quantitative axes."
+        },
+        "axisXTemporal": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for x-temporal axes."
+        },
+        "axisY": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Y-axis specific config."
+        },
+        "axisYBand": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for y-axes with \"band\" scales."
+        },
+        "axisYDiscrete": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for y-axes with \"point\" or \"band\" scales."
+        },
+        "axisYPoint": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for y-axes with \"point\" scales."
+        },
+        "axisYQuantitative": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for y-quantitative axes."
+        },
+        "axisYTemporal": {
+          "$ref": "#/definitions/AxisConfig",
+          "description": "Config for y-temporal axes."
+        },
+        "background": {
           "anyOf": [
             {
-              "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
+              "$ref": "#/definitions/Color"
             },
             {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
-              },
-              "type": "array"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+          "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
+        },
+        "bar": {
+          "$ref": "#/definitions/BarConfig",
+          "description": "Bar-Specific Config"
+        },
+        "boxplot": {
+          "$ref": "#/definitions/BoxPlotConfig",
+          "description": "Box Config"
+        },
+        "circle": {
+          "$ref": "#/definitions/MarkConfig",
+          "description": "Circle-Specific Config"
+        },
+        "concat": {
+          "$ref": "#/definitions/CompositionConfig",
+          "description": "Default configuration for all concatenation and repeat view composition operators (`concat`, `hconcat`, `vconcat`, and `repeat`)"
+        },
+        "countTitle": {
+          "description": "Default axis and legend title for count fields.\n\n__Default value:__ `'Count of Records`.",
+          "type": "string"
+        },
+        "customFormatTypes": {
+          "description": "Allow the `formatType` property for text marks and guides to accept a custom formatter function [registered as a Vega expression](https://vega.github.io/vega-lite/usage/compile.html#format-type).",
+          "type": "boolean"
+        },
+        "errorband": {
+          "$ref": "#/definitions/ErrorBandConfig",
+          "description": "ErrorBand Config"
+        },
+        "errorbar": {
+          "$ref": "#/definitions/ErrorBarConfig",
+          "description": "ErrorBar Config"
+        },
+        "facet": {
+          "$ref": "#/definitions/CompositionConfig",
+          "description": "Default configuration for the `facet` view composition operator"
+        },
+        "fieldTitle": {
+          "description": "Defines how Vega-Lite generates title for fields. There are three possible styles:\n- `\"verbal\"` (Default) - displays function in a verbal style (e.g., \"Sum of field\", \"Year-month of date\", \"field (binned)\").\n- `\"function\"` - displays function using parentheses and capitalized texts (e.g., \"SUM(field)\", \"YEARMONTH(date)\", \"BIN(field)\").\n- `\"plain\"` - displays only the field name without functions (e.g., \"field\", \"date\", \"field\").",
+          "enum": [
+            "verbal",
+            "functional",
+            "plain"
+          ],
+          "type": "string"
+        },
+        "font": {
+          "description": "Default font for all text marks, titles, and labels.",
+          "type": "string"
+        },
+        "geoshape": {
+          "$ref": "#/definitions/MarkConfig",
+          "description": "Geoshape-Specific Config"
+        },
+        "header": {
+          "$ref": "#/definitions/HeaderConfig",
+          "description": "Header configuration, which determines default properties for all [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
+        },
+        "headerColumn": {
+          "$ref": "#/definitions/HeaderConfig",
+          "description": "Header configuration, which determines default properties for column [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
+        },
+        "headerFacet": {
+          "$ref": "#/definitions/HeaderConfig",
+          "description": "Header configuration, which determines default properties for non-row/column facet [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
+        },
+        "headerRow": {
+          "$ref": "#/definitions/HeaderConfig",
+          "description": "Header configuration, which determines default properties for row [headers](https://vega.github.io/vega-lite/docs/header.html).\n\nFor a full list of header configuration options, please see the [corresponding section of in the header documentation](https://vega.github.io/vega-lite/docs/header.html#config)."
         },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        "image": {
+          "$ref": "#/definitions/RectConfig",
+          "description": "Image-specific Config"
         },
         "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
+          "$ref": "#/definitions/LegendConfig",
+          "description": "Legend configuration, which determines default properties for all [legends](https://vega.github.io/vega-lite/docs/legend.html). For a full list of legend configuration options, please see the [corresponding section of in the legend documentation](https://vega.github.io/vega-lite/docs/legend.html#config)."
         },
-        "scale": {
+        "line": {
+          "$ref": "#/definitions/LineConfig",
+          "description": "Line-Specific Config"
+        },
+        "lineBreak": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Scale"
+              "type": "string"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+          "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property provides a global default for text marks, which is overridden by mark or style config settings, and by the lineBreak mark encoding channel. If signal-valued, either string or regular expression (regexp) values are valid."
         },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+        "locale": {
+          "$ref": "#/definitions/Locale",
+          "description": "Locale definitions for string parsing and formatting of number and date values. The locale object should contain `number` and/or `time` properties with [locale definitions](https://vega.github.io/vega/docs/api/locale/). Locale definitions provided in the config block may be overridden by the View constructor locale option."
         },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+        "mark": {
+          "$ref": "#/definitions/MarkConfig",
+          "description": "Mark Config"
         },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        "normalizedNumberFormat": {
+          "description": "If normalizedNumberFormatType is not specified, D3 number format for axis labels, text marks, and tooltips of normalized stacked fields (fields with `stack: \"normalize\"`). For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n\nIf `config.normalizedNumberFormatType` is specified and `config.customFormatTypes` is `true`, this value will be passed as `format` alongside `datum.value` to the `config.numberFormatType` function. __Default value:__ `%`",
+          "type": "string"
         },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-        }
-      },
-      "type": "object"
-    },
-    "FieldOrDatumDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
-      "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        "normalizedNumberFormatType": {
+          "description": "[Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type) for `config.normalizedNumberFormat`.\n\n__Default value:__ `undefined` -- This is equilvalent to call D3-format, which is exposed as [`format` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#format). __Note:__ You must also set `customFormatTypes` to `true` to use this feature.",
+          "type": "string"
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
+        "numberFormat": {
+          "description": "If numberFormatType is not specified, D3 number format for guide labels, text marks, and tooltips of non-normalized fields (fields *without* `stack: \"normalize\"`). For example `\"s\"` for SI units. Use [D3's number format pattern](https://github.com/d3/d3-format#locale_format).\n\nIf `config.numberFormatType` is specified and `config.customFormatTypes` is `true`, this value will be passed as `format` alongside `datum.value` to the `config.numberFormatType` function.",
+          "type": "string"
         },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+        "numberFormatType": {
+          "description": "[Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type) for `config.numberFormat`.\n\n__Default value:__ `undefined` -- This is equilvalent to call D3-format, which is exposed as [`format` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#format). __Note:__ You must also set `customFormatTypes` to `true` to use this feature.",
+          "type": "string"
         },
-        "condition": {
+        "padding": {
           "anyOf": [
             {
-              "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
+              "$ref": "#/definitions/Padding"
             },
             {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
-              },
-              "type": "array"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+          "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
         },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        "params": {
+          "description": "Dynamic variables or selections that parameterize a visualization.",
+          "items": {
+            "$ref": "#/definitions/TopLevelParameter"
+          },
+          "type": "array"
         },
-        "legend": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Legend"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
+        "point": {
+          "$ref": "#/definitions/MarkConfig",
+          "description": "Point-Specific Config"
+        },
+        "projection": {
+          "$ref": "#/definitions/ProjectionConfig",
+          "description": "Projection configuration, which determines default properties for all [projections](https://vega.github.io/vega-lite/docs/projection.html). For a full list of projection configuration options, please see the [corresponding section of the projection documentation](https://vega.github.io/vega-lite/docs/projection.html#config)."
+        },
+        "range": {
+          "$ref": "#/definitions/RangeConfig",
+          "description": "An object hash that defines default range arrays or schemes for using with scales. For a full list of scale range configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)."
+        },
+        "rect": {
+          "$ref": "#/definitions/RectConfig",
+          "description": "Rect-Specific Config"
+        },
+        "rule": {
+          "$ref": "#/definitions/MarkConfig",
+          "description": "Rule-Specific Config"
         },
         "scale": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Scale"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+          "$ref": "#/definitions/ScaleConfig",
+          "description": "Scale configuration determines default properties for all [scales](https://vega.github.io/vega-lite/docs/scale.html). For a full list of scale configuration options, please see the [corresponding section of the scale documentation](https://vega.github.io/vega-lite/docs/scale.html#config)."
         },
-        "sort": {
-          "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+        "selection": {
+          "$ref": "#/definitions/SelectionConfig",
+          "description": "An object hash for defining default properties for each type of selections."
         },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+        "square": {
+          "$ref": "#/definitions/MarkConfig",
+          "description": "Square-Specific Config"
+        },
+        "style": {
+          "$ref": "#/definitions/StyleConfigIndex",
+          "description": "An object hash that defines key-value mappings to determine default properties for marks with a given [style](https://vega.github.io/vega-lite/docs/mark.html#mark-def). The keys represent styles names; the values have to be valid [mark configuration objects](https://vega.github.io/vega-lite/docs/mark.html#config)."
+        },
+        "text": {
+          "$ref": "#/definitions/MarkConfig",
+          "description": "Text-Specific Config"
+        },
+        "tick": {
+          "$ref": "#/definitions/TickConfig",
+          "description": "Tick-Specific Config"
+        },
+        "timeFormat": {
+          "description": "Default time format for raw time values (without time units) in text marks, legend labels and header labels.\n\n__Default value:__ `\"%b %d, %Y\"` __Note:__ Axes automatically determine the format for each label automatically so this config does not affect axes.",
+          "type": "string"
+        },
+        "timeFormatType": {
+          "description": "[Custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type) for `config.timeFormat`.\n\n__Default value:__ `undefined` -- This is equilvalent to call D3-time-format, which is exposed as [`timeFormat` in Vega-Expression](https://vega.github.io/vega/docs/expressions/#timeFormat). __Note:__ You must also set `customFormatTypes` to `true` and there must *not* be a `timeUnit` defined to use this feature.",
+          "type": "string"
         },
         "title": {
+          "$ref": "#/definitions/TitleConfig",
+          "description": "Title configuration, which determines default properties for all [titles](https://vega.github.io/vega-lite/docs/title.html). For a full list of title configuration options, please see the [corresponding section of the title documentation](https://vega.github.io/vega-lite/docs/title.html#config)."
+        },
+        "trail": {
+          "$ref": "#/definitions/LineConfig",
+          "description": "Trail-Specific Config"
+        },
+        "view": {
+          "$ref": "#/definitions/ViewConfig",
+          "description": "Default properties for [single view plots](https://vega.github.io/vega-lite/docs/spec.html#single)."
+        }
+      },
+      "type": "object"
+    },
+    "CsvDataFormat": {
+      "additionalProperties": false,
+      "properties": {
+        "parse": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "$ref": "#/definitions/Parse"
             },
             {
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
+        },
+        "type": {
+          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL. If no extension is detected, `\"json\"` will be used by default.",
+          "enum": [
+            "csv",
+            "tsv"
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Cursor": {
+      "enum": [
+        "auto",
+        "default",
+        "none",
+        "context-menu",
+        "help",
+        "pointer",
+        "progress",
+        "wait",
+        "cell",
+        "crosshair",
+        "text",
+        "vertical-text",
+        "alias",
+        "copy",
+        "move",
+        "no-drop",
+        "not-allowed",
+        "e-resize",
+        "n-resize",
+        "ne-resize",
+        "nw-resize",
+        "s-resize",
+        "se-resize",
+        "sw-resize",
+        "w-resize",
+        "ew-resize",
+        "ns-resize",
+        "nesw-resize",
+        "nwse-resize",
+        "col-resize",
+        "row-resize",
+        "all-scroll",
+        "zoom-in",
+        "zoom-out",
+        "grab",
+        "grabbing"
+      ],
+      "type": "string"
+    },
+    "Cyclical": {
+      "enum": [
+        "rainbow",
+        "sinebow"
+      ],
+      "type": "string"
+    },
+    "Data": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/DataSource"
         },
-        "type": {
-          "$ref": "#/definitions/TypeForShape",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        {
+          "$ref": "#/definitions/Generator"
         }
-      },
-      "type": "object"
+      ]
     },
-    "FieldOrDatumDefWithCondition<StringDatumDef,Text>": {
-      "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
-      "properties": {
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+    "DataFormat": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/CsvDataFormat"
         },
-        "datum": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/PrimitiveValue"
-            },
-            {
-              "$ref": "#/definitions/DateTime"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            },
-            {
-              "$ref": "#/definitions/RepeatRef"
-            }
-          ],
-          "description": "A constant value in data domain."
+        {
+          "$ref": "#/definitions/DsvDataFormat"
         },
-        "format": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Dict<unknown>"
-            }
-          ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+        {
+          "$ref": "#/definitions/JsonDataFormat"
         },
-        "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-          "type": "string"
+        {
+          "$ref": "#/definitions/TopoDataFormat"
+        }
+      ]
+    },
+    "DataSource": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/UrlData"
         },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
-          "type": "string"
+        {
+          "$ref": "#/definitions/InlineData"
         },
-        "type": {
-          "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        {
+          "$ref": "#/definitions/NamedData"
         }
-      },
-      "type": "object"
+      ]
     },
-    "FieldOrDatumDefWithCondition<StringFieldDef,Text>": {
+    "Datasets": {
+      "$ref": "#/definitions/Dict<InlineDataset>"
+    },
+    "DateTime": {
       "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
+      "description": "Object for defining datetime in Vega-Lite Filter. If both month and quarter are provided, month has higher precedence. `day` cannot be combined with other date. We accept string for month and day names.",
       "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
+        "date": {
+          "description": "Integer value representing the date (day of the month) from 1-31.",
+          "maximum": 31,
+          "minimum": 1,
           "type": "number"
         },
-        "bin": {
+        "day": {
           "anyOf": [
             {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
+              "$ref": "#/definitions/Day"
             },
             {
-              "const": "binned",
               "type": "string"
-            },
-            {
-              "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "Value representing the day of a week. This can be one of: (1) integer value -- `1` represents Monday; (2) case-insensitive day name (e.g., `\"Monday\"`); (3) case-insensitive, 3-character short day name (e.g., `\"Mon\"`).\n\n**Warning:** A DateTime definition object with `day`** should not be combined with `year`, `quarter`, `month`, or `date`."
         },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+        "hours": {
+          "description": "Integer value representing the hour of a day from 0-23.",
+          "maximum": 24,
+          "minimum": 0,
+          "type": "number"
         },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        "milliseconds": {
+          "description": "Integer value representing the millisecond segment of time.",
+          "maximum": 1000,
+          "minimum": 0,
+          "type": "number"
         },
-        "format": {
+        "minutes": {
+          "description": "Integer value representing the minute segment of time from 0-59.",
+          "maximum": 60,
+          "minimum": 0,
+          "type": "number"
+        },
+        "month": {
           "anyOf": [
             {
-              "type": "string"
+              "$ref": "#/definitions/Month"
             },
             {
-              "$ref": "#/definitions/Dict<unknown>"
+              "type": "string"
             }
           ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
-        },
-        "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-          "type": "string"
+          "description": "One of: (1) integer value representing the month from `1`-`12`. `1` represents January; (2) case-insensitive month name (e.g., `\"January\"`); (3) case-insensitive, 3-character short month name (e.g., `\"Jan\"`)."
         },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
-          "type": "string"
+        "quarter": {
+          "description": "Integer value representing the quarter of the year (from 1-4).",
+          "maximum": 4,
+          "minimum": 1,
+          "type": "number"
         },
-        "timeUnit": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TimeUnit"
-            },
-            {
-              "$ref": "#/definitions/TimeUnitParams"
-            }
-          ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+        "seconds": {
+          "description": "Integer value representing the second segment (0-59) of a time value",
+          "maximum": 60,
+          "minimum": 0,
+          "type": "number"
         },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        "utc": {
+          "description": "A boolean flag indicating if date time is in utc time. If false, the date time is in local time",
+          "type": "boolean"
         },
-        "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        "year": {
+          "description": "Integer value representing the year.",
+          "type": "number"
         }
       },
       "type": "object"
     },
-    "FieldOrDatumDefWithCondition<StringFieldDef,string>": {
+    "DatumDef": {
       "additionalProperties": false,
-      "description": "A FieldDef with Condition<ValueDef> {    condition: {value: ...},    field: ...,    ... }",
       "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
-        },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
         },
-        "bin": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/BinParams"
-            },
-            {
-              "const": "binned",
-              "type": "string"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
-        },
-        "condition": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
-              },
-              "type": "array"
-            }
-          ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
-        },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
-        },
-        "format": {
+        "datum": {
           "anyOf": [
             {
-              "type": "string"
+              "$ref": "#/definitions/PrimitiveValue"
             },
             {
-              "$ref": "#/definitions/Dict<unknown>"
-            }
-          ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
-        },
-        "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-          "type": "string"
-        },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
-          "type": "string"
-        },
-        "timeUnit": {
-          "anyOf": [
+              "$ref": "#/definitions/DateTime"
+            },
             {
-              "$ref": "#/definitions/TimeUnit"
+              "$ref": "#/definitions/ExprRef"
             },
             {
-              "$ref": "#/definitions/TimeUnitParams"
+              "$ref": "#/definitions/RepeatRef"
             }
           ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+          "description": "A constant value in data domain."
         },
         "title": {
           "anyOf": [
@@ -10442,324 +7999,751 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
-          "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "$ref": "#/definitions/Type",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
     },
-    "FieldRangePredicate": {
+    "Day": {
+      "maximum": 7,
+      "minimum": 1,
+      "type": "number"
+    },
+    "DensityTransform": {
       "additionalProperties": false,
       "properties": {
-        "field": {
+        "as": {
+          "description": "The output fields for the sample value and corresponding density estimate.\n\n__Default value:__ `[\"value\", \"density\"]`",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "maxItems": 2,
+          "minItems": 2,
+          "type": "array"
+        },
+        "bandwidth": {
+          "description": "The bandwidth (standard deviation) of the Gaussian kernel. If unspecified or set to zero, the bandwidth value is automatically estimated from the input data using Scott’s rule.",
+          "type": "number"
+        },
+        "counts": {
+          "description": "A boolean flag indicating if the output values should be probability estimates (false) or smoothed counts (true).\n\n__Default value:__ `false`",
+          "type": "boolean"
+        },
+        "cumulative": {
+          "description": "A boolean flag indicating whether to produce density estimates (false) or cumulative density estimates (true).\n\n__Default value:__ `false`",
+          "type": "boolean"
+        },
+        "density": {
           "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
+          "description": "The data field for which to perform density estimation."
         },
-        "range": {
+        "extent": {
+          "description": "A [min, max] domain from which to sample the distribution. If unspecified, the extent will be determined by the observed minimum and maximum values of the density value field.",
+          "items": {
+            "type": "number"
+          },
+          "maxItems": 2,
+          "minItems": 2,
+          "type": "array"
+        },
+        "groupby": {
+          "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
+        },
+        "maxsteps": {
+          "description": "The maximum number of samples to take along the extent domain for plotting the density.\n\n__Default value:__ `200`",
+          "type": "number"
+        },
+        "minsteps": {
+          "description": "The minimum number of samples to take along the extent domain for plotting the density.\n\n__Default value:__ `25`",
+          "type": "number"
+        },
+        "steps": {
+          "description": "The exact number of samples to take along the extent domain for plotting the density. If specified, overrides both minsteps and maxsteps to set an exact number of uniform samples. Potentially useful in conjunction with a fixed extent to ensure consistent sample points for stacked densities.",
+          "type": "number"
+        }
+      },
+      "required": [
+        "density"
+      ],
+      "type": "object"
+    },
+    "DerivedStream": {
+      "additionalProperties": false,
+      "properties": {
+        "between": {
+          "items": {
+            "$ref": "#/definitions/Stream"
+          },
+          "type": "array"
+        },
+        "consume": {
+          "type": "boolean"
+        },
+        "debounce": {
+          "type": "number"
+        },
+        "filter": {
           "anyOf": [
+            {
+              "$ref": "#/definitions/Expr"
+            },
             {
               "items": {
-                "anyOf": [
-                  {
-                    "type": "number"
-                  },
-                  {
-                    "$ref": "#/definitions/DateTime"
-                  },
-                  {
-                    "type": "null"
-                  },
-                  {
-                    "$ref": "#/definitions/ExprRef"
-                  }
-                ]
+                "$ref": "#/definitions/Expr"
+              },
+              "type": "array"
+            }
+          ]
+        },
+        "markname": {
+          "type": "string"
+        },
+        "marktype": {
+          "$ref": "#/definitions/MarkType"
+        },
+        "stream": {
+          "$ref": "#/definitions/Stream"
+        },
+        "throttle": {
+          "type": "number"
+        }
+      },
+      "required": [
+        "stream"
+      ],
+      "type": "object"
+    },
+    "Dict<InlineDataset>": {
+      "additionalProperties": {
+        "$ref": "#/definitions/InlineDataset"
+      },
+      "type": "object"
+    },
+    "Dict<SelectionInit>": {
+      "additionalProperties": {
+        "$ref": "#/definitions/SelectionInit"
+      },
+      "type": "object"
+    },
+    "Dict<SelectionInitInterval>": {
+      "additionalProperties": {
+        "$ref": "#/definitions/SelectionInitInterval"
+      },
+      "type": "object"
+    },
+    "Dict": {
+      "additionalProperties": {},
+      "type": "object"
+    },
+    "Diverging": {
+      "enum": [
+        "blueorange",
+        "blueorange-3",
+        "blueorange-4",
+        "blueorange-5",
+        "blueorange-6",
+        "blueorange-7",
+        "blueorange-8",
+        "blueorange-9",
+        "blueorange-10",
+        "blueorange-11",
+        "brownbluegreen",
+        "brownbluegreen-3",
+        "brownbluegreen-4",
+        "brownbluegreen-5",
+        "brownbluegreen-6",
+        "brownbluegreen-7",
+        "brownbluegreen-8",
+        "brownbluegreen-9",
+        "brownbluegreen-10",
+        "brownbluegreen-11",
+        "purplegreen",
+        "purplegreen-3",
+        "purplegreen-4",
+        "purplegreen-5",
+        "purplegreen-6",
+        "purplegreen-7",
+        "purplegreen-8",
+        "purplegreen-9",
+        "purplegreen-10",
+        "purplegreen-11",
+        "pinkyellowgreen",
+        "pinkyellowgreen-3",
+        "pinkyellowgreen-4",
+        "pinkyellowgreen-5",
+        "pinkyellowgreen-6",
+        "pinkyellowgreen-7",
+        "pinkyellowgreen-8",
+        "pinkyellowgreen-9",
+        "pinkyellowgreen-10",
+        "pinkyellowgreen-11",
+        "purpleorange",
+        "purpleorange-3",
+        "purpleorange-4",
+        "purpleorange-5",
+        "purpleorange-6",
+        "purpleorange-7",
+        "purpleorange-8",
+        "purpleorange-9",
+        "purpleorange-10",
+        "purpleorange-11",
+        "redblue",
+        "redblue-3",
+        "redblue-4",
+        "redblue-5",
+        "redblue-6",
+        "redblue-7",
+        "redblue-8",
+        "redblue-9",
+        "redblue-10",
+        "redblue-11",
+        "redgrey",
+        "redgrey-3",
+        "redgrey-4",
+        "redgrey-5",
+        "redgrey-6",
+        "redgrey-7",
+        "redgrey-8",
+        "redgrey-9",
+        "redgrey-10",
+        "redgrey-11",
+        "redyellowblue",
+        "redyellowblue-3",
+        "redyellowblue-4",
+        "redyellowblue-5",
+        "redyellowblue-6",
+        "redyellowblue-7",
+        "redyellowblue-8",
+        "redyellowblue-9",
+        "redyellowblue-10",
+        "redyellowblue-11",
+        "redyellowgreen",
+        "redyellowgreen-3",
+        "redyellowgreen-4",
+        "redyellowgreen-5",
+        "redyellowgreen-6",
+        "redyellowgreen-7",
+        "redyellowgreen-8",
+        "redyellowgreen-9",
+        "redyellowgreen-10",
+        "redyellowgreen-11",
+        "spectral",
+        "spectral-3",
+        "spectral-4",
+        "spectral-5",
+        "spectral-6",
+        "spectral-7",
+        "spectral-8",
+        "spectral-9",
+        "spectral-10",
+        "spectral-11"
+      ],
+      "type": "string"
+    },
+    "DomainUnionWith": {
+      "additionalProperties": false,
+      "properties": {
+        "unionWith": {
+          "anyOf": [
+            {
+              "items": {
+                "type": "number"
               },
               "type": "array"
             },
             {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "An array of inclusive minimum and maximum values for a field value of a data item to be included in the filtered data.",
-          "maxItems": 2,
-          "minItems": 2
-        },
-        "timeUnit": {
-          "anyOf": [
+              "items": {
+                "type": "string"
+              },
+              "type": "array"
+            },
             {
-              "$ref": "#/definitions/TimeUnit"
+              "items": {
+                "type": "boolean"
+              },
+              "type": "array"
             },
             {
-              "$ref": "#/definitions/TimeUnitParams"
+              "items": {
+                "$ref": "#/definitions/DateTime"
+              },
+              "type": "array"
             }
           ],
-          "description": "Time unit for the field to be tested."
+          "description": "Customized domain values to be union with the field's values or explicitly defined domain. Should be an array of valid scale domain values."
         }
       },
       "required": [
-        "field",
-        "range"
+        "unionWith"
       ],
       "type": "object"
     },
-    "FieldValidPredicate": {
+    "DsvDataFormat": {
       "additionalProperties": false,
       "properties": {
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Field to be tested."
+        "delimiter": {
+          "description": "The delimiter between records. The delimiter must be a single character (i.e., a single 16-bit code unit); so, ASCII delimiters are fine, but emoji delimiters are not.",
+          "maxLength": 1,
+          "minLength": 1,
+          "type": "string"
         },
-        "timeUnit": {
+        "parse": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TimeUnit"
+              "$ref": "#/definitions/Parse"
             },
             {
-              "$ref": "#/definitions/TimeUnitParams"
+              "type": "null"
             }
           ],
-          "description": "Time unit for the field to be tested."
+          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
         },
-        "valid": {
-          "description": "If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).",
-          "type": "boolean"
+        "type": {
+          "const": "dsv",
+          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL. If no extension is detected, `\"json\"` will be used by default.",
+          "type": "string"
         }
       },
       "required": [
-        "field",
-        "valid"
+        "delimiter"
       ],
       "type": "object"
     },
-    "FilterTransform": {
+    "Element": {
+      "type": "string"
+    },
+    "EncodingSortField": {
       "additionalProperties": false,
+      "description": "A sort definition for sorting a discrete scale in an encoding field definition.",
       "properties": {
-        "filter": {
-          "$ref": "#/definitions/PredicateComposition",
-          "description": "The `filter` property must be a predication definition, which can take one of the following forms:\n\n1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string, where `datum` can be used to refer to the current data object. For example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n\n2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate):  [`equal`](https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate), [`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate), [`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate), [`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate), [`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate), [`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate), [`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate), or [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n\n4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3)."
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "The data [field](https://vega.github.io/vega-lite/docs/field.html) to sort by.\n\n__Default value:__ If unspecified, defaults to the field specified in the outer data reference."
+        },
+        "op": {
+          "$ref": "#/definitions/NonArgAggregateOp",
+          "description": "An [aggregate operation](https://vega.github.io/vega-lite/docs/aggregate.html#ops) to perform on the field prior to sorting (e.g., `\"count\"`, `\"mean\"` and `\"median\"`). An aggregation is required when there are multiple values of the sort field for each encoded data field. The input data objects will be aggregated, grouped by the encoded data field.\n\nFor a full list of operations, please see the documentation for [aggregate](https://vega.github.io/vega-lite/docs/aggregate.html#ops).\n\n__Default value:__ `\"sum\"` for stacked plots. Otherwise, `\"min\"`."
+        },
+        "order": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/SortOrder"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "The sort order. One of `\"ascending\"` (default), `\"descending\"`, or `null` (no not sort)."
         }
       },
-      "required": [
-        "filter"
-      ],
       "type": "object"
     },
-    "Fit": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/GeoJsonFeature"
-        },
-        {
-          "$ref": "#/definitions/GeoJsonFeatureCollection"
-        },
-        {
-          "items": {
-            "$ref": "#/definitions/GeoJsonFeature"
-          },
-          "type": "array"
-        }
-      ]
+    "ErrorBand": {
+      "const": "errorband",
+      "type": "string"
     },
-    "FlattenTransform": {
+    "ErrorBandConfig": {
       "additionalProperties": false,
       "properties": {
-        "as": {
-          "description": "The output field names for extracted array values.\n\n__Default value:__ The field name of the corresponding array field",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
+        "band": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/AnyMarkConfig"
+            }
+          ]
         },
-        "flatten": {
-          "description": "An array of one or more data fields containing arrays to flatten. If multiple fields are specified, their array values should have a parallel structure, ideally with the same length. If the lengths of parallel arrays do not match, the longest array will be used with `null` values added for missing entries.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
+        "borders": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/AnyMarkConfig"
+            }
+          ]
+        },
+        "extent": {
+          "$ref": "#/definitions/ErrorBarExtent",
+          "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
+        },
+        "interpolate": {
+          "$ref": "#/definitions/Interpolate",
+          "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+        },
+        "tension": {
+          "description": "The tension parameter for the interpolation type of the error band.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         }
       },
-      "required": [
-        "flatten"
-      ],
       "type": "object"
     },
-    "FoldTransform": {
+    "ErrorBandDef": {
       "additionalProperties": false,
       "properties": {
-        "as": {
-          "description": "The output field names for the key and value properties produced by the fold transform. __Default value:__ `[\"key\", \"value\"]`",
-          "items": [
+        "band": {
+          "anyOf": [
             {
-              "$ref": "#/definitions/FieldName"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/FieldName"
+              "$ref": "#/definitions/AnyMarkConfig"
+            }
+          ]
+        },
+        "borders": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/AnyMarkConfig"
+            }
+          ]
+        },
+        "clip": {
+          "description": "Whether a composite mark be clipped to the enclosing group’s width and height.",
+          "type": "boolean"
+        },
+        "color": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Color"
+            },
+            {
+              "$ref": "#/definitions/Gradient"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
-        "fold": {
-          "description": "An array of data fields indicating the properties to fold.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "fold"
-      ],
-      "type": "object"
-    },
-    "FontStyle": {
-      "type": "string"
-    },
-    "FontWeight": {
-      "enum": [
-        "normal",
-        "bold",
-        "lighter",
-        "bolder",
-        100,
-        200,
-        300,
-        400,
-        500,
-        600,
-        700,
-        800,
-        900
-      ],
-      "type": [
-        "string",
-        "number"
-      ]
-    },
-    "Generator": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SequenceGenerator"
+        "extent": {
+          "$ref": "#/definitions/ErrorBarExtent",
+          "description": "The extent of the band. Available options include:\n- `\"ci\"`: Extend the band to the confidence interval of the mean.\n- `\"stderr\"`: The size of band are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of band are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the band to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
         },
-        {
-          "$ref": "#/definitions/SphereGenerator"
+        "interpolate": {
+          "$ref": "#/definitions/Interpolate",
+          "description": "The line interpolation method for the error band. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes at the midpoint of each pair of adjacent x-values.\n- `\"step-before\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes before the x-value.\n- `\"step-after\"`: a piecewise constant function (a step function) consisting of alternating horizontal and vertical lines. The y-value changes after the x-value.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+        },
+        "opacity": {
+          "description": "The opacity (value between [0,1]) of the mark.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "orient": {
+          "$ref": "#/definitions/Orientation",
+          "description": "Orientation of the error band. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined."
+        },
+        "tension": {
+          "description": "The tension parameter for the interpolation type of the error band.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         },
-        {
-          "$ref": "#/definitions/GraticuleGenerator"
+        "type": {
+          "$ref": "#/definitions/ErrorBand",
+          "description": "The mark type. This could a primitive mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`) or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
         }
-      ]
+      },
+      "required": [
+        "type"
+      ],
+      "type": "object"
+    },
+    "ErrorBar": {
+      "const": "errorbar",
+      "type": "string"
     },
-    "NormalizedConcatSpec<GenericSpec>": {
+    "ErrorBarConfig": {
       "additionalProperties": false,
-      "description": "Base interface for a generalized concatenation specification.",
       "properties": {
-        "align": {
+        "extent": {
+          "$ref": "#/definitions/ErrorBarExtent",
+          "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
+        },
+        "rule": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LayoutAlign"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
-          ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+          ]
         },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
+        "size": {
+          "description": "Size of the ticks of an error bar",
+          "type": "number"
         },
-        "center": {
+        "thickness": {
+          "description": "Thickness of the ticks and the bar of an error bar",
+          "type": "number"
+        },
+        "ticks": {
           "anyOf": [
             {
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/RowCol<boolean>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
-          ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
-        },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
-        },
-        "concat": {
-          "description": "A list of views to be concatenated.",
-          "items": {
-            "$ref": "#/definitions/NormalizedSpec"
-          },
-          "type": "array"
+          ]
+        }
+      },
+      "type": "object"
+    },
+    "ErrorBarDef": {
+      "additionalProperties": false,
+      "properties": {
+        "clip": {
+          "description": "Whether a composite mark be clipped to the enclosing group’s width and height.",
+          "type": "boolean"
         },
-        "data": {
+        "color": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Data"
+              "$ref": "#/definitions/Color"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/Gradient"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
+        "extent": {
+          "$ref": "#/definitions/ErrorBarExtent",
+          "description": "The extent of the rule. Available options include:\n- `\"ci\"`: Extend the rule to the confidence interval of the mean.\n- `\"stderr\"`: The size of rule are set to the value of standard error, extending from the mean.\n- `\"stdev\"`: The size of rule are set to the value of standard deviation, extending from the mean.\n- `\"iqr\"`: Extend the rule to the q1 and q3.\n\n__Default value:__ `\"stderr\"`."
         },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
+        "opacity": {
+          "description": "The opacity (value between [0,1]) of the mark.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
+        "orient": {
+          "$ref": "#/definitions/Orientation",
+          "description": "Orientation of the error bar. This is normally automatically determined, but can be specified when the orientation is ambiguous and cannot be automatically determined."
         },
-        "spacing": {
+        "rule": {
           "anyOf": [
             {
-              "type": "number"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/RowCol<number>"
+              "$ref": "#/definitions/AnyMarkConfig"
             }
-          ],
-          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
+          ]
         },
-        "title": {
+        "size": {
+          "description": "Size of the ticks of an error bar",
+          "type": "number"
+        },
+        "thickness": {
+          "description": "Thickness of the ticks and the bar of an error bar",
+          "type": "number"
+        },
+        "ticks": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "$ref": "#/definitions/AnyMarkConfig"
+            }
+          ]
+        },
+        "type": {
+          "$ref": "#/definitions/ErrorBar",
+          "description": "The mark type. This could a primitive mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"geoshape\"`, `\"rule\"`, and `\"text\"`) or a composite mark type (`\"boxplot\"`, `\"errorband\"`, `\"errorbar\"`)."
+        }
+      },
+      "required": [
+        "type"
+      ],
+      "type": "object"
+    },
+    "ErrorBarExtent": {
+      "enum": [
+        "ci",
+        "iqr",
+        "stderr",
+        "stdev"
+      ],
+      "type": "string"
+    },
+    "EventStream": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "between": {
+              "items": {
+                "$ref": "#/definitions/Stream"
+              },
+              "type": "array"
+            },
+            "consume": {
+              "type": "boolean"
+            },
+            "debounce": {
+              "type": "number"
+            },
+            "filter": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Expr"
+                },
+                {
+                  "items": {
+                    "$ref": "#/definitions/Expr"
+                  },
+                  "type": "array"
+                }
+              ]
+            },
+            "markname": {
+              "type": "string"
+            },
+            "marktype": {
+              "$ref": "#/definitions/MarkType"
+            },
+            "source": {
+              "enum": [
+                "view",
+                "scope"
+              ],
+              "type": "string"
+            },
+            "throttle": {
+              "type": "number"
+            },
+            "type": {
+              "$ref": "#/definitions/EventType"
             }
+          },
+          "required": [
+            "type"
           ],
-          "description": "Title for the plot."
+          "type": "object"
         },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
+        {
+          "additionalProperties": false,
+          "properties": {
+            "between": {
+              "items": {
+                "$ref": "#/definitions/Stream"
+              },
+              "type": "array"
+            },
+            "consume": {
+              "type": "boolean"
+            },
+            "debounce": {
+              "type": "number"
+            },
+            "filter": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Expr"
+                },
+                {
+                  "items": {
+                    "$ref": "#/definitions/Expr"
+                  },
+                  "type": "array"
+                }
+              ]
+            },
+            "markname": {
+              "type": "string"
+            },
+            "marktype": {
+              "$ref": "#/definitions/MarkType"
+            },
+            "source": {
+              "const": "window",
+              "type": "string"
+            },
+            "throttle": {
+              "type": "number"
+            },
+            "type": {
+              "$ref": "#/definitions/WindowEventType"
+            }
           },
-          "type": "array"
+          "required": [
+            "source",
+            "type"
+          ],
+          "type": "object"
+        }
+      ]
+    },
+    "EventType": {
+      "enum": [
+        "click",
+        "dblclick",
+        "dragenter",
+        "dragleave",
+        "dragover",
+        "keydown",
+        "keypress",
+        "keyup",
+        "mousedown",
+        "mousemove",
+        "mouseout",
+        "mouseover",
+        "mouseup",
+        "mousewheel",
+        "timer",
+        "touchend",
+        "touchmove",
+        "touchstart",
+        "wheel"
+      ],
+      "type": "string"
+    },
+    "Expr": {
+      "type": "string"
+    },
+    "ExprRef": {
+      "additionalProperties": false,
+      "properties": {
+        "expr": {
+          "description": "Vega expression (which can refer to Vega-Lite parameters).",
+          "type": "string"
         }
       },
       "required": [
-        "concat"
+        "expr"
       ],
       "type": "object"
     },
-    "ConcatSpec<GenericSpec>": {
+    "FacetEncodingFieldDef": {
       "additionalProperties": false,
-      "description": "Base interface for a generalized concatenation specification.",
       "properties": {
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        },
         "align": {
           "anyOf": [
             {
@@ -10769,10 +8753,30 @@
               "$ref": "#/definitions/RowCol<LayoutAlign>"
             }
           ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+        },
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "bin": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/BinParams"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -10791,38 +8795,40 @@
           "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
         },
         "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
           "type": "number"
         },
-        "concat": {
-          "description": "A list of views to be concatenated.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
-        "data": {
+        "header": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Data"
+              "$ref": "#/definitions/Header"
             },
             {
               "type": "null"
             }
           ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
+          "description": "An object defining properties of a facet's header."
         },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
+        "sort": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/SortArray"
+            },
+            {
+              "$ref": "#/definitions/SortOrder"
+            },
+            {
+              "$ref": "#/definitions/EncodingSortField"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
         },
         "spacing": {
           "anyOf": [
@@ -10835,123 +8841,104 @@
           ],
           "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
         },
+        "timeUnit": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/TimeUnit"
+            },
+            {
+              "$ref": "#/definitions/TimeUnitParams"
+            }
+          ],
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+        },
         "title": {
           "anyOf": [
             {
               "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "type": "null"
             }
           ],
-          "description": "Title for the plot."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
+        "type": {
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
-      "required": [
-        "concat"
-      ],
       "type": "object"
     },
-    "NormalizedFacetSpec": {
+    "FacetFieldDef": {
       "additionalProperties": false,
-      "description": "Base interface for a facet specification.",
       "properties": {
-        "align": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LayoutAlign"
-            },
-            {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
-            }
-          ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         },
-        "center": {
+        "bin": {
           "anyOf": [
             {
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/RowCol<boolean>"
+              "$ref": "#/definitions/BinParams"
+            },
+            {
+              "type": "null"
             }
           ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
-        "data": {
+        "header": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Data"
+              "$ref": "#/definitions/Header"
             },
             {
               "type": "null"
             }
           ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
+          "description": "An object defining properties of a facet's header."
         },
-        "facet": {
+        "sort": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FacetFieldDef"
+              "$ref": "#/definitions/SortArray"
             },
             {
-              "$ref": "#/definitions/FacetMapping"
-            }
-          ],
-          "description": "Definition for how to facet the data. One of: 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def) 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "anyOf": [
+              "$ref": "#/definitions/SortOrder"
+            },
             {
-              "type": "number"
+              "$ref": "#/definitions/EncodingSortField"
             },
             {
-              "$ref": "#/definitions/RowCol<number>"
+              "type": "null"
             }
           ],
-          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
         },
-        "spec": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LayerSpec"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/FacetedUnitSpec"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "A specification of the view that gets faceted."
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
         },
         "title": {
           "anyOf": [
@@ -10959,224 +8946,303 @@
               "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "type": "null"
             }
           ],
-          "description": "Title for the plot."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
+        "type": {
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
-      "required": [
-        "facet",
-        "spec"
-      ],
       "type": "object"
     },
-    "FacetSpec": {
+    "FacetMapping": {
       "additionalProperties": false,
-      "description": "Base interface for a facet specification.",
       "properties": {
-        "align": {
+        "column": {
+          "$ref": "#/definitions/FacetFieldDef",
+          "description": "A field definition for the horizontal facet of trellis plots."
+        },
+        "row": {
+          "$ref": "#/definitions/FacetFieldDef",
+          "description": "A field definition for the vertical facet of trellis plots."
+        }
+      },
+      "type": "object"
+    },
+    "FacetedEncoding": {
+      "additionalProperties": false,
+      "properties": {
+        "angle": {
+          "$ref": "#/definitions/NumericMarkPropDef",
+          "description": "Rotation angle of point and text marks."
+        },
+        "color": {
+          "$ref": "#/definitions/ColorDef",
+          "description": "Color of the marks – either fill or stroke color based on  the `filled` property of mark definition. By default, `color` represents fill color for `\"area\"`, `\"bar\"`, `\"tick\"`, `\"text\"`, `\"trail\"`, `\"circle\"`, and `\"square\"` / stroke color for `\"line\"` and `\"point\"`.\n\n__Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n\n_Note:_ 1) For fine-grained control over both fill and stroke colors of the marks, please use the `fill` and `stroke` channels. The `fill` or `stroke` encodings have higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified. 2) See the scale documentation for more information about customizing [color scheme](https://vega.github.io/vega-lite/docs/scale.html#scheme)."
+        },
+        "column": {
+          "$ref": "#/definitions/RowColumnEncodingFieldDef",
+          "description": "A field definition for the horizontal facet of trellis plots."
+        },
+        "description": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LayoutAlign"
+              "$ref": "#/definitions/StringFieldDefWithCondition"
             },
             {
-              "$ref": "#/definitions/RowCol<LayoutAlign>"
+              "$ref": "#/definitions/StringValueDefWithCondition"
             }
           ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
-        },
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
+          "description": "A text description of this mark for ARIA accessibility (SVG output only). For SVG output the `\"aria-label\"` attribute will be set to this description."
         },
-        "center": {
+        "detail": {
           "anyOf": [
             {
-              "type": "boolean"
+              "$ref": "#/definitions/FieldDefWithoutScale"
             },
             {
-              "$ref": "#/definitions/RowCol<boolean>"
+              "items": {
+                "$ref": "#/definitions/FieldDefWithoutScale"
+              },
+              "type": "array"
             }
           ],
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
+          "description": "Additional levels of detail for grouping data in aggregate views and in line, trail, and area marks without mapping data to a specific visual channel."
         },
-        "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
-          "type": "number"
+        "facet": {
+          "$ref": "#/definitions/FacetEncodingFieldDef",
+          "description": "A field definition for the (flexible) facet of trellis plots.\n\nIf either `row` or `column` is specified, this channel will be ignored."
         },
-        "data": {
+        "fill": {
+          "$ref": "#/definitions/ColorDef",
+          "description": "Fill color of the marks. __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n\n_Note:_ The `fill` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified."
+        },
+        "fillOpacity": {
+          "$ref": "#/definitions/NumericMarkPropDef",
+          "description": "Fill opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `fillOpacity` property."
+        },
+        "href": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Data"
+              "$ref": "#/definitions/StringFieldDefWithCondition"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/StringValueDefWithCondition"
             }
           ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
+          "description": "A URL to load upon mouse click."
         },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
+        "key": {
+          "$ref": "#/definitions/FieldDefWithoutScale",
+          "description": "A data field to use as a unique key for data binding. When a visualization’s data is updated, the key value will be used to match data elements to existing mark instances. Use a key channel to enable object constancy for transitions over dynamic data."
         },
-        "facet": {
+        "latitude": {
+          "$ref": "#/definitions/LatLongDef",
+          "description": "Latitude position of geographically projected marks."
+        },
+        "latitude2": {
+          "$ref": "#/definitions/Position2Def",
+          "description": "Latitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
+        },
+        "longitude": {
+          "$ref": "#/definitions/LatLongDef",
+          "description": "Longitude position of geographically projected marks."
+        },
+        "longitude2": {
+          "$ref": "#/definitions/Position2Def",
+          "description": "Longitude-2 position for geographically projected ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`."
+        },
+        "opacity": {
+          "$ref": "#/definitions/NumericMarkPropDef",
+          "description": "Opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `opacity` property."
+        },
+        "order": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FacetFieldDef<FieldName>"
+              "$ref": "#/definitions/OrderFieldDef"
+            },
+            {
+              "items": {
+                "$ref": "#/definitions/OrderFieldDef"
+              },
+              "type": "array"
             },
             {
-              "$ref": "#/definitions/FacetMapping<FieldName>"
+              "$ref": "#/definitions/OrderValueDef"
             }
           ],
-          "description": "Definition for how to facet the data. One of: 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def) 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)"
+          "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
         },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
+        "radius": {
+          "$ref": "#/definitions/PolarDef",
+          "description": "The outer radius in pixels of arc marks."
         },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
+        "radius2": {
+          "$ref": "#/definitions/Position2Def",
+          "description": "The inner radius in pixels of arc marks."
         },
-        "spacing": {
+        "row": {
+          "$ref": "#/definitions/RowColumnEncodingFieldDef",
+          "description": "A field definition for the vertical facet of trellis plots."
+        },
+        "shape": {
+          "$ref": "#/definitions/ShapeDef",
+          "description": "Shape of the mark.\n\n1. For `point` marks the supported values include:   - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.   - the line symbol `\"stroke\"`   - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`   - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n2. For `geoshape` marks it should be a field definition of the geojson data\n\n__Default value:__ If undefined, the default shape depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#point-config)'s `shape` property. (`\"circle\"` if unset.)"
+        },
+        "size": {
+          "$ref": "#/definitions/NumericMarkPropDef",
+          "description": "Size of the mark.\n- For `\"point\"`, `\"square\"` and `\"circle\"`, – the symbol size, or pixel area of the mark.\n- For `\"bar\"` and `\"tick\"` – the bar and tick's size.\n- For `\"text\"` – the text's font size.\n- Size is unsupported for `\"line\"`, `\"area\"`, and `\"rect\"`. (Use `\"trail\"` instead of line with varying size)"
+        },
+        "stroke": {
+          "$ref": "#/definitions/ColorDef",
+          "description": "Stroke color of the marks. __Default value:__ If undefined, the default color depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `color` property.\n\n_Note:_ The `stroke` encoding has higher precedence than `color`, thus may override the `color` encoding if conflicting encodings are specified."
+        },
+        "strokeDash": {
+          "$ref": "#/definitions/NumericArrayMarkPropDef",
+          "description": "Stroke dash of the marks.\n\n__Default value:__ `[1,0]` (No dash)."
+        },
+        "strokeOpacity": {
+          "$ref": "#/definitions/NumericMarkPropDef",
+          "description": "Stroke opacity of the marks.\n\n__Default value:__ If undefined, the default opacity depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeOpacity` property."
+        },
+        "strokeWidth": {
+          "$ref": "#/definitions/NumericMarkPropDef",
+          "description": "Stroke width of the marks.\n\n__Default value:__ If undefined, the default stroke width depends on [mark config](https://vega.github.io/vega-lite/docs/config.html#mark-config)'s `strokeWidth` property."
+        },
+        "text": {
+          "$ref": "#/definitions/TextDef",
+          "description": "Text of the `text` mark."
+        },
+        "theta": {
+          "$ref": "#/definitions/PolarDef",
+          "description": "- For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n\n- For text marks, polar coordinate angle in radians."
+        },
+        "theta2": {
+          "$ref": "#/definitions/Position2Def",
+          "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
+        },
+        "tooltip": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/StringFieldDefWithCondition"
             },
             {
-              "$ref": "#/definitions/RowCol<number>"
+              "$ref": "#/definitions/StringValueDefWithCondition"
+            },
+            {
+              "items": {
+                "$ref": "#/definitions/StringFieldDef"
+              },
+              "type": "array"
+            },
+            {
+              "type": "null"
             }
           ],
-          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
+          "description": "The tooltip text to show upon mouse hover. Specifying `tooltip` encoding overrides [the `tooltip` property in the mark definition](https://vega.github.io/vega-lite/docs/mark.html#mark-def).\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip in Vega-Lite."
         },
-        "spec": {
+        "url": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LayerSpec"
+              "$ref": "#/definitions/StringFieldDefWithCondition"
             },
             {
-              "$ref": "#/definitions/FacetedUnitSpec"
+              "$ref": "#/definitions/StringValueDefWithCondition"
             }
           ],
-          "description": "A specification of the view that gets faceted."
+          "description": "The URL of an image mark."
         },
-        "title": {
+        "x": {
+          "$ref": "#/definitions/PositionDef",
+          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+        },
+        "x2": {
+          "$ref": "#/definitions/Position2Def",
+          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+        },
+        "xError": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "$ref": "#/definitions/SecondaryFieldDef"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "$ref": "#/definitions/ValueDef<number>"
             }
           ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "facet",
-        "spec"
-      ],
-      "type": "object"
-    },
-    "NormalizedHConcatSpec<GenericSpec>": {
-      "additionalProperties": false,
-      "description": "Base interface for a horizontal concatenation specification.",
-      "properties": {
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
+          "description": "Error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
         },
-        "data": {
+        "xError2": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Data"
+              "$ref": "#/definitions/SecondaryFieldDef"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ValueDef<number>"
             }
           ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
+          "description": "Secondary error value of x coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
         },
-        "hconcat": {
-          "description": "A list of views to be concatenated and put into a row.",
-          "items": {
-            "$ref": "#/definitions/NormalizedSpec"
-          },
-          "type": "array"
+        "xOffset": {
+          "$ref": "#/definitions/OffsetDef",
+          "description": "Offset of x-position of the marks"
         },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
+        "y": {
+          "$ref": "#/definitions/PositionDef",
+          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
         },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
+        "y2": {
+          "$ref": "#/definitions/Position2Def",
+          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
         },
-        "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
+        "yError": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/SecondaryFieldDef"
+            },
+            {
+              "$ref": "#/definitions/ValueDef<number>"
+            }
+          ],
+          "description": "Error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
         },
-        "title": {
+        "yError2": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "$ref": "#/definitions/SecondaryFieldDef"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "$ref": "#/definitions/ValueDef<number>"
             }
           ],
-          "description": "Title for the plot."
+          "description": "Secondary error value of y coordinates for error specified `\"errorbar\"` and `\"errorband\"`."
         },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
+        "yOffset": {
+          "$ref": "#/definitions/OffsetDef",
+          "description": "Offset of y-position of the marks"
         }
       },
-      "required": [
-        "hconcat"
-      ],
       "type": "object"
     },
-    "HConcatSpec<GenericSpec>": {
+    "FacetedUnitSpec": {
       "additionalProperties": false,
-      "description": "Base interface for a horizontal concatenation specification.",
+      "description": "Unit spec that can have a composite mark and row or column channels (shorthand for a facet spec).",
       "properties": {
+        "align": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/LayoutAlign"
+            },
+            {
+              "$ref": "#/definitions/RowCol<LayoutAlign>"
+            }
+          ],
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+        },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -11184,8 +9250,15 @@
           "type": "string"
         },
         "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/RowCol<boolean>"
+            }
+          ],
+          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
         },
         "data": {
           "anyOf": [
@@ -11202,24 +9275,58 @@
           "description": "Description of this mark for commenting purpose.",
           "type": "string"
         },
-        "hconcat": {
-          "description": "A list of views to be concatenated and put into a row.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
+        "encoding": {
+          "$ref": "#/definitions/FacetedEncoding",
+          "description": "A key-value mapping between encoding channels and definition of fields."
+        },
+        "height": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "const": "container",
+              "type": "string"
+            },
+            {
+              "$ref": "#/definitions/Step"
+            }
+          ],
+          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+        },
+        "mark": {
+          "$ref": "#/definitions/AnyMark",
+          "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)."
         },
         "name": {
           "description": "Name of the visualization for later reference.",
           "type": "string"
         },
+        "params": {
+          "description": "An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.",
+          "items": {
+            "$ref": "#/definitions/SelectionParameter"
+          },
+          "type": "array"
+        },
+        "projection": {
+          "$ref": "#/definitions/Projection",
+          "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks and to `latitude` and `\"longitude\"` channels for other marks."
+        },
         "resolve": {
           "$ref": "#/definitions/Resolve",
           "description": "Scale, axis, and legend resolutions for view composition specifications."
         },
         "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/RowCol<number>"
+            }
+          ],
+          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
         },
         "title": {
           "anyOf": [
@@ -11238,1442 +9345,1603 @@
             "$ref": "#/definitions/Transform"
           },
           "type": "array"
+        },
+        "view": {
+          "$ref": "#/definitions/ViewBackground",
+          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
+        },
+        "width": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "const": "container",
+              "type": "string"
+            },
+            {
+              "$ref": "#/definitions/Step"
+            }
+          ],
+          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         }
       },
       "required": [
-        "hconcat"
+        "mark"
       ],
       "type": "object"
     },
-    "NormalizedSpec": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/FacetedUnitSpec"
-        },
-        {
-          "$ref": "#/definitions/LayerSpec"
-        },
-        {
-          "$ref": "#/definitions/RepeatSpec"
+    "Feature": {
+      "additionalProperties": false,
+      "description": "A feature object which contains a geometry and associated properties. https://tools.ietf.org/html/rfc7946#section-3.2",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
         },
-        {
-          "$ref": "#/definitions/NormalizedFacetSpec"
+        "geometry": {
+          "$ref": "#/definitions/Geometry",
+          "description": "The feature's geometry"
         },
-        {
-          "$ref": "#/definitions/NormalizedConcatSpec<GenericSpec>"
+        "id": {
+          "description": "A value that uniquely identifies this feature in a https://tools.ietf.org/html/rfc7946#section-3.2.",
+          "type": [
+            "string",
+            "number"
+          ]
         },
-        {
-          "$ref": "#/definitions/NormalizedVConcatSpec<GenericSpec>"
+        "properties": {
+          "$ref": "#/definitions/GeoJsonProperties",
+          "description": "Properties associated with this feature."
         },
-        {
-          "$ref": "#/definitions/NormalizedHConcatSpec<GenericSpec>"
+        "type": {
+          "const": "Feature",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
         }
+      },
+      "required": [
+        "geometry",
+        "properties",
+        "type"
       ],
-      "description": "Any specification in Vega-Lite."
+      "type": "object"
     },
-    "Spec": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/FacetedUnitSpec"
+    "Feature<Geometry,GeoJsonProperties>": {
+      "additionalProperties": false,
+      "description": "A feature object which contains a geometry and associated properties. https://tools.ietf.org/html/rfc7946#section-3.2",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
         },
-        {
-          "$ref": "#/definitions/LayerSpec"
+        "geometry": {
+          "$ref": "#/definitions/Geometry",
+          "description": "The feature's geometry"
         },
-        {
-          "$ref": "#/definitions/RepeatSpec"
+        "id": {
+          "description": "A value that uniquely identifies this feature in a https://tools.ietf.org/html/rfc7946#section-3.2.",
+          "type": [
+            "string",
+            "number"
+          ]
         },
-        {
-          "$ref": "#/definitions/FacetSpec"
+        "properties": {
+          "$ref": "#/definitions/GeoJsonProperties",
+          "description": "Properties associated with this feature."
         },
-        {
-          "$ref": "#/definitions/ConcatSpec<GenericSpec>"
+        "type": {
+          "const": "Feature",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "geometry",
+        "properties",
+        "type"
+      ],
+      "type": "object"
+    },
+    "FeatureCollection": {
+      "additionalProperties": false,
+      "description": "A collection of feature objects.  https://tools.ietf.org/html/rfc7946#section-3.3",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
+        },
+        "features": {
+          "items": {
+            "$ref": "#/definitions/Feature<Geometry,GeoJsonProperties>"
+          },
+          "type": "array"
         },
+        "type": {
+          "const": "FeatureCollection",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "features",
+        "type"
+      ],
+      "type": "object"
+    },
+    "Field": {
+      "anyOf": [
         {
-          "$ref": "#/definitions/VConcatSpec<GenericSpec>"
+          "$ref": "#/definitions/FieldName"
         },
         {
-          "$ref": "#/definitions/HConcatSpec<GenericSpec>"
+          "$ref": "#/definitions/RepeatRef"
         }
-      ],
-      "description": "Any specification in Vega-Lite."
+      ]
+    },
+    "FieldDefWithoutScale": {
+      "$ref": "#/definitions/TypedFieldDef",
+      "description": "Field Def without scale (and without bin: \"binned\" support)."
     },
-    "NormalizedVConcatSpec<GenericSpec>": {
+    "FieldEqualPredicate": {
       "additionalProperties": false,
-      "description": "Base interface for a vertical concatenation specification.",
       "properties": {
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
+        "equal": {
+          "anyOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "number"
+            },
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
           ],
-          "type": "string"
+          "description": "The value that the field should be equal to."
         },
-        "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "data": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Data"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
+          "description": "Time unit for the field to be tested."
+        }
+      },
+      "required": [
+        "equal",
+        "field"
+      ],
+      "type": "object"
+    },
+    "FieldGTEPredicate": {
+      "additionalProperties": false,
+      "properties": {
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
+        "gte": {
+          "anyOf": [
+            {
+              "type": "string"
+            },
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "The value that the field should be greater than or equals to."
         },
-        "title": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "vconcat": {
-          "description": "A list of views to be concatenated and put into a column.",
-          "items": {
-            "$ref": "#/definitions/NormalizedSpec"
-          },
-          "type": "array"
+          "description": "Time unit for the field to be tested."
         }
       },
       "required": [
-        "vconcat"
+        "field",
+        "gte"
       ],
       "type": "object"
     },
-    "VConcatSpec<GenericSpec>": {
+    "FieldGTPredicate": {
       "additionalProperties": false,
-      "description": "Base interface for a vertical concatenation specification.",
       "properties": {
-        "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
-          "enum": [
-            "full",
-            "flush"
-          ],
-          "type": "string"
-        },
-        "center": {
-          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
-          "type": "boolean"
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "data": {
+        "gt": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Data"
+              "type": "string"
             },
             {
-              "type": "null"
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
-        "resolve": {
-          "$ref": "#/definitions/Resolve",
-          "description": "Scale, axis, and legend resolutions for view composition specifications."
-        },
-        "spacing": {
-          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
-          "type": "number"
+          "description": "The value that the field should be greater than."
         },
-        "title": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
-          "items": {
-            "$ref": "#/definitions/Transform"
-          },
-          "type": "array"
-        },
-        "vconcat": {
-          "description": "A list of views to be concatenated and put into a column.",
-          "items": {
-            "$ref": "#/definitions/Spec"
-          },
-          "type": "array"
+          "description": "Time unit for the field to be tested."
         }
       },
       "required": [
-        "vconcat"
+        "field",
+        "gt"
       ],
       "type": "object"
     },
-    "GeoJsonFeature": {
-    },
-    "GeoJsonFeatureCollection": {
-    },
-    "Gradient": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/LinearGradient"
-        },
-        {
-          "$ref": "#/definitions/RadialGradient"
-        }
-      ]
-    },
-    "GradientStop": {
+    "FieldLTEPredicate": {
       "additionalProperties": false,
       "properties": {
-        "color": {
-          "$ref": "#/definitions/Color",
-          "description": "The color value at this point in the gradient."
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "offset": {
-          "description": "The offset fraction for the color stop, indicating its position within the gradient.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "offset",
-        "color"
-      ],
-      "type": "object"
-    },
-    "GraticuleGenerator": {
-      "additionalProperties": false,
-      "properties": {
-        "graticule": {
+        "lte": {
           "anyOf": [
             {
-              "const": true,
-              "type": "boolean"
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/GraticuleParams"
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Generate graticule GeoJSON data for geographic reference lines."
+          "description": "The value that the field should be less than or equals to."
         },
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
+        "timeUnit": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/TimeUnit"
+            },
+            {
+              "$ref": "#/definitions/TimeUnitParams"
+            }
+          ],
+          "description": "Time unit for the field to be tested."
         }
       },
       "required": [
-        "graticule"
+        "field",
+        "lte"
       ],
       "type": "object"
     },
-    "GraticuleParams": {
+    "FieldLTPredicate": {
       "additionalProperties": false,
       "properties": {
-        "extent": {
-          "$ref": "#/definitions/Vector2<Vector2<number>>",
-          "description": "Sets both the major and minor extents to the same values."
-        },
-        "extentMajor": {
-          "$ref": "#/definitions/Vector2<Vector2<number>>",
-          "description": "The major extent of the graticule as a two-element array of coordinates."
-        },
-        "extentMinor": {
-          "$ref": "#/definitions/Vector2<Vector2<number>>",
-          "description": "The minor extent of the graticule as a two-element array of coordinates."
-        },
-        "precision": {
-          "description": "The precision of the graticule in degrees.\n\n__Default value:__ `2.5`",
-          "type": "number"
-        },
-        "step": {
-          "$ref": "#/definitions/Vector2<number>",
-          "description": "Sets both the major and minor step angles to the same values."
-        },
-        "stepMajor": {
-          "$ref": "#/definitions/Vector2<number>",
-          "description": "The major step angles of the graticule.\n\n\n__Default value:__ `[90, 360]`"
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "stepMinor": {
-          "$ref": "#/definitions/Vector2<number>",
-          "description": "The minor step angles of the graticule.\n\n__Default value:__ `[10, 10]`"
-        }
-      },
-      "type": "object"
-    },
-    "Header": {
-      "additionalProperties": false,
-      "description": "Headers of row / column channels for faceted plots.",
-      "properties": {
-        "format": {
+        "lt": {
           "anyOf": [
             {
               "type": "string"
             },
             {
-              "$ref": "#/definitions/Dict<unknown>"
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
-        },
-        "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-          "type": "string"
+          "description": "The value that the field should be less than."
         },
-        "labelAlign": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Align"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`."
-        },
-        "labelAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label."
-        },
-        "labelAngle": {
-          "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
+          "description": "Time unit for the field to be tested."
+        }
+      },
+      "required": [
+        "field",
+        "lt"
+      ],
+      "type": "object"
+    },
+    "FieldName": {
+      "type": "string"
+    },
+    "FieldOneOfPredicate": {
+      "additionalProperties": false,
+      "properties": {
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "labelBaseline": {
+        "oneOf": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextBaseline"
+              "items": {
+                "type": "string"
+              },
+              "type": "array"
+            },
+            {
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
+            },
+            {
+              "items": {
+                "type": "boolean"
+              },
+              "type": "array"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/DateTime"
+              },
+              "type": "array"
             }
           ],
-          "description": "The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone."
+          "description": "A set of values that the `field`'s value should be a member of, for a data item included in the filtered data."
         },
-        "labelColor": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "The color of the header label, can be in hex color code or regular color name."
-        },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.",
-          "type": "string"
+          "description": "Time unit for the field to be tested."
+        }
+      },
+      "required": [
+        "field",
+        "oneOf"
+      ],
+      "type": "object"
+    },
+    "FieldOrDatumDefWithCondition<DatumDef,(Gradient|string|null)>": {
+      "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
+      "properties": {
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         },
-        "labelFont": {
+        "condition": {
           "anyOf": [
             {
-              "type": "string"
+              "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "The font of the header label."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "labelFontSize": {
+        "datum": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/PrimitiveValue"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
             },
             {
               "$ref": "#/definitions/ExprRef"
+            },
+            {
+              "$ref": "#/definitions/RepeatRef"
             }
           ],
-          "description": "The font size of the header label, in pixels.",
-          "minimum": 0
+          "description": "A constant value in data domain."
         },
-        "labelFontStyle": {
+        "title": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontStyle"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The font style of the header label."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "labelFontWeight": {
+        "type": {
+          "$ref": "#/definitions/Type",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "FieldOrDatumDefWithCondition<DatumDef,(string|null)>": {
+      "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
+      "properties": {
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "condition": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight"
+              "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "The font weight of the header label."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "labelLimit": {
+        "datum": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/PrimitiveValue"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
             },
             {
               "$ref": "#/definitions/ExprRef"
+            },
+            {
+              "$ref": "#/definitions/RepeatRef"
             }
           ],
-          "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
+          "description": "A constant value in data domain."
         },
-        "labelLineHeight": {
+        "title": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "labelOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
+        "type": {
+          "$ref": "#/definitions/Type",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "FieldOrDatumDefWithCondition<DatumDef,number>": {
+      "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
+      "properties": {
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         },
-        "labelPadding": {
+        "condition": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`"
-        },
-        "labels": {
-          "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.",
-          "type": "boolean"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orient",
-          "description": "Shortcut for setting both labelOrient and titleOrient."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "title": {
+        "datum": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "$ref": "#/definitions/PrimitiveValue"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/DateTime"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            },
+            {
+              "$ref": "#/definitions/RepeatRef"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A constant value in data domain."
         },
-        "titleAlign": {
+        "title": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Align"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Horizontal text alignment (to the anchor) of header titles."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "titleAngle": {
-          "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.",
-          "maximum": 360,
-          "minimum": -360,
+        "type": {
+          "$ref": "#/definitions/Type",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "FieldOrDatumDefWithCondition<DatumDef,number[]>": {
+      "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
+      "properties": {
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
           "type": "number"
         },
-        "titleBaseline": {
+        "condition": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextBaseline"
+              "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n\n__Default value:__ `\"middle\"`"
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "titleColor": {
+        "datum": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
+              "$ref": "#/definitions/PrimitiveValue"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
             },
             {
               "$ref": "#/definitions/ExprRef"
+            },
+            {
+              "$ref": "#/definitions/RepeatRef"
             }
           ],
-          "description": "Color of the header title, can be in hex color code or regular color name."
+          "description": "A constant value in data domain."
         },
-        "titleFont": {
+        "title": {
           "anyOf": [
             {
-              "type": "string"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`)."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "titleFontSize": {
+        "type": {
+          "$ref": "#/definitions/Type",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "FieldOrDatumDefWithCondition<MarkPropFieldDef,(Gradient|string|null)>": {
+      "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
+      "properties": {
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        },
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "bin": {
           "anyOf": [
             {
-              "type": "number"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/BinParams"
+            },
+            {
+              "type": "null"
             }
           ],
-          "description": "Font size of the header title.",
-          "minimum": 0
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
-        "titleFontStyle": {
+        "condition": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontStyle"
+              "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(Gradient|string|null|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "The font style of the header title."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "titleFontWeight": {
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        },
+        "legend": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight"
+              "$ref": "#/definitions/Legend"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Font weight of the header title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
+          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
         },
-        "titleLimit": {
+        "scale": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Scale"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
+          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
         },
-        "titleLineHeight": {
+        "sort": {
+          "$ref": "#/definitions/Sort",
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+        },
+        "timeUnit": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
-        },
-        "titleOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
         },
-        "titlePadding": {
+        "title": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`"
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        },
+        "type": {
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
     },
-    "HeaderConfig": {
+    "FieldOrDatumDefWithCondition<MarkPropFieldDef,number>": {
       "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
       "properties": {
-        "format": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Dict<unknown>"
-            }
-          ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-          "type": "string"
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         },
-        "labelAlign": {
+        "bin": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Align"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`."
-        },
-        "labelAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label."
-        },
-        "labelAngle": {
-          "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
-        },
-        "labelBaseline": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TextBaseline"
+              "$ref": "#/definitions/BinParams"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
-        "labelColor": {
+        "condition": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
+              "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(number|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "The color of the header label, can be in hex color code or regular color name."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.",
-          "type": "string"
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
-        "labelFont": {
+        "legend": {
           "anyOf": [
             {
-              "type": "string"
+              "$ref": "#/definitions/Legend"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The font of the header label."
+          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
         },
-        "labelFontSize": {
+        "scale": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Scale"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The font size of the header label, in pixels.",
-          "minimum": 0
+          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
         },
-        "labelFontStyle": {
+        "sort": {
+          "$ref": "#/definitions/Sort",
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+        },
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontStyle"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "The font style of the header label."
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
         },
-        "labelFontWeight": {
+        "title": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The font weight of the header label."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "labelLimit": {
+        "type": {
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "FieldOrDatumDefWithCondition<MarkPropFieldDef,number[]>": {
+      "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
+      "properties": {
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        },
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "bin": {
           "anyOf": [
             {
-              "type": "number"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/BinParams"
+            },
+            {
+              "type": "null"
             }
           ],
-          "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
-        "labelLineHeight": {
+        "condition": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(number[]|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "labelOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
-        "labelPadding": {
+        "legend": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Legend"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`"
-        },
-        "labels": {
-          "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.",
-          "type": "boolean"
-        },
-        "orient": {
-          "$ref": "#/definitions/Orient",
-          "description": "Shortcut for setting both labelOrient and titleOrient."
-        },
-        "title": {
-          "description": "Set to null to disable title for the axis, legend, or header.",
-          "type": "null"
+          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
         },
-        "titleAlign": {
+        "scale": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Align"
+              "$ref": "#/definitions/Scale"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Horizontal text alignment (to the anchor) of header titles."
-        },
-        "titleAnchor": {
-          "$ref": "#/definitions/TitleAnchor",
-          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
+          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
         },
-        "titleAngle": {
-          "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.",
-          "maximum": 360,
-          "minimum": -360,
-          "type": "number"
+        "sort": {
+          "$ref": "#/definitions/Sort",
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
         },
-        "titleBaseline": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextBaseline"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n\n__Default value:__ `\"middle\"`"
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
         },
-        "titleColor": {
+        "title": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Color of the header title, can be in hex color code or regular color name."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        },
+        "type": {
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "FieldOrDatumDefWithCondition<MarkPropFieldDef<TypeForShape>,(string|null)>": {
+      "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
+      "properties": {
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        },
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
         },
-        "titleFont": {
+        "bin": {
           "anyOf": [
             {
-              "type": "string"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`)."
-        },
-        "titleFontSize": {
-          "anyOf": [
-            {
-              "type": "number"
+              "$ref": "#/definitions/BinParams"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Font size of the header title.",
-          "minimum": 0
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
-        "titleFontStyle": {
+        "condition": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontStyle"
+              "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(string|null|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "description": "The font style of the header title."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "titleFontWeight": {
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        },
+        "legend": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight"
+              "$ref": "#/definitions/Legend"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "Font weight of the header title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
+          "description": "An object defining properties of the legend. If `null`, the legend for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [legend properties](https://vega.github.io/vega-lite/docs/legend.html) are applied.\n\n__See also:__ [`legend`](https://vega.github.io/vega-lite/docs/legend.html) documentation."
         },
-        "titleLimit": {
+        "scale": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Scale"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
+          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
         },
-        "titleLineHeight": {
+        "sort": {
+          "$ref": "#/definitions/Sort",
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+        },
+        "timeUnit": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
-        },
-        "titleOrient": {
-          "$ref": "#/definitions/Orient",
-          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
         },
-        "titlePadding": {
+        "title": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
           ],
-          "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`"
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        },
+        "type": {
+          "$ref": "#/definitions/TypeForShape",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
     },
-    "HexColor": {
-      "format": "color-hex",
-      "type": "string"
-    },
-    "ImputeMethod": {
-      "enum": [
-        "value",
-        "median",
-        "max",
-        "min",
-        "mean"
-      ],
-      "type": "string"
-    },
-    "ImputeParams": {
+    "FieldOrDatumDefWithCondition<StringDatumDef,Text>": {
       "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
       "properties": {
-        "frame": {
-          "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__:  `[null, null]` indicating that the window includes all objects.",
-          "items": [
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "condition": {
+          "anyOf": [
             {
-              "type": [
-                "null",
-                "number"
-              ]
+              "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
             },
             {
-              "type": [
-                "null",
-                "number"
-              ]
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
+              },
+              "type": "array"
             }
           ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "keyvals": {
+        "datum": {
           "anyOf": [
             {
-              "items": {
-              },
-              "type": "array"
+              "$ref": "#/definitions/PrimitiveValue"
             },
             {
-              "$ref": "#/definitions/ImputeSequence"
-            }
-          ],
-          "description": "Defines the key values that should be considered for imputation. An array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified."
-        },
-        "method": {
-          "$ref": "#/definitions/ImputeMethod",
-          "description": "The imputation method to use for the field value of imputed data objects. One of `\"value\"`, `\"mean\"`, `\"median\"`, `\"max\"` or `\"min\"`.\n\n__Default value:__  `\"value\"`"
-        },
-        "value": {
-          "description": "The field value to use when the imputation `method` is `\"value\"`."
-        }
-      },
-      "type": "object"
-    },
-    "ImputeSequence": {
-      "additionalProperties": false,
-      "properties": {
-        "start": {
-          "description": "The starting value of the sequence. __Default value:__ `0`",
-          "type": "number"
-        },
-        "step": {
-          "description": "The step value between sequence entries. __Default value:__ `1` or `-1` if `stop < start`",
-          "type": "number"
-        },
-        "stop": {
-          "description": "The ending value(exclusive) of the sequence.",
-          "type": "number"
-        }
-      },
-      "required": [
-        "stop"
-      ],
-      "type": "object"
-    },
-    "ImputeTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "frame": {
-          "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__:  `[null, null]` indicating that the window includes all objects.",
-          "items": [
+              "$ref": "#/definitions/DateTime"
+            },
             {
-              "type": [
-                "null",
-                "number"
-              ]
+              "$ref": "#/definitions/ExprRef"
             },
             {
-              "type": [
-                "null",
-                "number"
-              ]
+              "$ref": "#/definitions/RepeatRef"
             }
           ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        "groupby": {
-          "description": "An optional array of fields by which to group the values. Imputation will then be performed on a per-group basis.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "impute": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field for which the missing values should be imputed."
-        },
-        "key": {
-          "$ref": "#/definitions/FieldName",
-          "description": "A key field that uniquely identifies data objects within a group. Missing key values (those occurring in the data but not in the current group) will be imputed."
+          "description": "A constant value in data domain."
         },
-        "keyvals": {
+        "format": {
           "anyOf": [
             {
-              "items": {
-              },
-              "type": "array"
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ImputeSequence"
+              "$ref": "#/definitions/Dict"
             }
           ],
-          "description": "Defines the key values that should be considered for imputation. An array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified."
-        },
-        "method": {
-          "$ref": "#/definitions/ImputeMethod",
-          "description": "The imputation method to use for the field value of imputed data objects. One of `\"value\"`, `\"mean\"`, `\"median\"`, `\"max\"` or `\"min\"`.\n\n__Default value:__  `\"value\"`"
-        },
-        "value": {
-          "description": "The field value to use when the imputation `method` is `\"value\"`."
-        }
-      },
-      "required": [
-        "impute",
-        "key"
-      ],
-      "type": "object"
-    },
-    "InlineData": {
-      "additionalProperties": false,
-      "properties": {
-        "format": {
-          "$ref": "#/definitions/DataFormat",
-          "description": "An object that specifies the format for parsing the data."
-        },
-        "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
-          "type": "string"
-        },
-        "values": {
-          "$ref": "#/definitions/InlineDataset",
-          "description": "The full data set, included inline. This can be an array of objects or primitive values, an object, or a string. Arrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type."
-        }
-      },
-      "required": [
-        "values"
-      ],
-      "type": "object"
-    },
-    "InlineDataset": {
-      "anyOf": [
-        {
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "boolean"
-          },
-          "type": "array"
-        },
-        {
-          "items": {
-            "type": "object"
-          },
-          "type": "array"
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
-        {
+        "formatType": {
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
           "type": "string"
         },
-        {
-          "type": "object"
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        },
+        "type": {
+          "$ref": "#/definitions/Type",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
-      ]
+      },
+      "type": "object"
     },
-    "InputBinding": {
+    "FieldOrDatumDefWithCondition<StringFieldDef,Text>": {
       "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
       "properties": {
-        "autocomplete": {
-          "type": "string"
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "debounce": {
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
           "type": "number"
         },
-        "element": {
-          "$ref": "#/definitions/Element"
+        "bin": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/BinParams"
+            },
+            {
+              "const": "binned",
+              "type": "string"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
-        "input": {
-          "type": "string"
+        "condition": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
+            },
+            {
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(Text|ExprRef)>"
+              },
+              "type": "array"
+            }
+          ],
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "name": {
-          "type": "string"
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
-        "placeholder": {
+        "format": {
+          "anyOf": [
+            {
+              "type": "string"
+            },
+            {
+              "$ref": "#/definitions/Dict"
+            }
+          ],
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+        },
+        "formatType": {
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
           "type": "string"
         },
+        "timeUnit": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/TimeUnit"
+            },
+            {
+              "$ref": "#/definitions/TimeUnitParams"
+            }
+          ],
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+        },
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        },
         "type": {
-          "type": "string"
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
     },
-    "Interpolate": {
-      "enum": [
-        "basis",
-        "basis-open",
-        "basis-closed",
-        "bundle",
-        "cardinal",
-        "cardinal-open",
-        "cardinal-closed",
-        "catmull-rom",
-        "linear",
-        "linear-closed",
-        "monotone",
-        "natural",
-        "step",
-        "step-before",
-        "step-after"
-      ],
-      "maximum": 900,
-      "minimum": 100,
-      "type": "string"
-    },
-    "IntervalSelection": {
+    "FieldOrDatumDefWithCondition<StringFieldDef,string>": {
       "additionalProperties": false,
+      "description": "A FieldDef with Condition<ValueDef> {   condition: {value: ...},   field: ...,   ... }",
       "properties": {
-        "bind": {
-          "const": "scales",
-          "description": "Establishes a two-way binding between the interval selection and the scales used within the same view. This allows a user to interactively pan and zoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.",
-          "type": "string"
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "clear": {
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "bin": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Stream"
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/BinParams"
             },
             {
+              "const": "binned",
               "type": "string"
             },
             {
-              "type": "boolean"
+              "type": "null"
             }
           ],
-          "description": "Clears the selection, emptying it of all values. Can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection. When set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
+        "condition": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
+            },
+            {
+              "items": {
+                "$ref": "#/definitions/ConditionalValueDef<(string|ExprRef)>"
+              },
+              "type": "array"
+            }
           ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
-        "init": {
-          "$ref": "#/definitions/SelectionInitIntervalMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
+        "format": {
+          "anyOf": [
+            {
+              "type": "string"
+            },
+            {
+              "$ref": "#/definitions/Dict"
+            }
+          ],
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
-        "mark": {
-          "$ref": "#/definitions/BrushConfig",
-          "description": "An interval selection also adds a rectangle mark to depict the extents of the interval. The `mark` property can be used to customize the appearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation."
+        "formatType": {
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "type": "string"
         },
-        "on": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Stream"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "type": "string"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
         },
-        "translate": {
-          "description": "When truthy, allows a user to interactively move an interval selection back-and-forth. Can be `true`, `false` (to disable panning), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/) which must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to `[mousedown, window:mouseup] > window:mousemove!` which corresponds to clicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
-          "const": "interval",
-          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `\"single\"` -- to select a single discrete data value on `click`. - `\"multi\"` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`. - `\"interval\"` -- to select a continuous range of data values on `drag`.",
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "FieldRange": {
+      "additionalProperties": false,
+      "properties": {
+        "field": {
           "type": "string"
-        },
-        "zoom": {
-          "description": "When truthy, allows a user to interactively resize an interval selection. Can be `true`, `false` (to disable zooming), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/). Currently, only `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
         }
       },
       "required": [
-        "type"
+        "field"
       ],
       "type": "object"
     },
-    "IntervalSelectionConfig": {
+    "FieldRangePredicate": {
       "additionalProperties": false,
       "properties": {
-        "bind": {
-          "const": "scales",
-          "description": "Establishes a two-way binding between the interval selection and the scales used within the same view. This allows a user to interactively pan and zoom the view.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation.",
-          "type": "string"
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "clear": {
+        "range": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Stream"
+              "items": {
+                "anyOf": [
+                  {
+                    "type": "number"
+                  },
+                  {
+                    "$ref": "#/definitions/DateTime"
+                  },
+                  {
+                    "type": "null"
+                  },
+                  {
+                    "$ref": "#/definitions/ExprRef"
+                  }
+                ]
+              },
+              "type": "array"
             },
             {
-              "type": "string"
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "An array of inclusive minimum and maximum values for a field value of a data item to be included in the filtered data.",
+          "maxItems": 2,
+          "minItems": 2
+        },
+        "timeUnit": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "type": "boolean"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "Clears the selection, emptying it of all values. Can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection. When set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "$ref": "#/definitions/SelectionInitIntervalMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and arrays of initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "mark": {
-          "$ref": "#/definitions/BrushConfig",
-          "description": "An interval selection also adds a rectangle mark to depict the extents of the interval. The `mark` property can be used to customize the appearance of the mark.\n\n__See also:__ [`mark`](https://vega.github.io/vega-lite/docs/selection-mark.html) documentation."
+          "description": "Time unit for the field to be tested."
+        }
+      },
+      "required": [
+        "field",
+        "range"
+      ],
+      "type": "object"
+    },
+    "FieldValidPredicate": {
+      "additionalProperties": false,
+      "properties": {
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Field to be tested."
         },
-        "on": {
+        "timeUnit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Stream"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "type": "string"
+              "$ref": "#/definitions/TimeUnitParams"
             }
           ],
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "translate": {
-          "description": "When truthy, allows a user to interactively move an interval selection back-and-forth. Can be `true`, `false` (to disable panning), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/) which must include a start and end event to trigger continuous panning.\n\n__Default value:__ `true`, which corresponds to `[mousedown, window:mouseup] > window:mousemove!` which corresponds to clicks and dragging within an interval selection to reposition it.\n\n__See also:__ [`translate`](https://vega.github.io/vega-lite/docs/translate.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
+          "description": "Time unit for the field to be tested."
         },
-        "zoom": {
-          "description": "When truthy, allows a user to interactively resize an interval selection. Can be `true`, `false` (to disable zooming), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/). Currently, only `wheel` events are supported.\n\n__Default value:__ `true`, which corresponds to `wheel!`.\n\n__See also:__ [`zoom`](https://vega.github.io/vega-lite/docs/zoom.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
+        "valid": {
+          "description": "If set to true the field's value has to be valid, meaning both not `null` and not [`NaN`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NaN).",
+          "type": "boolean"
         }
       },
+      "required": [
+        "field",
+        "valid"
+      ],
       "type": "object"
     },
-    "JoinAggregateFieldDef": {
+    "FilterTransform": {
       "additionalProperties": false,
       "properties": {
-        "as": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The output name for the join aggregate operation."
-        },
-        "field": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`."
-        },
-        "op": {
-          "$ref": "#/definitions/AggregateOp",
-          "description": "The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops)."
+        "filter": {
+          "$ref": "#/definitions/PredicateComposition",
+          "description": "The `filter` property must be a predication definition, which can take one of the following forms:\n\n1) an [expression](https://vega.github.io/vega-lite/docs/types.html#expression) string, where `datum` can be used to refer to the current data object. For example, `{filter: \"datum.b2 > 60\"}` would make the output data includes only items that have values in the field `b2` over 60.\n\n2) one of the [field predicates](https://vega.github.io/vega-lite/docs/predicate.html#field-predicate): [`equal`](https://vega.github.io/vega-lite/docs/predicate.html#field-equal-predicate), [`lt`](https://vega.github.io/vega-lite/docs/predicate.html#lt-predicate), [`lte`](https://vega.github.io/vega-lite/docs/predicate.html#lte-predicate), [`gt`](https://vega.github.io/vega-lite/docs/predicate.html#gt-predicate), [`gte`](https://vega.github.io/vega-lite/docs/predicate.html#gte-predicate), [`range`](https://vega.github.io/vega-lite/docs/predicate.html#range-predicate), [`oneOf`](https://vega.github.io/vega-lite/docs/predicate.html#one-of-predicate), or [`valid`](https://vega.github.io/vega-lite/docs/predicate.html#valid-predicate),\n\n3) a [selection predicate](https://vega.github.io/vega-lite/docs/predicate.html#selection-predicate), which define the names of a selection that the data point should belong to (or a logical composition of selections).\n\n4) a [logical composition](https://vega.github.io/vega-lite/docs/predicate.html#composition) of (1), (2), or (3)."
         }
       },
       "required": [
-        "op",
-        "as"
+        "filter"
       ],
       "type": "object"
     },
-    "JoinAggregateTransform": {
+    "Fit": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/GeoJsonFeature"
+        },
+        {
+          "$ref": "#/definitions/GeoJsonFeatureCollection"
+        },
+        {
+          "items": {
+            "$ref": "#/definitions/GeoJsonFeature"
+          },
+          "type": "array"
+        }
+      ]
+    },
+    "FlattenTransform": {
       "additionalProperties": false,
       "properties": {
-        "groupby": {
-          "description": "The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.",
+        "as": {
+          "description": "The output field names for extracted array values.\n\n__Default value:__ The field name of the corresponding array field",
           "items": {
             "$ref": "#/definitions/FieldName"
           },
           "type": "array"
         },
-        "joinaggregate": {
-          "description": "The definition of the fields in the join aggregate, and what calculations to use.",
+        "flatten": {
+          "description": "An array of one or more data fields containing arrays to flatten. If multiple fields are specified, their array values should have a parallel structure, ideally with the same length. If the lengths of parallel arrays do not match, the longest array will be used with `null` values added for missing entries.",
           "items": {
-            "$ref": "#/definitions/JoinAggregateFieldDef"
+            "$ref": "#/definitions/FieldName"
           },
           "type": "array"
         }
       },
       "required": [
-        "joinaggregate"
+        "flatten"
       ],
       "type": "object"
     },
-    "JsonDataFormat": {
+    "FoldTransform": {
       "additionalProperties": false,
       "properties": {
-        "parse": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Parse"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
-        },
-        "property": {
-          "description": "The JSON property containing the desired data. This parameter can be used when the loaded JSON file may have surrounding structure or meta-data. For example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features` from the loaded JSON object.",
-          "type": "string"
+        "as": {
+          "description": "The output field names for the key and value properties produced by the fold transform. __Default value:__ `[\"key\", \"value\"]`",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "maxItems": 2,
+          "minItems": 2,
+          "type": "array"
         },
-        "type": {
-          "const": "json",
-          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL. If no extension is detected, `\"json\"` will be used by default.",
-          "type": "string"
+        "fold": {
+          "description": "An array of data fields indicating the properties to fold.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
         }
       },
+      "required": [
+        "fold"
+      ],
       "type": "object"
     },
-    "LabelOverlap": {
-      "anyOf": [
-        {
-          "type": "boolean"
-        },
-        {
-          "const": "parity",
-          "type": "string"
-        },
-        {
-          "const": "greedy",
-          "type": "string"
-        }
+    "FontStyle": {
+      "type": "string"
+    },
+    "FontWeight": {
+      "enum": [
+        "normal",
+        "bold",
+        "lighter",
+        "bolder",
+        100,
+        200,
+        300,
+        400,
+        500,
+        600,
+        700,
+        800,
+        900
+      ],
+      "type": [
+        "string",
+        "number"
       ]
     },
-    "LatLongDef": {
+    "Generator": {
       "anyOf": [
         {
-          "$ref": "#/definitions/LatLongFieldDef"
+          "$ref": "#/definitions/SequenceGenerator"
         },
         {
-          "$ref": "#/definitions/DatumDef"
+          "$ref": "#/definitions/SphereGenerator"
         },
         {
-          "$ref": "#/definitions/NumericValueDef"
+          "$ref": "#/definitions/GraticuleGenerator"
         }
       ]
     },
-    "LatLongFieldDef": {
+    "ConcatSpec<GenericSpec>": {
       "additionalProperties": false,
+      "description": "Base interface for a generalized concatenation specification.",
       "properties": {
-        "aggregate": {
-          "$ref": "#/definitions/Aggregate",
-          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        "align": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/LayoutAlign"
+            },
+            {
+              "$ref": "#/definitions/RowCol<LayoutAlign>"
+            }
+          ],
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
-          "maximum": 1,
-          "minimum": 0,
+        "bounds": {
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "enum": [
+            "full",
+            "flush"
+          ],
+          "type": "string"
+        },
+        "center": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/RowCol<boolean>"
+            }
+          ],
+          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
+        },
+        "columns": {
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
           "type": "number"
         },
-        "bin": {
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
-          "type": "null"
+        "concat": {
+          "description": "A list of views to be concatenated.",
+          "items": {
+            "$ref": "#/definitions/Spec"
+          },
+          "type": "array"
+        },
+        "data": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Data"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
+        },
+        "description": {
+          "description": "Description of this mark for commenting purpose.",
+          "type": "string"
         },
-        "field": {
-          "$ref": "#/definitions/Field",
-          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        "name": {
+          "description": "Name of the visualization for later reference.",
+          "type": "string"
         },
-        "timeUnit": {
+        "resolve": {
+          "$ref": "#/definitions/Resolve",
+          "description": "Scale, axis, and legend resolutions for view composition specifications."
+        },
+        "spacing": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TimeUnit"
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/TimeUnitParams"
+              "$ref": "#/definitions/RowCol<number>"
             }
           ],
-          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
         },
         "title": {
           "anyOf": [
@@ -12681,51 +10949,27 @@
               "$ref": "#/definitions/Text"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/TitleParams"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
-        },
-        "type": {
-          "const": "quantitative",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.",
-          "type": "string"
-        }
-      },
-      "type": "object"
-    },
-    "LayerRepeatMapping": {
-      "additionalProperties": false,
-      "properties": {
-        "column": {
-          "description": "An array of fields to be repeated horizontally.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
-        "layer": {
-          "description": "An array of fields to be repeated as layers.",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
+          "description": "Title for the plot."
         },
-        "row": {
-          "description": "An array of fields to be repeated vertically.",
+        "transform": {
+          "description": "An array of data transformations such as filter and new field calculation.",
           "items": {
-            "type": "string"
+            "$ref": "#/definitions/Transform"
           },
           "type": "array"
         }
       },
       "required": [
-        "layer"
+        "concat"
       ],
       "type": "object"
     },
-    "LayerRepeatSpec": {
+    "FacetSpec": {
       "additionalProperties": false,
+      "description": "Base interface for a facet specification.",
       "properties": {
         "align": {
           "anyOf": [
@@ -12736,10 +10980,10 @@
               "$ref": "#/definitions/RowCol<LayoutAlign>"
             }
           ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -12758,7 +11002,7 @@
           "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
         },
         "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
           "type": "number"
         },
         "data": {
@@ -12776,14 +11020,21 @@
           "description": "Description of this mark for commenting purpose.",
           "type": "string"
         },
+        "facet": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/FacetFieldDef"
+            },
+            {
+              "$ref": "#/definitions/FacetMapping"
+            }
+          ],
+          "description": "Definition for how to facet the data. One of: 1) [a field definition for faceting the plot by one field](https://vega.github.io/vega-lite/docs/facet.html#field-def) 2) [An object that maps `row` and `column` channels to their field definitions](https://vega.github.io/vega-lite/docs/facet.html#mapping)"
+        },
         "name": {
           "description": "Name of the visualization for later reference.",
           "type": "string"
         },
-        "repeat": {
-          "$ref": "#/definitions/LayerRepeatMapping",
-          "description": "Definition for fields to be repeated. One of: 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping. 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively."
-        },
         "resolve": {
           "$ref": "#/definitions/Resolve",
           "description": "Scale, axis, and legend resolutions for view composition specifications."
@@ -12805,10 +11056,10 @@
               "$ref": "#/definitions/LayerSpec"
             },
             {
-              "$ref": "#/definitions/UnitSpec"
+              "$ref": "#/definitions/FacetedUnitSpec"
             }
           ],
-          "description": "A specification of the view that gets repeated."
+          "description": "A specification of the view that gets faceted."
         },
         "title": {
           "anyOf": [
@@ -12830,15 +11081,27 @@
         }
       },
       "required": [
-        "repeat",
+        "facet",
         "spec"
       ],
       "type": "object"
     },
-    "LayerSpec": {
+    "HConcatSpec<GenericSpec>": {
       "additionalProperties": false,
-      "description": "A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.",
+      "description": "Base interface for a horizontal concatenation specification.",
       "properties": {
+        "bounds": {
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "enum": [
+            "full",
+            "flush"
+          ],
+          "type": "string"
+        },
+        "center": {
+          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
+          "type": "boolean"
+        },
         "data": {
           "anyOf": [
             {
@@ -12854,51 +11117,184 @@
           "description": "Description of this mark for commenting purpose.",
           "type": "string"
         },
-        "encoding": {
-          "$ref": "#/definitions/SharedEncoding",
-          "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers."
+        "hconcat": {
+          "description": "A list of views to be concatenated and put into a row.",
+          "items": {
+            "$ref": "#/definitions/Spec"
+          },
+          "type": "array"
         },
-        "height": {
+        "name": {
+          "description": "Name of the visualization for later reference.",
+          "type": "string"
+        },
+        "resolve": {
+          "$ref": "#/definitions/Resolve",
+          "description": "Scale, axis, and legend resolutions for view composition specifications."
+        },
+        "spacing": {
+          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
+          "type": "number"
+        },
+        "title": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "const": "container",
-              "type": "string"
+              "$ref": "#/definitions/TitleParams"
+            }
+          ],
+          "description": "Title for the plot."
+        },
+        "transform": {
+          "description": "An array of data transformations such as filter and new field calculation.",
+          "items": {
+            "$ref": "#/definitions/Transform"
+          },
+          "type": "array"
+        }
+      },
+      "required": [
+        "hconcat"
+      ],
+      "type": "object"
+    },
+    "Spec": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/FacetedUnitSpec"
+        },
+        {
+          "$ref": "#/definitions/LayerSpec"
+        },
+        {
+          "$ref": "#/definitions/RepeatSpec"
+        },
+        {
+          "$ref": "#/definitions/FacetSpec"
+        },
+        {
+          "$ref": "#/definitions/ConcatSpec<GenericSpec>"
+        },
+        {
+          "$ref": "#/definitions/VConcatSpec<GenericSpec>"
+        },
+        {
+          "$ref": "#/definitions/HConcatSpec<GenericSpec>"
+        }
+      ],
+      "description": "Any specification in Vega-Lite."
+    },
+    "GenericUnitSpec<Encoding,AnyMark>": {
+      "additionalProperties": false,
+      "description": "Base interface for a unit (single-view) specification.",
+      "properties": {
+        "data": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Data"
             },
             {
-              "$ref": "#/definitions/Step"
+              "type": "null"
             }
           ],
-          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number. - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) - To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
         },
-        "layer": {
-          "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.",
+        "description": {
+          "description": "Description of this mark for commenting purpose.",
+          "type": "string"
+        },
+        "encoding": {
+          "$ref": "#/definitions/Encoding",
+          "description": "A key-value mapping between encoding channels and definition of fields."
+        },
+        "mark": {
+          "$ref": "#/definitions/AnyMark",
+          "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)."
+        },
+        "name": {
+          "description": "Name of the visualization for later reference.",
+          "type": "string"
+        },
+        "params": {
+          "description": "An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.",
           "items": {
-            "anyOf": [
-              {
-                "$ref": "#/definitions/LayerSpec"
-              },
-              {
-                "$ref": "#/definitions/UnitSpec"
-              }
-            ]
+            "$ref": "#/definitions/SelectionParameter"
+          },
+          "type": "array"
+        },
+        "projection": {
+          "$ref": "#/definitions/Projection",
+          "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks and to `latitude` and `\"longitude\"` channels for other marks."
+        },
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "$ref": "#/definitions/TitleParams"
+            }
+          ],
+          "description": "Title for the plot."
+        },
+        "transform": {
+          "description": "An array of data transformations such as filter and new field calculation.",
+          "items": {
+            "$ref": "#/definitions/Transform"
           },
           "type": "array"
+        }
+      },
+      "required": [
+        "mark"
+      ],
+      "type": "object"
+    },
+    "VConcatSpec<GenericSpec>": {
+      "additionalProperties": false,
+      "description": "Base interface for a vertical concatenation specification.",
+      "properties": {
+        "bounds": {
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "enum": [
+            "full",
+            "flush"
+          ],
+          "type": "string"
+        },
+        "center": {
+          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
+          "type": "boolean"
+        },
+        "data": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Data"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
+        },
+        "description": {
+          "description": "Description of this mark for commenting purpose.",
+          "type": "string"
         },
         "name": {
           "description": "Name of the visualization for later reference.",
           "type": "string"
         },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of the geographic projection shared by underlying layers."
-        },
         "resolve": {
           "$ref": "#/definitions/Resolve",
           "description": "Scale, axis, and legend resolutions for view composition specifications."
         },
+        "spacing": {
+          "description": "The spacing in pixels between sub-views of the concat operator.\n\n__Default value__: `10`",
+          "type": "number"
+        },
         "title": {
           "anyOf": [
             {
@@ -12917,595 +11313,456 @@
           },
           "type": "array"
         },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
-        },
-        "width": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "container",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Step"
-            }
-          ],
-          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number. - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) - To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+        "vconcat": {
+          "description": "A list of views to be concatenated and put into a column.",
+          "items": {
+            "$ref": "#/definitions/Spec"
+          },
+          "type": "array"
         }
       },
       "required": [
-        "layer"
+        "vconcat"
       ],
       "type": "object"
     },
-    "LayoutAlign": {
-      "enum": [
-        "all",
-        "each",
-        "none"
-      ],
-      "type": "string"
+    "GeoJsonFeature": {
+      "$ref": "#/definitions/Feature"
     },
-    "Legend": {
-      "additionalProperties": false,
-      "description": "Properties of a legend or boolean flag for determining whether to show it.",
-      "properties": {
-        "aria": {
-          "anyOf": [
-            {
-              "description": "A boolean flag indicating if [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) should be included (SVG output only). If `false`, the \"aria-hidden\" attribute will be set on the output SVG group, removing the legend from the ARIA accessibility tree.\n\n__Default value:__ `true`",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+    "GeoJsonFeatureCollection": {
+      "$ref": "#/definitions/FeatureCollection"
+    },
+    "GeoJsonProperties": {
+      "anyOf": [
+        {
+          "type": "object"
         },
-        "clipHeight": {
-          "anyOf": [
-            {
-              "description": "The height in pixels to clip symbol legend entries and limit their size.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "type": "null"
+        }
+      ]
+    },
+    "Geometry": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/Point"
         },
-        "columnPadding": {
-          "anyOf": [
-            {
-              "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "$ref": "#/definitions/MultiPoint"
         },
-        "columns": {
-          "anyOf": [
-            {
-              "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "$ref": "#/definitions/LineString"
         },
-        "cornerRadius": {
-          "anyOf": [
-            {
-              "description": "Corner radius for the full legend.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "$ref": "#/definitions/MultiLineString"
         },
-        "description": {
-          "anyOf": [
-            {
-              "description": "A text description of this legend for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If the `aria` property is true, for SVG output the [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute) will be set to this description. If the description is unspecified it will be automatically generated.",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "$ref": "#/definitions/Polygon"
         },
-        "direction": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__ - For top-/bottom-`orient`ed legends, `\"horizontal\"` - For left-/right-`orient`ed legends, `\"vertical\"` - For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends."
+        {
+          "$ref": "#/definitions/MultiPolygon"
         },
-        "fillColor": {
-          "anyOf": [
-            {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "Background fill color for the full legend."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "$ref": "#/definitions/GeometryCollection"
+        }
+      ],
+      "description": "Union of geometry objects. https://tools.ietf.org/html/rfc7946#section-3"
+    },
+    "GeometryCollection": {
+      "additionalProperties": false,
+      "description": "Geometry Collection https://tools.ietf.org/html/rfc7946#section-3.1.8",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
         },
-        "format": {
-          "anyOf": [
-            {
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Dict<unknown>"
-            }
-          ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+        "geometries": {
+          "items": {
+            "$ref": "#/definitions/Geometry"
+          },
+          "type": "array"
         },
-        "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+        "type": {
+          "const": "GeometryCollection",
+          "description": "Specifies the type of GeoJSON object.",
           "type": "string"
+        }
+      },
+      "required": [
+        "geometries",
+        "type"
+      ],
+      "type": "object"
+    },
+    "Gradient": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/LinearGradient"
         },
-        "gradientLength": {
-          "anyOf": [
-            {
-              "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.",
-              "minimum": 0,
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "$ref": "#/definitions/RadialGradient"
+        }
+      ]
+    },
+    "GradientStop": {
+      "additionalProperties": false,
+      "properties": {
+        "color": {
+          "$ref": "#/definitions/Color",
+          "description": "The color value at this point in the gradient."
         },
-        "gradientOpacity": {
+        "offset": {
+          "description": "The offset fraction for the color stop, indicating its position within the gradient.",
+          "type": "number"
+        }
+      },
+      "required": [
+        "offset",
+        "color"
+      ],
+      "type": "object"
+    },
+    "GraticuleGenerator": {
+      "additionalProperties": false,
+      "properties": {
+        "graticule": {
           "anyOf": [
             {
-              "description": "Opacity of the color gradient.",
-              "type": "number"
+              "const": true,
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/GraticuleParams"
             }
-          ]
+          ],
+          "description": "Generate graticule GeoJSON data for geographic reference lines."
         },
-        "gradientStrokeColor": {
-          "anyOf": [
-            {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "name": {
+          "description": "Provide a placeholder name and bind data at runtime.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "graticule"
+      ],
+      "type": "object"
+    },
+    "GraticuleParams": {
+      "additionalProperties": false,
+      "properties": {
+        "extent": {
+          "$ref": "#/definitions/Vector2<Vector2<number>>",
+          "description": "Sets both the major and minor extents to the same values."
+        },
+        "extentMajor": {
+          "$ref": "#/definitions/Vector2<Vector2<number>>",
+          "description": "The major extent of the graticule as a two-element array of coordinates."
+        },
+        "extentMinor": {
+          "$ref": "#/definitions/Vector2<Vector2<number>>",
+          "description": "The minor extent of the graticule as a two-element array of coordinates."
         },
-        "gradientStrokeWidth": {
-          "anyOf": [
-            {
-              "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
-              "minimum": 0,
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "precision": {
+          "description": "The precision of the graticule in degrees.\n\n__Default value:__ `2.5`",
+          "type": "number"
         },
-        "gradientThickness": {
-          "anyOf": [
-            {
-              "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.",
-              "minimum": 0,
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "step": {
+          "$ref": "#/definitions/Vector2<number>",
+          "description": "Sets both the major and minor step angles to the same values."
         },
-        "gridAlign": {
+        "stepMajor": {
+          "$ref": "#/definitions/Vector2<number>",
+          "description": "The major step angles of the graticule.\n\n\n__Default value:__ `[90, 360]`"
+        },
+        "stepMinor": {
+          "$ref": "#/definitions/Vector2<number>",
+          "description": "The minor step angles of the graticule.\n\n__Default value:__ `[10, 10]`"
+        }
+      },
+      "type": "object"
+    },
+    "Header": {
+      "additionalProperties": false,
+      "description": "Headers of row / column channels for faceted plots.",
+      "properties": {
+        "format": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LayoutAlign",
-              "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`."
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/Dict"
             }
-          ]
+          ],
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+        },
+        "formatType": {
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "type": "string"
         },
         "labelAlign": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Align",
-              "description": "The alignment of the legend label, can be left, center, or right."
+              "$ref": "#/definitions/Align"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`."
+        },
+        "labelAnchor": {
+          "$ref": "#/definitions/TitleAnchor",
+          "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label."
+        },
+        "labelAngle": {
+          "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.",
+          "maximum": 360,
+          "minimum": -360,
+          "type": "number"
         },
         "labelBaseline": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextBaseline",
-              "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`."
+              "$ref": "#/definitions/TextBaseline"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone."
         },
         "labelColor": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "The color of the legend label, can be in hex color code or regular color name."
+              "$ref": "#/definitions/Color"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The color of the header label, can be in hex color code or regular color name."
         },
         "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.",
+          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.",
           "type": "string"
         },
         "labelFont": {
           "anyOf": [
             {
-              "description": "The font of the legend label.",
               "type": "string"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font of the header label."
         },
         "labelFontSize": {
           "anyOf": [
             {
-              "description": "The font size of legend label.\n\n__Default value:__ `10`.",
-              "minimum": 0,
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font size of the header label, in pixels.",
+          "minimum": 0
         },
         "labelFontStyle": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontStyle",
-              "description": "The font style of legend label."
+              "$ref": "#/definitions/FontStyle"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font style of the header label."
         },
         "labelFontWeight": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight",
-              "description": "The font weight of legend label."
+              "$ref": "#/definitions/FontWeight"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font weight of the header label."
         },
         "labelLimit": {
           "anyOf": [
             {
-              "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "labelOffset": {
-          "anyOf": [
-            {
-              "description": "The offset of the legend label.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
         },
-        "labelOpacity": {
+        "labelLineHeight": {
           "anyOf": [
             {
-              "description": "Opacity of labels.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
         },
-        "labelOverlap": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/LabelOverlap",
-              "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` (default) or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true`."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "labelOrient": {
+          "$ref": "#/definitions/Orient",
+          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
         },
         "labelPadding": {
           "anyOf": [
             {
-              "description": "Padding in pixels between the legend and legend labels.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "labelSeparation": {
-          "anyOf": [
-            {
-              "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "legendX": {
-          "anyOf": [
-            {
-              "description": "Custom x-position for legend with orient \"none\".",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "legendY": {
-          "anyOf": [
-            {
-              "description": "Custom y-position for legend with orient \"none\".",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "offset": {
-          "anyOf": [
-            {
-              "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "orient": {
-          "$ref": "#/definitions/LegendOrient",
-          "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`"
-        },
-        "padding": {
-          "anyOf": [
-            {
-              "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "rowPadding": {
-          "anyOf": [
-            {
-              "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`"
         },
-        "strokeColor": {
-          "anyOf": [
-            {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "Border stroke color for the full legend."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "labels": {
+          "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.",
+          "type": "boolean"
         },
-        "symbolDash": {
-          "anyOf": [
-            {
-              "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "orient": {
+          "$ref": "#/definitions/Orient",
+          "description": "Shortcut for setting both labelOrient and titleOrient."
         },
-        "symbolDashOffset": {
+        "title": {
           "anyOf": [
             {
-              "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
-          ]
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "symbolFillColor": {
+        "titleAlign": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "The color of the legend symbol,"
+              "$ref": "#/definitions/Align"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Horizontal text alignment (to the anchor) of header titles."
         },
-        "symbolLimit": {
+        "titleAnchor": {
+          "$ref": "#/definitions/TitleAnchor",
+          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
+        },
+        "titleAngle": {
+          "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.",
+          "maximum": 360,
+          "minimum": -360,
+          "type": "number"
+        },
+        "titleBaseline": {
           "anyOf": [
             {
-              "description": "The maximum number of allowed entries for a symbol legend. Additional entries will be dropped.",
-              "type": "number"
+              "$ref": "#/definitions/TextBaseline"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n\n__Default value:__ `\"middle\"`"
         },
-        "symbolOffset": {
+        "titleColor": {
           "anyOf": [
             {
-              "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
-              "type": "number"
+              "$ref": "#/definitions/Color"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Color of the header title, can be in hex color code or regular color name."
         },
-        "symbolOpacity": {
+        "titleFont": {
           "anyOf": [
             {
-              "description": "Opacity of the legend symbols.",
-              "type": "number"
+              "type": "string"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`)."
         },
-        "symbolSize": {
+        "titleFontSize": {
           "anyOf": [
             {
-              "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
-              "minimum": 0,
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Font size of the header title.",
+          "minimum": 0
         },
-        "symbolStrokeColor": {
+        "titleFontStyle": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "Stroke color for legend symbols."
+              "$ref": "#/definitions/FontStyle"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font style of the header title."
         },
-        "symbolStrokeWidth": {
+        "titleFontWeight": {
           "anyOf": [
             {
-              "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
-              "minimum": 0,
-              "type": "number"
+              "$ref": "#/definitions/FontWeight"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Font weight of the header title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
         },
-        "symbolType": {
+        "titleLimit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/SymbolShape",
-              "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`."
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
         },
-        "tickCount": {
+        "titleLineHeight": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TickCount",
-              "description": "The desired number of tick values for quantitative legends."
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
         },
-        "tickMinStep": {
+        "titleOrient": {
+          "$ref": "#/definitions/Orient",
+          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
+        },
+        "titlePadding": {
           "anyOf": [
             {
               "type": "number"
@@ -13514,759 +11771,1084 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`"
-        },
-        "title": {
+          "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`"
+        }
+      },
+      "type": "object"
+    },
+    "HeaderConfig": {
+      "additionalProperties": false,
+      "properties": {
+        "format": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "type": "string"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/Dict"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
-        "titleAlign": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Align",
-              "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "formatType": {
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "type": "string"
         },
-        "titleAnchor": {
+        "labelAlign": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TitleAnchor",
-              "description": "Text anchor position for placing legend titles."
+              "$ref": "#/definitions/Align"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Horizontal text alignment of header labels. One of `\"left\"`, `\"center\"`, or `\"right\"`."
         },
-        "titleBaseline": {
+        "labelAnchor": {
+          "$ref": "#/definitions/TitleAnchor",
+          "description": "The anchor position for placing the labels. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with a label orientation of top these anchor positions map to a left-, center-, or right-aligned label."
+        },
+        "labelAngle": {
+          "description": "The rotation angle of the header labels.\n\n__Default value:__ `0` for column header, `-90` for row header.",
+          "maximum": 360,
+          "minimum": -360,
+          "type": "number"
+        },
+        "labelBaseline": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextBaseline",
-              "description": "Vertical text baseline for legend titles.  One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the *lineHeight* rather than *fontSize* alone.\n\n__Default value:__ `\"top\"`."
+              "$ref": "#/definitions/TextBaseline"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The vertical text baseline for the header labels. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone."
         },
-        "titleColor": {
+        "labelColor": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "The color of the legend title, can be in hex color code or regular color name."
+              "$ref": "#/definitions/Color"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The color of the header label, can be in hex color code or regular color name."
         },
-        "titleFont": {
+        "labelExpr": {
+          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the header's backing `datum` object.",
+          "type": "string"
+        },
+        "labelFont": {
           "anyOf": [
             {
-              "description": "The font of the legend title.",
               "type": "string"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font of the header label."
         },
-        "titleFontSize": {
+        "labelFontSize": {
           "anyOf": [
             {
-              "description": "The font size of the legend title.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font size of the header label, in pixels.",
+          "minimum": 0
         },
-        "titleFontStyle": {
+        "labelFontStyle": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontStyle",
-              "description": "The font style of the legend title."
+              "$ref": "#/definitions/FontStyle"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font style of the header label."
         },
-        "titleFontWeight": {
+        "labelFontWeight": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight",
-              "description": "The font weight of the legend title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
+              "$ref": "#/definitions/FontWeight"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font weight of the header label."
         },
-        "titleLimit": {
+        "labelLimit": {
           "anyOf": [
             {
-              "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
-              "minimum": 0,
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The maximum length of the header label in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
         },
-        "titleLineHeight": {
+        "labelLineHeight": {
           "anyOf": [
             {
-              "description": "Line height in pixels for multi-line title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Line height in pixels for multi-line header labels or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
         },
-        "titleOpacity": {
+        "labelOrient": {
+          "$ref": "#/definitions/Orient",
+          "description": "The orientation of the header label. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
+        },
+        "labelPadding": {
           "anyOf": [
             {
-              "description": "Opacity of the legend title.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The padding, in pixel, between facet header's label and the plot.\n\n__Default value:__ `10`"
         },
-        "titleOrient": {
+        "labels": {
+          "description": "A boolean flag indicating if labels should be included as part of the header.\n\n__Default value:__ `true`.",
+          "type": "boolean"
+        },
+        "orient": {
+          "$ref": "#/definitions/Orient",
+          "description": "Shortcut for setting both labelOrient and titleOrient."
+        },
+        "title": {
+          "description": "Set to null to disable title for the axis, legend, or header.",
+          "type": "null"
+        },
+        "titleAlign": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Orient",
-              "description": "Orientation of the legend title."
+              "$ref": "#/definitions/Align"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Horizontal text alignment (to the anchor) of header titles."
         },
-        "titlePadding": {
+        "titleAnchor": {
+          "$ref": "#/definitions/TitleAnchor",
+          "description": "The anchor position for placing the title. One of `\"start\"`, `\"middle\"`, or `\"end\"`. For example, with an orientation of top these anchor positions map to a left-, center-, or right-aligned title."
+        },
+        "titleAngle": {
+          "description": "The rotation angle of the header title.\n\n__Default value:__ `0`.",
+          "maximum": 360,
+          "minimum": -360,
+          "type": "number"
+        },
+        "titleBaseline": {
           "anyOf": [
             {
-              "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
-              "type": "number"
+              "$ref": "#/definitions/TextBaseline"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
-        },
-        "type": {
-          "description": "The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n\n__Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.",
-          "enum": [
-            "symbol",
-            "gradient"
           ],
-          "type": "string"
+          "description": "The vertical text baseline for the header title. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `titleLineHeight` rather than `titleFontSize` alone.\n\n__Default value:__ `\"middle\"`"
         },
-        "values": {
+        "titleColor": {
           "anyOf": [
             {
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "string"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "type": "boolean"
-              },
-              "type": "array"
-            },
-            {
-              "items": {
-                "$ref": "#/definitions/DateTime"
-              },
-              "type": "array"
+              "$ref": "#/definitions/Color"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Explicitly set the visible legend values."
-        },
-        "zindex": {
-          "description": "A non-negative integer indicating the z-index of the legend. If zindex is 0, legend should be drawn behind all chart elements. To put them in front, use zindex = 1.",
-          "minimum": 0,
-          "type": "number"
-        }
-      },
-      "type": "object"
-    },
-    "LegendBinding": {
-      "anyOf": [
-        {
-          "const": "legend",
-          "type": "string"
+          "description": "Color of the header title, can be in hex color code or regular color name."
         },
-        {
-          "$ref": "#/definitions/LegendStreamBinding"
-        }
-      ]
-    },
-    "LegendConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "aria": {
+        "titleFont": {
           "anyOf": [
             {
-              "description": "A boolean flag indicating if [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) should be included (SVG output only). If `false`, the \"aria-hidden\" attribute will be set on the output SVG group, removing the legend from the ARIA accessibility tree.\n\n__Default value:__ `true`",
-              "type": "boolean"
+              "type": "string"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Font of the header title. (e.g., `\"Helvetica Neue\"`)."
         },
-        "clipHeight": {
+        "titleFontSize": {
           "anyOf": [
             {
-              "description": "The height in pixels to clip symbol legend entries and limit their size.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Font size of the header title.",
+          "minimum": 0
         },
-        "columnPadding": {
+        "titleFontStyle": {
           "anyOf": [
             {
-              "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
-              "type": "number"
+              "$ref": "#/definitions/FontStyle"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The font style of the header title."
         },
-        "columns": {
+        "titleFontWeight": {
           "anyOf": [
             {
-              "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.",
-              "type": "number"
+              "$ref": "#/definitions/FontWeight"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Font weight of the header title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
         },
-        "cornerRadius": {
+        "titleLimit": {
           "anyOf": [
             {
-              "description": "Corner radius for the full legend.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The maximum length of the header title in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0`, indicating no limit"
         },
-        "description": {
+        "titleLineHeight": {
           "anyOf": [
             {
-              "description": "A text description of this legend for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If the `aria` property is true, for SVG output the [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute) will be set to this description. If the description is unspecified it will be automatically generated.",
-              "type": "string"
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
-        },
-        "direction": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__ - For top-/bottom-`orient`ed legends, `\"horizontal\"` - For left-/right-`orient`ed legends, `\"vertical\"` - For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends."
+          ],
+          "description": "Line height in pixels for multi-line header title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline."
         },
-        "disable": {
-          "description": "Disable legend by default",
-          "type": "boolean"
+        "titleOrient": {
+          "$ref": "#/definitions/Orient",
+          "description": "The orientation of the header title. One of `\"top\"`, `\"bottom\"`, `\"left\"` or `\"right\"`."
         },
-        "fillColor": {
+        "titlePadding": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "Background fill color for the full legend."
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The padding, in pixel, between facet header's title and the label.\n\n__Default value:__ `10`"
+        }
+      },
+      "type": "object"
+    },
+    "HexColor": {
+      "format": "color-hex",
+      "type": "string"
+    },
+    "ImputeMethod": {
+      "enum": [
+        "value",
+        "median",
+        "max",
+        "min",
+        "mean"
+      ],
+      "type": "string"
+    },
+    "ImputeParams": {
+      "additionalProperties": false,
+      "properties": {
+        "frame": {
+          "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__:  `[null, null]` indicating that the window includes all objects.",
+          "items": {
+            "type": [
+              "null",
+              "number"
+            ]
+          },
+          "maxItems": 2,
+          "minItems": 2,
+          "type": "array"
         },
-        "gradientDirection": {
+        "keyvals": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Orientation",
-              "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for gradient legends.\n\n__Default value:__ `\"vertical\"`."
+              "items": {},
+              "type": "array"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/ImputeSequence"
             }
-          ]
+          ],
+          "description": "Defines the key values that should be considered for imputation. An array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified."
         },
-        "gradientHorizontalMaxLength": {
-          "description": "Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`",
+        "method": {
+          "$ref": "#/definitions/ImputeMethod",
+          "description": "The imputation method to use for the field value of imputed data objects. One of `\"value\"`, `\"mean\"`, `\"median\"`, `\"max\"` or `\"min\"`.\n\n__Default value:__  `\"value\"`"
+        },
+        "value": {
+          "description": "The field value to use when the imputation `method` is `\"value\"`."
+        }
+      },
+      "type": "object"
+    },
+    "ImputeSequence": {
+      "additionalProperties": false,
+      "properties": {
+        "start": {
+          "description": "The starting value of the sequence. __Default value:__ `0`",
           "type": "number"
         },
-        "gradientHorizontalMinLength": {
-          "description": "Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`",
+        "step": {
+          "description": "The step value between sequence entries. __Default value:__ `1` or `-1` if `stop < start`",
           "type": "number"
         },
-        "gradientLabelLimit": {
-          "anyOf": [
-            {
-              "description": "The maximum allowed length in pixels of color ramp gradient labels.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "stop": {
+          "description": "The ending value(exclusive) of the sequence.",
+          "type": "number"
+        }
+      },
+      "required": [
+        "stop"
+      ],
+      "type": "object"
+    },
+    "ImputeTransform": {
+      "additionalProperties": false,
+      "properties": {
+        "frame": {
+          "description": "A frame specification as a two-element array used to control the window over which the specified method is applied. The array entries should either be a number indicating the offset from the current data object, or null to indicate unbounded rows preceding or following the current data object. For example, the value `[-5, 5]` indicates that the window should include five objects preceding and five objects following the current object.\n\n__Default value:__:  `[null, null]` indicating that the window includes all objects.",
+          "items": {
+            "type": [
+              "null",
+              "number"
+            ]
+          },
+          "maxItems": 2,
+          "minItems": 2,
+          "type": "array"
+        },
+        "groupby": {
+          "description": "An optional array of fields by which to group the values. Imputation will then be performed on a per-group basis.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
+        },
+        "impute": {
+          "$ref": "#/definitions/FieldName",
+          "description": "The data field for which the missing values should be imputed."
+        },
+        "key": {
+          "$ref": "#/definitions/FieldName",
+          "description": "A key field that uniquely identifies data objects within a group. Missing key values (those occurring in the data but not in the current group) will be imputed."
         },
-        "gradientLabelOffset": {
+        "keyvals": {
           "anyOf": [
             {
-              "description": "Vertical offset in pixels for color ramp gradient labels.\n\n__Default value:__ `2`.",
-              "type": "number"
+              "items": {},
+              "type": "array"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/ImputeSequence"
             }
-          ]
+          ],
+          "description": "Defines the key values that should be considered for imputation. An array of key values or an object defining a [number sequence](https://vega.github.io/vega-lite/docs/impute.html#sequence-def).\n\nIf provided, this will be used in addition to the key values observed within the input data. If not provided, the values will be derived from all unique values of the `key` field. For `impute` in `encoding`, the key field is the x-field if the y-field is imputed, or vice versa.\n\nIf there is no impute grouping, this property _must_ be specified."
         },
-        "gradientLength": {
-          "anyOf": [
-            {
-              "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.",
-              "minimum": 0,
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "method": {
+          "$ref": "#/definitions/ImputeMethod",
+          "description": "The imputation method to use for the field value of imputed data objects. One of `\"value\"`, `\"mean\"`, `\"median\"`, `\"max\"` or `\"min\"`.\n\n__Default value:__  `\"value\"`"
         },
-        "gradientOpacity": {
-          "anyOf": [
-            {
-              "description": "Opacity of the color gradient.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "value": {
+          "description": "The field value to use when the imputation `method` is `\"value\"`."
+        }
+      },
+      "required": [
+        "impute",
+        "key"
+      ],
+      "type": "object"
+    },
+    "InlineData": {
+      "additionalProperties": false,
+      "properties": {
+        "format": {
+          "$ref": "#/definitions/DataFormat",
+          "description": "An object that specifies the format for parsing the data."
         },
-        "gradientStrokeColor": {
-          "anyOf": [
-            {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "name": {
+          "description": "Provide a placeholder name and bind data at runtime.",
+          "type": "string"
         },
-        "gradientStrokeWidth": {
-          "anyOf": [
-            {
-              "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
-              "minimum": 0,
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "values": {
+          "$ref": "#/definitions/InlineDataset",
+          "description": "The full data set, included inline. This can be an array of objects or primitive values, an object, or a string. Arrays of primitive values are ingested as objects with a `data` property. Strings are parsed according to the specified format type."
+        }
+      },
+      "required": [
+        "values"
+      ],
+      "type": "object"
+    },
+    "InlineDataset": {
+      "anyOf": [
+        {
+          "items": {
+            "type": "number"
+          },
+          "type": "array"
         },
-        "gradientThickness": {
-          "anyOf": [
-            {
-              "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.",
-              "minimum": 0,
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        {
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
         },
-        "gradientVerticalMaxLength": {
-          "description": "Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`",
-          "type": "number"
+        {
+          "items": {
+            "type": "boolean"
+          },
+          "type": "array"
         },
-        "gradientVerticalMinLength": {
-          "description": "Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`",
-          "type": "number"
+        {
+          "items": {
+            "type": "object"
+          },
+          "type": "array"
         },
-        "gridAlign": {
+        {
+          "type": "string"
+        },
+        {
+          "type": "object"
+        }
+      ]
+    },
+    "Interpolate": {
+      "enum": [
+        "basis",
+        "basis-open",
+        "basis-closed",
+        "bundle",
+        "cardinal",
+        "cardinal-open",
+        "cardinal-closed",
+        "catmull-rom",
+        "linear",
+        "linear-closed",
+        "monotone",
+        "natural",
+        "step",
+        "step-before",
+        "step-after"
+      ],
+      "type": "string"
+    },
+    "IntervalSelectionConfig": {
+      "additionalProperties": false,
+      "properties": {
+        "clear": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LayoutAlign",
-              "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`."
+              "$ref": "#/definitions/Stream"
             },
             {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "labelAlign": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Align",
-              "description": "The alignment of the legend label, can be left, center, or right."
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "boolean"
             }
-          ]
+          ],
+          "description": "Clears the selection, emptying it of all values. This property can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation."
         },
-        "labelBaseline": {
+        "encodings": {
+          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.",
+          "items": {
+            "$ref": "#/definitions/SingleDefUnitChannel"
+          },
+          "type": "array"
+        },
+        "mark": {
+          "$ref": "#/definitions/BrushConfig",
+          "description": "An interval selection also adds a rectangle mark to depict the extents of the interval. The `mark` property can be used to customize the appearance of the mark.\n\n__See also:__ [`mark` examples](https://vega.github.io/vega-lite/docs/selection.html#mark) in the documentation."
+        },
+        "on": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextBaseline",
-              "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`."
+              "$ref": "#/definitions/Stream"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "string"
             }
+          ],
+          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n\n__See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation."
+        },
+        "resolve": {
+          "$ref": "#/definitions/SelectionResolution",
+          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\nOne of:\n- `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n- `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n- `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n\n__Default value:__ `global`.\n\n__See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation."
+        },
+        "translate": {
+          "description": "When truthy, allows a user to interactively move an interval selection back-and-forth. Can be `true`, `false` (to disable panning), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/) which must include a start and end event to trigger continuous panning. Discrete panning (e.g., pressing the left/right arrow keys) will be supported in future versions.\n\n__Default value:__ `true`, which corresponds to `[mousedown, window:mouseup] > window:mousemove!`. This default allows users to clicks and drags within an interval selection to reposition it.\n\n__See also:__ [`translate` examples](https://vega.github.io/vega-lite/docs/selection.html#translate) in the documentation.",
+          "type": [
+            "string",
+            "boolean"
           ]
         },
-        "labelColor": {
+        "type": {
+          "const": "interval",
+          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n\n- `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n- `\"interval\"` -- to select a continuous range of data values on `drag`.",
+          "type": "string"
+        },
+        "zoom": {
+          "description": "When truthy, allows a user to interactively resize an interval selection. Can be `true`, `false` (to disable zooming), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/). Currently, only `wheel` events are supported, but custom event streams can still be used to specify filters, debouncing, and throttling. Future versions will expand the set of events that can trigger this transformation.\n\n__Default value:__ `true`, which corresponds to `wheel!`. This default allows users to use the mouse wheel to resize an interval selection.\n\n__See also:__ [`zoom` examples](https://vega.github.io/vega-lite/docs/selection.html#zoom) in the documentation.",
+          "type": [
+            "string",
+            "boolean"
+          ]
+        }
+      },
+      "required": [
+        "type"
+      ],
+      "type": "object"
+    },
+    "IntervalSelectionConfigWithoutType": {
+      "additionalProperties": false,
+      "properties": {
+        "clear": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "The color of the legend label, can be in hex color code or regular color name."
+              "$ref": "#/definitions/Stream"
             },
             {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "labelFont": {
-          "anyOf": [
-            {
-              "description": "The font of the legend label.",
               "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "boolean"
             }
-          ]
+          ],
+          "description": "Clears the selection, emptying it of all values. This property can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation."
+        },
+        "encodings": {
+          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.",
+          "items": {
+            "$ref": "#/definitions/SingleDefUnitChannel"
+          },
+          "type": "array"
+        },
+        "mark": {
+          "$ref": "#/definitions/BrushConfig",
+          "description": "An interval selection also adds a rectangle mark to depict the extents of the interval. The `mark` property can be used to customize the appearance of the mark.\n\n__See also:__ [`mark` examples](https://vega.github.io/vega-lite/docs/selection.html#mark) in the documentation."
         },
-        "labelFontSize": {
+        "on": {
           "anyOf": [
             {
-              "description": "The font size of legend label.\n\n__Default value:__ `10`.",
-              "minimum": 0,
-              "type": "number"
+              "$ref": "#/definitions/Stream"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "string"
             }
+          ],
+          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n\n__See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation."
+        },
+        "resolve": {
+          "$ref": "#/definitions/SelectionResolution",
+          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\nOne of:\n- `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n- `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n- `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n\n__Default value:__ `global`.\n\n__See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation."
+        },
+        "translate": {
+          "description": "When truthy, allows a user to interactively move an interval selection back-and-forth. Can be `true`, `false` (to disable panning), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/) which must include a start and end event to trigger continuous panning. Discrete panning (e.g., pressing the left/right arrow keys) will be supported in future versions.\n\n__Default value:__ `true`, which corresponds to `[mousedown, window:mouseup] > window:mousemove!`. This default allows users to clicks and drags within an interval selection to reposition it.\n\n__See also:__ [`translate` examples](https://vega.github.io/vega-lite/docs/selection.html#translate) in the documentation.",
+          "type": [
+            "string",
+            "boolean"
           ]
         },
-        "labelFontStyle": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/FontStyle",
-              "description": "The font style of legend label."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
+        "zoom": {
+          "description": "When truthy, allows a user to interactively resize an interval selection. Can be `true`, `false` (to disable zooming), or a [Vega event stream definition](https://vega.github.io/vega/docs/event-streams/). Currently, only `wheel` events are supported, but custom event streams can still be used to specify filters, debouncing, and throttling. Future versions will expand the set of events that can trigger this transformation.\n\n__Default value:__ `true`, which corresponds to `wheel!`. This default allows users to use the mouse wheel to resize an interval selection.\n\n__See also:__ [`zoom` examples](https://vega.github.io/vega-lite/docs/selection.html#zoom) in the documentation.",
+          "type": [
+            "string",
+            "boolean"
           ]
+        }
+      },
+      "type": "object"
+    },
+    "JoinAggregateFieldDef": {
+      "additionalProperties": false,
+      "properties": {
+        "as": {
+          "$ref": "#/definitions/FieldName",
+          "description": "The output name for the join aggregate operation."
         },
-        "labelFontWeight": {
+        "field": {
+          "$ref": "#/definitions/FieldName",
+          "description": "The data field for which to compute the aggregate function. This can be omitted for functions that do not operate over a field such as `\"count\"`."
+        },
+        "op": {
+          "$ref": "#/definitions/AggregateOp",
+          "description": "The aggregation operation to apply (e.g., `\"sum\"`, `\"average\"` or `\"count\"`). See the list of all supported operations [here](https://vega.github.io/vega-lite/docs/aggregate.html#ops)."
+        }
+      },
+      "required": [
+        "op",
+        "as"
+      ],
+      "type": "object"
+    },
+    "JoinAggregateTransform": {
+      "additionalProperties": false,
+      "properties": {
+        "groupby": {
+          "description": "The data fields for partitioning the data objects into separate groups. If unspecified, all data points will be in a single group.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
+        },
+        "joinaggregate": {
+          "description": "The definition of the fields in the join aggregate, and what calculations to use.",
+          "items": {
+            "$ref": "#/definitions/JoinAggregateFieldDef"
+          },
+          "type": "array"
+        }
+      },
+      "required": [
+        "joinaggregate"
+      ],
+      "type": "object"
+    },
+    "JsonDataFormat": {
+      "additionalProperties": false,
+      "properties": {
+        "parse": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight",
-              "description": "The font weight of legend label."
+              "$ref": "#/definitions/Parse"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
-          ]
+          ],
+          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
         },
-        "labelLimit": {
+        "property": {
+          "description": "The JSON property containing the desired data. This parameter can be used when the loaded JSON file may have surrounding structure or meta-data. For example `\"property\": \"values.features\"` is equivalent to retrieving `json.values.features` from the loaded JSON object.",
+          "type": "string"
+        },
+        "type": {
+          "const": "json",
+          "description": "Type of input data: `\"json\"`, `\"csv\"`, `\"tsv\"`, `\"dsv\"`.\n\n__Default value:__  The default format type is determined by the extension of the file URL. If no extension is detected, `\"json\"` will be used by default.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "LabelOverlap": {
+      "anyOf": [
+        {
+          "type": "boolean"
+        },
+        {
+          "const": "parity",
+          "type": "string"
+        },
+        {
+          "const": "greedy",
+          "type": "string"
+        }
+      ]
+    },
+    "LatLongDef": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/LatLongFieldDef"
+        },
+        {
+          "$ref": "#/definitions/DatumDef"
+        }
+      ]
+    },
+    "LatLongFieldDef": {
+      "additionalProperties": false,
+      "properties": {
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        },
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "bin": {
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+          "type": "null"
+        },
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        },
+        "timeUnit": {
           "anyOf": [
             {
-              "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.",
-              "type": "number"
+              "$ref": "#/definitions/TimeUnit"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TimeUnitParams"
             }
-          ]
+          ],
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
         },
-        "labelOffset": {
+        "title": {
           "anyOf": [
             {
-              "description": "The offset of the legend label.",
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
-          ]
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "labelOpacity": {
+        "type": {
+          "const": "quantitative",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "LayerRepeatMapping": {
+      "additionalProperties": false,
+      "properties": {
+        "column": {
+          "description": "An array of fields to be repeated horizontally.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "layer": {
+          "description": "An array of fields to be repeated as layers.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "row": {
+          "description": "An array of fields to be repeated vertically.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "required": [
+        "layer"
+      ],
+      "type": "object"
+    },
+    "LayerRepeatSpec": {
+      "additionalProperties": false,
+      "properties": {
+        "align": {
           "anyOf": [
             {
-              "description": "Opacity of labels.",
-              "type": "number"
+              "$ref": "#/definitions/LayoutAlign"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/RowCol<LayoutAlign>"
             }
-          ]
+          ],
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
         },
-        "labelOverlap": {
+        "bounds": {
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "enum": [
+            "full",
+            "flush"
+          ],
+          "type": "string"
+        },
+        "center": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LabelOverlap"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/RowCol<boolean>"
             }
           ],
-          "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `\"greedy\"` for `log scales otherwise `true`."
+          "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
         },
-        "labelPadding": {
+        "columns": {
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+          "type": "number"
+        },
+        "data": {
           "anyOf": [
             {
-              "description": "Padding in pixels between the legend and legend labels.",
-              "type": "number"
+              "$ref": "#/definitions/Data"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
-          ]
+          ],
+          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
+        },
+        "description": {
+          "description": "Description of this mark for commenting purpose.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Name of the visualization for later reference.",
+          "type": "string"
+        },
+        "repeat": {
+          "$ref": "#/definitions/LayerRepeatMapping",
+          "description": "Definition for fields to be repeated. One of: 1) An array of fields to be repeated. If `\"repeat\"` is an array, the field can be referred to as `{\"repeat\": \"repeat\"}`. The repeated views are laid out in a wrapped row. You can set the number of columns to control the wrapping. 2) An object that maps `\"row\"` and/or `\"column\"` to the listed fields to be repeated along the particular orientations. The objects `{\"repeat\": \"row\"}` and `{\"repeat\": \"column\"}` can be used to refer to the repeated field respectively."
+        },
+        "resolve": {
+          "$ref": "#/definitions/Resolve",
+          "description": "Scale, axis, and legend resolutions for view composition specifications."
         },
-        "labelSeparation": {
+        "spacing": {
           "anyOf": [
             {
-              "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/RowCol<number>"
             }
-          ]
-        },
-        "layout": {
-          "$ref": "#/definitions/ExprRef"
+          ],
+          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
         },
-        "legendX": {
+        "spec": {
           "anyOf": [
             {
-              "description": "Custom x-position for legend with orient \"none\".",
-              "type": "number"
+              "$ref": "#/definitions/LayerSpec"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/UnitSpecWithFrame"
             }
-          ]
+          ],
+          "description": "A specification of the view that gets repeated."
         },
-        "legendY": {
+        "title": {
           "anyOf": [
             {
-              "description": "Custom y-position for legend with orient \"none\".",
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TitleParams"
             }
-          ]
+          ],
+          "description": "Title for the plot."
         },
-        "offset": {
+        "transform": {
+          "description": "An array of data transformations such as filter and new field calculation.",
+          "items": {
+            "$ref": "#/definitions/Transform"
+          },
+          "type": "array"
+        }
+      },
+      "required": [
+        "repeat",
+        "spec"
+      ],
+      "type": "object"
+    },
+    "LayerSpec": {
+      "additionalProperties": false,
+      "description": "A full layered plot specification, which may contains `encoding` and `projection` properties that will be applied to underlying unit (single-view) specifications.",
+      "properties": {
+        "data": {
           "anyOf": [
             {
-              "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.",
-              "type": "number"
+              "$ref": "#/definitions/Data"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
-          ]
+          ],
+          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
         },
-        "orient": {
-          "$ref": "#/definitions/LegendOrient",
-          "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`"
+        "description": {
+          "description": "Description of this mark for commenting purpose.",
+          "type": "string"
         },
-        "padding": {
+        "encoding": {
+          "$ref": "#/definitions/SharedEncoding",
+          "description": "A shared key-value mapping between encoding channels and definition of fields in the underlying layers."
+        },
+        "height": {
           "anyOf": [
             {
-              "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.",
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "rowPadding": {
-          "anyOf": [
-            {
-              "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.",
-              "type": "number"
+              "const": "container",
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/Step"
             }
-          ]
+          ],
+          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         },
-        "strokeColor": {
+        "layer": {
+          "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.",
+          "items": {
+            "anyOf": [
+              {
+                "$ref": "#/definitions/LayerSpec"
+              },
+              {
+                "$ref": "#/definitions/UnitSpec"
+              }
+            ]
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "Name of the visualization for later reference.",
+          "type": "string"
+        },
+        "projection": {
+          "$ref": "#/definitions/Projection",
+          "description": "An object defining properties of the geographic projection shared by underlying layers."
+        },
+        "resolve": {
+          "$ref": "#/definitions/Resolve",
+          "description": "Scale, axis, and legend resolutions for view composition specifications."
+        },
+        "title": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "Border stroke color for the full legend."
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/TitleParams"
             }
-          ]
+          ],
+          "description": "Title for the plot."
         },
-        "strokeDash": {
+        "transform": {
+          "description": "An array of data transformations such as filter and new field calculation.",
+          "items": {
+            "$ref": "#/definitions/Transform"
+          },
+          "type": "array"
+        },
+        "view": {
+          "$ref": "#/definitions/ViewBackground",
+          "description": "An object defining the view background's fill and stroke.\n\n__Default value:__ none (transparent)"
+        },
+        "width": {
           "anyOf": [
             {
-              "description": "Border stroke dash pattern for the full legend.",
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "const": "container",
+              "type": "string"
+            },
+            {
+              "$ref": "#/definitions/Step"
             }
-          ]
-        },
-        "strokeWidth": {
+          ],
+          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+        }
+      },
+      "required": [
+        "layer"
+      ],
+      "type": "object"
+    },
+    "LayoutAlign": {
+      "enum": [
+        "all",
+        "each",
+        "none"
+      ],
+      "type": "string"
+    },
+    "Legend": {
+      "additionalProperties": false,
+      "description": "Properties of a legend or boolean flag for determining whether to show it.",
+      "properties": {
+        "aria": {
           "anyOf": [
             {
-              "description": "Border stroke width for the full legend.",
-              "type": "number"
+              "description": "A boolean flag indicating if [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) should be included (SVG output only). If `false`, the \"aria-hidden\" attribute will be set on the output SVG group, removing the legend from the ARIA accessibility tree.\n\n__Default value:__ `true`",
+              "type": "boolean"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "symbolBaseFillColor": {
+        "clipHeight": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "Default fill color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"transparent\"`."
+              "description": "The height in pixels to clip symbol legend entries and limit their size.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "symbolBaseStrokeColor": {
+        "columnPadding": {
           "anyOf": [
             {
-              "anyOf": [
-                {
-                  "type": "null"
-                },
-                {
-                  "$ref": "#/definitions/Color"
-                }
-              ],
-              "description": "Default stroke color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"gray\"`."
+              "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "symbolDash": {
+        "columns": {
           "anyOf": [
             {
-              "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
+              "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "symbolDashOffset": {
+        "cornerRadius": {
           "anyOf": [
             {
-              "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
+              "description": "Corner radius for the full legend.",
               "type": "number"
             },
             {
@@ -14274,18 +12856,22 @@
             }
           ]
         },
-        "symbolDirection": {
+        "description": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Orientation",
-              "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for symbol legends.\n\n__Default value:__ `\"vertical\"`."
+              "description": "A text description of this legend for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If the `aria` property is true, for SVG output the [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute) will be set to this description. If the description is unspecified it will be automatically generated.",
+              "type": "string"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "symbolFillColor": {
+        "direction": {
+          "$ref": "#/definitions/Orientation",
+          "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__\n- For top-/bottom-`orient`ed legends, `\"horizontal\"`\n- For left-/right-`orient`ed legends, `\"vertical\"`\n- For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends."
+        },
+        "fillColor": {
           "anyOf": [
             {
               "anyOf": [
@@ -14296,39 +12882,33 @@
                   "$ref": "#/definitions/Color"
                 }
               ],
-              "description": "The color of the legend symbol,"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "symbolLimit": {
-          "anyOf": [
-            {
-              "description": "The maximum number of allowed entries for a symbol legend. Additional entries will be dropped.",
-              "type": "number"
+              "description": "Background fill color for the full legend."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "symbolOffset": {
+        "format": {
           "anyOf": [
             {
-              "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
-              "type": "number"
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "$ref": "#/definitions/Dict"
             }
-          ]
+          ],
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
-        "symbolOpacity": {
+        "formatType": {
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
+          "type": "string"
+        },
+        "gradientLength": {
           "anyOf": [
             {
-              "description": "Opacity of the legend symbols.",
+              "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.",
+              "minimum": 0,
               "type": "number"
             },
             {
@@ -14336,11 +12916,10 @@
             }
           ]
         },
-        "symbolSize": {
+        "gradientOpacity": {
           "anyOf": [
             {
-              "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
-              "minimum": 0,
+              "description": "Opacity of the color gradient.",
               "type": "number"
             },
             {
@@ -14348,7 +12927,7 @@
             }
           ]
         },
-        "symbolStrokeColor": {
+        "gradientStrokeColor": {
           "anyOf": [
             {
               "anyOf": [
@@ -14359,17 +12938,17 @@
                   "$ref": "#/definitions/Color"
                 }
               ],
-              "description": "Stroke color for legend symbols."
+              "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "symbolStrokeWidth": {
+        "gradientStrokeWidth": {
           "anyOf": [
             {
-              "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
+              "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
               "minimum": 0,
               "type": "number"
             },
@@ -14378,66 +12957,52 @@
             }
           ]
         },
-        "symbolType": {
+        "gradientThickness": {
           "anyOf": [
             {
-              "$ref": "#/definitions/SymbolShape",
-              "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`."
+              "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.",
+              "minimum": 0,
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "tickCount": {
+        "gridAlign": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TickCount",
-              "description": "The desired number of tick values for quantitative legends."
+              "$ref": "#/definitions/LayoutAlign",
+              "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "title": {
-          "description": "Set to null to disable title for the axis, legend, or header.",
-          "type": "null"
-        },
-        "titleAlign": {
+        "labelAlign": {
           "anyOf": [
             {
               "$ref": "#/definitions/Align",
-              "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`."
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
-        },
-        "titleAnchor": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/TitleAnchor",
-              "description": "Text anchor position for placing legend titles."
+              "description": "The alignment of the legend label, can be left, center, or right."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "titleBaseline": {
+        "labelBaseline": {
           "anyOf": [
             {
               "$ref": "#/definitions/TextBaseline",
-              "description": "Vertical text baseline for legend titles.  One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the *lineHeight* rather than *fontSize* alone.\n\n__Default value:__ `\"top\"`."
+              "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "titleColor": {
+        "labelColor": {
           "anyOf": [
             {
               "anyOf": [
@@ -14448,17 +13013,21 @@
                   "$ref": "#/definitions/Color"
                 }
               ],
-              "description": "The color of the legend title, can be in hex color code or regular color name."
+              "description": "The color of the legend label, can be in hex color code or regular color name."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "titleFont": {
+        "labelExpr": {
+          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the legend's backing `datum` object.",
+          "type": "string"
+        },
+        "labelFont": {
           "anyOf": [
             {
-              "description": "The font of the legend title.",
+              "description": "The font of the legend label.",
               "type": "string"
             },
             {
@@ -14466,10 +13035,11 @@
             }
           ]
         },
-        "titleFontSize": {
+        "labelFontSize": {
           "anyOf": [
             {
-              "description": "The font size of the legend title.",
+              "description": "The font size of legend label.\n\n__Default value:__ `10`.",
+              "minimum": 0,
               "type": "number"
             },
             {
@@ -14477,33 +13047,32 @@
             }
           ]
         },
-        "titleFontStyle": {
+        "labelFontStyle": {
           "anyOf": [
             {
               "$ref": "#/definitions/FontStyle",
-              "description": "The font style of the legend title."
+              "description": "The font style of legend label."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "titleFontWeight": {
+        "labelFontWeight": {
           "anyOf": [
             {
               "$ref": "#/definitions/FontWeight",
-              "description": "The font weight of the legend title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
+              "description": "The font weight of legend label."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "titleLimit": {
+        "labelLimit": {
           "anyOf": [
             {
-              "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
-              "minimum": 0,
+              "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.",
               "type": "number"
             },
             {
@@ -14511,10 +13080,11 @@
             }
           ]
         },
-        "titleLineHeight": {
+        "labelOffset": {
           "anyOf": [
             {
-              "description": "Line height in pixels for multi-line title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.",
+              "description": "The offset of the legend label.\n\n__Default value:__ `4`.",
+              "minimum": 0,
               "type": "number"
             },
             {
@@ -14522,10 +13092,10 @@
             }
           ]
         },
-        "titleOpacity": {
+        "labelOpacity": {
           "anyOf": [
             {
-              "description": "Opacity of the legend title.",
+              "description": "Opacity of labels.",
               "type": "number"
             },
             {
@@ -14533,21 +13103,21 @@
             }
           ]
         },
-        "titleOrient": {
+        "labelOverlap": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Orient",
-              "description": "Orientation of the legend title."
+              "$ref": "#/definitions/LabelOverlap",
+              "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` (default) or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `true`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "titlePadding": {
+        "labelPadding": {
           "anyOf": [
             {
-              "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
+              "description": "Padding in pixels between the legend and legend labels.",
               "type": "number"
             },
             {
@@ -14555,117 +13125,112 @@
             }
           ]
         },
-        "unselectedOpacity": {
-          "description": "The opacity of unselected legend entries.\n\n__Default value:__ 0.35.",
-          "type": "number"
-        },
-        "zindex": {
+        "labelSeparation": {
           "anyOf": [
             {
-              "description": "The integer z-index indicating the layering of the legend group relative to other axis, mark, and legend groups.",
-              "minimum": 0,
+              "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
-        }
-      },
-      "type": "object"
-    },
-    "LegendOrient": {
-      "enum": [
-        "none",
-        "left",
-        "right",
-        "top",
-        "bottom",
-        "top-left",
-        "top-right",
-        "bottom-left",
-        "bottom-right"
-      ],
-      "type": "string"
-    },
-    "LegendResolveMap": {
-      "additionalProperties": false,
-      "properties": {
-        "angle": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "color": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "fill": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "fillOpacity": {
-          "$ref": "#/definitions/ResolveMode"
-        },
-        "opacity": {
-          "$ref": "#/definitions/ResolveMode"
         },
-        "shape": {
-          "$ref": "#/definitions/ResolveMode"
+        "legendX": {
+          "anyOf": [
+            {
+              "description": "Custom x-position for legend with orient \"none\".",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "size": {
-          "$ref": "#/definitions/ResolveMode"
+        "legendY": {
+          "anyOf": [
+            {
+              "description": "Custom y-position for legend with orient \"none\".",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "stroke": {
-          "$ref": "#/definitions/ResolveMode"
+        "offset": {
+          "anyOf": [
+            {
+              "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "strokeDash": {
-          "$ref": "#/definitions/ResolveMode"
+        "orient": {
+          "$ref": "#/definitions/LegendOrient",
+          "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`"
         },
-        "strokeOpacity": {
-          "$ref": "#/definitions/ResolveMode"
+        "padding": {
+          "anyOf": [
+            {
+              "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "strokeWidth": {
-          "$ref": "#/definitions/ResolveMode"
-        }
-      },
-      "type": "object"
-    },
-    "LegendStreamBinding": {
-      "additionalProperties": false,
-      "properties": {
-        "legend": {
+        "rowPadding": {
           "anyOf": [
             {
-              "type": "string"
+              "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.",
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/Stream"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
-        }
-      },
-      "required": [
-        "legend"
-      ],
-      "type": "object"
-    },
-    "LineConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
+        },
+        "strokeColor": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Align"
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "Border stroke color for the full legend."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n\n__Note:__ Expression reference is *not* supported for range marks."
+          ]
+        },
+        "symbolDash": {
+          "anyOf": [
+            {
+              "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "angle": {
+        "symbolDashOffset": {
           "anyOf": [
             {
-              "description": "The rotation angle of the text, in degrees.",
-              "maximum": 360,
-              "minimum": 0,
+              "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
               "type": "number"
             },
             {
@@ -14673,189 +13238,209 @@
             }
           ]
         },
-        "aria": {
+        "symbolFillColor": {
           "anyOf": [
             {
-              "description": "A boolean flag indicating if [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) should be included (SVG output only). If `false`, the \"aria-hidden\" attribute will be set on the output SVG element, removing the mark item from the ARIA accessibility tree.",
-              "type": "boolean"
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "The color of the legend symbol,"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "ariaRole": {
+        "symbolLimit": {
           "anyOf": [
             {
-              "description": "Sets the type of user interface element of the mark item for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If specified, this property determines the \"role\" attribute. Warning: this property is experimental and may be changed in the future.",
-              "type": "string"
+              "description": "The maximum number of allowed entries for a symbol legend. Additional entries will be dropped.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "ariaRoleDescription": {
+        "symbolOffset": {
           "anyOf": [
             {
-              "description": "A human-readable, author-localized description for the role of the mark item for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If specified, this property determines the \"aria-roledescription\" attribute. Warning: this property is experimental and may be changed in the future.",
-              "type": "string"
+              "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "aspect": {
+        "symbolOpacity": {
           "anyOf": [
             {
-              "description": "Whether to keep aspect ratio of image marks.",
-              "type": "boolean"
+              "description": "Opacity of the legend symbols.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "baseline": {
+        "symbolSize": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextBaseline"
+              "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
+              "minimum": 0,
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n\nFor range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Note:__ Expression reference is *not* supported for range marks."
+          ]
         },
-        "blend": {
+        "symbolStrokeColor": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Blend",
-              "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`"
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "Stroke color for legend symbols."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "color": {
+        "symbolStrokeWidth": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "$ref": "#/definitions/Gradient"
+              "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
+              "minimum": 0,
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          ]
         },
-        "cornerRadius": {
+        "symbolType": {
           "anyOf": [
             {
-              "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
-              "type": "number"
+              "$ref": "#/definitions/SymbolShape",
+              "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "cornerRadiusBottomLeft": {
+        "tickCount": {
           "anyOf": [
             {
-              "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
-              "type": "number"
+              "$ref": "#/definitions/TickCount",
+              "description": "The desired number of tick values for quantitative legends."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "cornerRadiusBottomRight": {
+        "tickMinStep": {
           "anyOf": [
             {
-              "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The minimum desired step between legend ticks, in terms of scale domain values. For example, a value of `1` indicates that ticks should not be less than 1 unit apart. If `tickMinStep` is specified, the `tickCount` value will be adjusted, if necessary, to enforce the minimum step value.\n\n__Default value__: `undefined`"
         },
-        "cornerRadiusTopLeft": {
+        "title": {
           "anyOf": [
             {
-              "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
-              "type": "number"
+              "$ref": "#/definitions/Text"
             },
             {
-              "$ref": "#/definitions/ExprRef"
+              "type": "null"
             }
-          ]
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
-        "cornerRadiusTopRight": {
+        "titleAlign": {
           "anyOf": [
             {
-              "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
-              "type": "number"
+              "$ref": "#/definitions/Align",
+              "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "cursor": {
+        "titleAnchor": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Cursor",
-              "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
+              "$ref": "#/definitions/TitleAnchor",
+              "description": "Text anchor position for placing legend titles."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "description": {
+        "titleBaseline": {
           "anyOf": [
             {
-              "description": "A text description of the mark item for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If specified, this property determines the [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute).",
-              "type": "string"
+              "$ref": "#/definitions/TextBaseline",
+              "description": "Vertical text baseline for legend titles.  One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the *lineHeight* rather than *fontSize* alone.\n\n__Default value:__ `\"top\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "dir": {
+        "titleColor": {
           "anyOf": [
             {
-              "$ref": "#/definitions/TextDirection",
-              "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "The color of the legend title, can be in hex color code or regular color name."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "dx": {
+        "titleFont": {
           "anyOf": [
             {
-              "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-              "type": "number"
+              "description": "The font of the legend title.",
+              "type": "string"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "dy": {
+        "titleFontSize": {
           "anyOf": [
             {
-              "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
+              "description": "The font size of the legend title.",
               "type": "number"
             },
             {
@@ -14863,51 +13448,44 @@
             }
           ]
         },
-        "ellipsis": {
+        "titleFontStyle": {
           "anyOf": [
             {
-              "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-              "type": "string"
+              "$ref": "#/definitions/FontStyle",
+              "description": "The font style of the legend title."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "endAngle": {
+        "titleFontWeight": {
           "anyOf": [
             {
-              "description": "The end angle in radians for arc marks. A value of `0` indicates up (north), increasing values proceed clockwise.",
-              "type": "number"
+              "$ref": "#/definitions/FontWeight",
+              "description": "The font weight of the legend title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "fill": {
+        "titleLimit": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "$ref": "#/definitions/Gradient"
-            },
-            {
-              "type": "null"
+              "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
+              "minimum": 0,
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n\n__Default value:__ (None)"
+          ]
         },
-        "fillOpacity": {
+        "titleLineHeight": {
           "anyOf": [
             {
-              "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-              "maximum": 1,
-              "minimum": 0,
+              "description": "Line height in pixels for multi-line title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.",
               "type": "number"
             },
             {
@@ -14915,114 +13493,149 @@
             }
           ]
         },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
+        "titleOpacity": {
           "anyOf": [
             {
-              "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-              "type": "string"
+              "description": "Opacity of the legend title.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "fontSize": {
+        "titleOrient": {
           "anyOf": [
             {
-              "description": "The font size, in pixels.\n\n__Default value:__ `11`",
-              "minimum": 0,
-              "type": "number"
+              "$ref": "#/definitions/Orient",
+              "description": "Orientation of the legend title."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "fontStyle": {
+        "titlePadding": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontStyle",
-              "description": "The font style (e.g., `\"italic\"`)."
+              "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "fontWeight": {
+        "type": {
+          "description": "The type of the legend. Use `\"symbol\"` to create a discrete legend and `\"gradient\"` for a continuous color gradient.\n\n__Default value:__ `\"gradient\"` for non-binned quantitative fields and temporal fields; `\"symbol\"` otherwise.",
+          "enum": [
+            "symbol",
+            "gradient"
+          ],
+          "type": "string"
+        },
+        "values": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FontWeight",
-              "description": "The font weight. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
+            },
+            {
+              "items": {
+                "type": "string"
+              },
+              "type": "array"
+            },
+            {
+              "items": {
+                "type": "boolean"
+              },
+              "type": "array"
+            },
+            {
+              "items": {
+                "$ref": "#/definitions/DateTime"
+              },
+              "type": "array"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Explicitly set the visible legend values."
         },
-        "height": {
+        "zindex": {
+          "description": "A non-negative integer indicating the z-index of the legend. If zindex is 0, legend should be drawn behind all chart elements. To put them in front, use zindex = 1.",
+          "minimum": 0,
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
+    "LegendBinding": {
+      "anyOf": [
+        {
+          "const": "legend",
+          "type": "string"
+        },
+        {
+          "$ref": "#/definitions/LegendStreamBinding"
+        }
+      ]
+    },
+    "LegendConfig": {
+      "additionalProperties": false,
+      "properties": {
+        "aria": {
           "anyOf": [
             {
-              "description": "Height of the marks.",
-              "type": "number"
+              "description": "A boolean flag indicating if [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) should be included (SVG output only). If `false`, the \"aria-hidden\" attribute will be set on the output SVG group, removing the legend from the ARIA accessibility tree.\n\n__Default value:__ `true`",
+              "type": "boolean"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "href": {
+        "clipHeight": {
           "anyOf": [
             {
-              "$ref": "#/definitions/URI",
-              "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
+              "description": "The height in pixels to clip symbol legend entries and limit their size.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "innerRadius": {
+        "columnPadding": {
           "anyOf": [
             {
+              "description": "The horizontal padding in pixels between symbol legend entries.\n\n__Default value:__ `10`.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          ]
         },
-        "interpolate": {
+        "columns": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The number of columns in which to arrange symbol legend entries. A value of `0` or lower indicates a single row with one column per entry.",
+              "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
-          "enum": [
-            "filter",
-            null
-          ],
-          "type": [
-            "string",
-            "null"
-          ]
-        },
-        "limit": {
+        "cornerRadius": {
           "anyOf": [
             {
-              "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit",
+              "description": "Corner radius for the full legend.",
               "type": "number"
             },
             {
@@ -15030,10 +13643,10 @@
             }
           ]
         },
-        "lineBreak": {
+        "description": {
           "anyOf": [
             {
-              "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.",
+              "description": "A text description of this legend for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If the `aria` property is true, for SVG output the [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute) will be set to this description. If the description is unspecified it will be automatically generated.",
               "type": "string"
             },
             {
@@ -15041,56 +13654,66 @@
             }
           ]
         },
-        "lineHeight": {
+        "direction": {
+          "$ref": "#/definitions/Orientation",
+          "description": "The direction of the legend, one of `\"vertical\"` or `\"horizontal\"`.\n\n__Default value:__\n- For top-/bottom-`orient`ed legends, `\"horizontal\"`\n- For left-/right-`orient`ed legends, `\"vertical\"`\n- For top/bottom-left/right-`orient`ed legends, `\"horizontal\"` for gradient legends and `\"vertical\"` for symbol legends."
+        },
+        "disable": {
+          "description": "Disable legend by default",
+          "type": "boolean"
+        },
+        "fillColor": {
           "anyOf": [
             {
-              "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
-              "type": "number"
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "Background fill color for the full legend."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "opacity": {
+        "gradientDirection": {
           "anyOf": [
             {
-              "type": "number"
+              "$ref": "#/definitions/Orientation",
+              "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for gradient legends.\n\n__Default value:__ `\"vertical\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
           ]
         },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+        "gradientHorizontalMaxLength": {
+          "description": "Max legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`",
+          "type": "number"
         },
-        "outerRadius": {
+        "gradientHorizontalMinLength": {
+          "description": "Min legend length for a horizontal gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`",
+          "type": "number"
+        },
+        "gradientLabelLimit": {
           "anyOf": [
             {
+              "description": "The maximum allowed length in pixels of color ramp gradient labels.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          ]
         },
-        "padAngle": {
+        "gradientLabelOffset": {
           "anyOf": [
             {
-              "description": "The angular padding applied to sides of the arc, in radians.",
+              "description": "Vertical offset in pixels for color ramp gradient labels.\n\n__Default value:__ `2`.",
               "type": "number"
             },
             {
@@ -15098,88 +13721,64 @@
             }
           ]
         },
-        "point": {
-          "anyOf": [
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/OverlayMarkDef"
-            },
-            {
-              "const": "transparent",
-              "type": "string"
-            }
-          ],
-          "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`."
-        },
-        "radius": {
+        "gradientLength": {
           "anyOf": [
             {
+              "description": "The length in pixels of the primary axis of a color gradient. This value corresponds to the height of a vertical gradient or the width of a horizontal gradient.\n\n__Default value:__ `200`.",
+              "minimum": 0,
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          ]
         },
-        "radius2": {
+        "gradientOpacity": {
           "anyOf": [
             {
+              "description": "Opacity of the color gradient.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          ]
         },
-        "shape": {
+        "gradientStrokeColor": {
           "anyOf": [
             {
               "anyOf": [
                 {
-                  "$ref": "#/definitions/SymbolShape"
+                  "type": "null"
                 },
                 {
-                  "type": "string"
+                  "$ref": "#/definitions/Color"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "The color of the gradient stroke, can be in hex color code or regular color name.\n\n__Default value:__ `\"lightGray\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "size": {
+        "gradientStrokeWidth": {
           "anyOf": [
             {
+              "description": "The width of the gradient stroke, in pixels.\n\n__Default value:__ `0`.",
+              "minimum": 0,
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
-          "minimum": 0
-        },
-        "smooth": {
-          "anyOf": [
-            {
-              "description": "A boolean flag (default true) indicating if the image should be smoothed when resized. If false, individual pixels should be scaled directly rather than interpolated with smoothing. For SVG rendering, this option may not work in some browsers due to lack of standardization.",
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
           ]
         },
-        "startAngle": {
+        "gradientThickness": {
           "anyOf": [
             {
-              "description": "The start angle in radians for arc marks. A value of `0` indicates up (north), increasing values proceed clockwise.",
+              "description": "The thickness in pixels of the color gradient. This value corresponds to the width of a vertical gradient or the height of a horizontal gradient.\n\n__Default value:__ `16`.",
+              "minimum": 0,
               "type": "number"
             },
             {
@@ -15187,109 +13786,80 @@
             }
           ]
         },
-        "stroke": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Color"
-            },
-            {
-              "$ref": "#/definitions/Gradient"
-            },
-            {
-              "type": "null"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StrokeCap",
-              "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "gradientVerticalMaxLength": {
+          "description": "Max legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `200`",
+          "type": "number"
         },
-        "strokeDash": {
-          "anyOf": [
-            {
-              "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ]
+        "gradientVerticalMinLength": {
+          "description": "Min legend length for a vertical gradient when `config.legend.gradientLength` is undefined.\n\n__Default value:__ `100`",
+          "type": "number"
         },
-        "strokeDashOffset": {
+        "gridAlign": {
           "anyOf": [
             {
-              "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-              "type": "number"
+              "$ref": "#/definitions/LayoutAlign",
+              "description": "The alignment to apply to symbol legends rows and columns. The supported string values are `\"all\"`, `\"each\"` (the default), and `none`. For more information, see the [grid layout documentation](https://vega.github.io/vega/docs/layout).\n\n__Default value:__ `\"each\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "strokeJoin": {
+        "labelAlign": {
           "anyOf": [
             {
-              "$ref": "#/definitions/StrokeJoin",
-              "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
+              "$ref": "#/definitions/Align",
+              "description": "The alignment of the legend label, can be left, center, or right."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "strokeMiterLimit": {
+        "labelBaseline": {
           "anyOf": [
             {
-              "description": "The miter limit at which to bevel a line join.",
-              "type": "number"
+              "$ref": "#/definitions/TextBaseline",
+              "description": "The position of the baseline of legend label, can be `\"top\"`, `\"middle\"`, `\"bottom\"`, or `\"alphabetic\"`.\n\n__Default value:__ `\"middle\"`."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "strokeOffset": {
+        "labelColor": {
           "anyOf": [
             {
-              "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.",
-              "type": "number"
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "The color of the legend label, can be in hex color code or regular color name."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "strokeOpacity": {
+        "labelFont": {
           "anyOf": [
             {
-              "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-              "maximum": 1,
-              "minimum": 0,
-              "type": "number"
+              "description": "The font of the legend label.",
+              "type": "string"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "strokeWidth": {
+        "labelFontSize": {
           "anyOf": [
             {
-              "description": "The stroke width, in pixels.",
+              "description": "The font size of legend label.\n\n__Default value:__ `10`.",
               "minimum": 0,
               "type": "number"
             },
@@ -15298,98 +13868,77 @@
             }
           ]
         },
-        "tension": {
+        "labelFontStyle": {
           "anyOf": [
             {
-              "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-              "type": "number"
+              "$ref": "#/definitions/FontStyle",
+              "description": "The font style of legend label."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "text": {
+        "labelFontWeight": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text",
-              "description": "Placeholder text if the `text` channel is not specified"
+              "$ref": "#/definitions/FontWeight",
+              "description": "The font weight of legend label."
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "theta": {
+        "labelLimit": {
           "anyOf": [
             {
+              "description": "Maximum allowed pixel width of legend tick labels.\n\n__Default value:__ `160`.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "- For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n\n- For text marks, polar coordinate angle in radians.",
-          "maximum": 360,
-          "minimum": 0
+          ]
         },
-        "theta2": {
+        "labelOffset": {
           "anyOf": [
             {
+              "description": "The offset of the legend label.\n\n__Default value:__ `4`.",
+              "minimum": 0,
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
-        },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
-        "timeUnitBandPosition": {
-          "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
-          "type": "number"
+          ]
         },
-        "tooltip": {
+        "labelOpacity": {
           "anyOf": [
             {
+              "description": "Opacity of labels.",
               "type": "number"
             },
-            {
-              "type": "string"
-            },
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
             {
               "$ref": "#/definitions/ExprRef"
-            },
-            {
-              "type": "null"
             }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          ]
         },
-        "url": {
+        "labelOverlap": {
           "anyOf": [
             {
-              "$ref": "#/definitions/URI",
-              "description": "The URL of the image file for image marks."
+              "$ref": "#/definitions/LabelOverlap"
             },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The strategy to use for resolving overlap of labels in gradient legends. If `false`, no overlap reduction is attempted. If set to `true` or `\"parity\"`, a strategy of removing every other label is used. If set to `\"greedy\"`, a linear scan of the labels is performed, removing any label that overlaps with the last visible label (this often works better for log-scaled axes).\n\n__Default value:__ `\"greedy\"` for `log scales otherwise `true`."
         },
-        "width": {
+        "labelPadding": {
           "anyOf": [
             {
-              "description": "Width of the marks.",
+              "description": "Padding in pixels between the legend and legend labels.",
               "type": "number"
             },
             {
@@ -15397,823 +13946,556 @@
             }
           ]
         },
-        "x": {
+        "labelSeparation": {
           "anyOf": [
             {
+              "description": "The minimum separation that must be between label bounding boxes for them to be considered non-overlapping (default `0`). This property is ignored if *labelOverlap* resolution is not enabled.",
               "type": "number"
             },
-            {
-              "const": "width",
-              "type": "string"
-            },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+          ]
         },
-        "x2": {
+        "layout": {
+          "$ref": "#/definitions/ExprRef"
+        },
+        "legendX": {
           "anyOf": [
             {
+              "description": "Custom x-position for legend with orient \"none\".",
               "type": "number"
             },
-            {
-              "const": "width",
-              "type": "string"
-            },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+          ]
         },
-        "y": {
+        "legendY": {
           "anyOf": [
             {
+              "description": "Custom y-position for legend with orient \"none\".",
               "type": "number"
             },
-            {
-              "const": "height",
-              "type": "string"
-            },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
+          ]
         },
-        "y2": {
+        "offset": {
           "anyOf": [
             {
+              "description": "The offset in pixels by which to displace the legend from the data rectangle and axes.\n\n__Default value:__ `18`.",
               "type": "number"
             },
-            {
-              "const": "height",
-              "type": "string"
-            },
             {
               "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
-        }
-      },
-      "type": "object"
-    },
-    "LinearGradient": {
-      "additionalProperties": false,
-      "properties": {
-        "gradient": {
-          "const": "linear",
-          "description": "The type of gradient. Use `\"linear\"` for a linear gradient.",
-          "type": "string"
-        },
-        "id": {
-          "type": "string"
-        },
-        "stops": {
-          "description": "An array of gradient stops defining the gradient color sequence.",
-          "items": {
-            "$ref": "#/definitions/GradientStop"
-          },
-          "type": "array"
-        },
-        "x1": {
-          "description": "The starting x-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "x2": {
-          "description": "The ending x-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `1`",
-          "type": "number"
+          ]
         },
-        "y1": {
-          "description": "The starting y-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`",
-          "type": "number"
+        "orient": {
+          "$ref": "#/definitions/LegendOrient",
+          "description": "The orientation of the legend, which determines how the legend is positioned within the scene. One of `\"left\"`, `\"right\"`, `\"top\"`, `\"bottom\"`, `\"top-left\"`, `\"top-right\"`, `\"bottom-left\"`, `\"bottom-right\"`, `\"none\"`.\n\n__Default value:__ `\"right\"`"
         },
-        "y2": {
-          "description": "The ending y-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`",
-          "type": "number"
-        }
-      },
-      "required": [
-        "gradient",
-        "stops"
-      ],
-      "type": "object"
-    },
-    "LocalMultiTimeUnit": {
-      "enum": [
-        "yearquarter",
-        "yearquartermonth",
-        "yearmonth",
-        "yearmonthdate",
-        "yearmonthdatehours",
-        "yearmonthdatehoursminutes",
-        "yearmonthdatehoursminutesseconds",
-        "yearweek",
-        "yearweekday",
-        "yearweekdayhours",
-        "yearweekdayhoursminutes",
-        "yearweekdayhoursminutesseconds",
-        "yeardayofyear",
-        "quartermonth",
-        "monthdate",
-        "monthdatehours",
-        "monthdatehoursminutes",
-        "monthdatehoursminutesseconds",
-        "weekday",
-        "weeksdayhours",
-        "weekdayhoursminutes",
-        "weekdayhoursminutesseconds",
-        "dayhours",
-        "dayhoursminutes",
-        "dayhoursminutesseconds",
-        "hoursminutes",
-        "hoursminutesseconds",
-        "minutesseconds",
-        "secondsmilliseconds"
-      ],
-      "type": "string"
-    },
-    "LocalSingleTimeUnit": {
-      "enum": [
-        "year",
-        "quarter",
-        "month",
-        "week",
-        "day",
-        "dayofyear",
-        "date",
-        "hours",
-        "minutes",
-        "seconds",
-        "milliseconds"
-      ],
-      "type": "string"
-    },
-    "LoessTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
-          "description": "The output field names for the smoothed points generated by the loess transform.\n\n__Default value:__ The field names of the input x and y values.",
-          "items": [
+        "padding": {
+          "anyOf": [
             {
-              "$ref": "#/definitions/FieldName"
+              "description": "The padding between the border and content of the legend group.\n\n__Default value:__ `0`.",
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/FieldName"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "maxItems": 2,
-          "minItems": 2,
-          "type": "array"
-        },
-        "bandwidth": {
-          "description": "A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n\n__Default value:__ `0.3`",
-          "type": "number"
-        },
-        "groupby": {
-          "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "loess": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field of the dependent variable to smooth."
-        },
-        "on": {
-          "$ref": "#/definitions/FieldName",
-          "description": "The data field of the independent variable to use a predictor."
-        }
-      },
-      "required": [
-        "loess",
-        "on"
-      ],
-      "type": "object"
-    },
-    "LogicalAnd<Predicate>": {
-      "additionalProperties": false,
-      "properties": {
-        "and": {
-          "items": {
-            "$ref": "#/definitions/PredicateComposition"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "and"
-      ],
-      "type": "object"
-    },
-    "SelectionAnd": {
-      "additionalProperties": false,
-      "properties": {
-        "and": {
-          "items": {
-            "$ref": "#/definitions/SelectionComposition"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "and"
-      ],
-      "type": "object"
-    },
-    "PredicateComposition": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/LogicalNot<Predicate>"
+          ]
         },
-        {
-          "$ref": "#/definitions/LogicalAnd<Predicate>"
+        "rowPadding": {
+          "anyOf": [
+            {
+              "description": "The vertical padding in pixels between symbol legend entries.\n\n__Default value:__ `2`.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        {
-          "$ref": "#/definitions/LogicalOr<Predicate>"
+        "strokeColor": {
+          "anyOf": [
+            {
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "Border stroke color for the full legend."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        {
-          "$ref": "#/definitions/Predicate"
-        }
-      ]
-    },
-    "SelectionComposition": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SelectionNot"
+        "strokeDash": {
+          "anyOf": [
+            {
+              "description": "Border stroke dash pattern for the full legend.",
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        {
-          "$ref": "#/definitions/SelectionAnd"
+        "strokeWidth": {
+          "anyOf": [
+            {
+              "description": "Border stroke width for the full legend.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        {
-          "$ref": "#/definitions/SelectionOr"
+        "symbolBaseFillColor": {
+          "anyOf": [
+            {
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "Default fill color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"transparent\"`."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        {
-          "type": "string"
-        }
-      ]
-    },
-    "LogicalNot<Predicate>": {
-      "additionalProperties": false,
-      "properties": {
-        "not": {
-          "$ref": "#/definitions/PredicateComposition"
-        }
-      },
-      "required": [
-        "not"
-      ],
-      "type": "object"
-    },
-    "SelectionNot": {
-      "additionalProperties": false,
-      "properties": {
-        "not": {
-          "$ref": "#/definitions/SelectionComposition"
-        }
-      },
-      "required": [
-        "not"
-      ],
-      "type": "object"
-    },
-    "LogicalOr<Predicate>": {
-      "additionalProperties": false,
-      "properties": {
-        "or": {
-          "items": {
-            "$ref": "#/definitions/PredicateComposition"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "or"
-      ],
-      "type": "object"
-    },
-    "SelectionOr": {
-      "additionalProperties": false,
-      "properties": {
-        "or": {
-          "items": {
-            "$ref": "#/definitions/SelectionComposition"
-          },
-          "type": "array"
-        }
-      },
-      "required": [
-        "or"
-      ],
-      "type": "object"
-    },
-    "LookupData": {
-      "additionalProperties": false,
-      "properties": {
-        "data": {
-          "$ref": "#/definitions/Data",
-          "description": "Secondary data source to lookup in."
+        "symbolBaseStrokeColor": {
+          "anyOf": [
+            {
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "Default stroke color for legend symbols. Only applied if there is no `\"fill\"` scale color encoding for the legend.\n\n__Default value:__ `\"gray\"`."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "fields": {
-          "description": "Fields in foreign data or selection to lookup. If not specified, the entire object is queried.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
+        "symbolDash": {
+          "anyOf": [
+            {
+              "description": "An array of alternating [stroke, space] lengths for dashed symbol strokes.",
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "key": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Key in data to lookup."
-        }
-      },
-      "required": [
-        "data",
-        "key"
-      ],
-      "type": "object"
-    },
-    "LookupSelection": {
-      "additionalProperties": false,
-      "properties": {
-        "fields": {
-          "description": "Fields in foreign data or selection to lookup. If not specified, the entire object is queried.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
+        "symbolDashOffset": {
+          "anyOf": [
+            {
+              "description": "The pixel offset at which to start drawing with the symbol stroke dash array.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "key": {
-          "$ref": "#/definitions/FieldName",
-          "description": "Key in data to lookup."
+        "symbolDirection": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Orientation",
+              "description": "The default direction (`\"horizontal\"` or `\"vertical\"`) for symbol legends.\n\n__Default value:__ `\"vertical\"`."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "selection": {
-          "description": "Selection name to look up.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "key",
-        "selection"
-      ],
-      "type": "object"
-    },
-    "LookupTransform": {
-      "additionalProperties": false,
-      "properties": {
-        "as": {
+        "symbolFillColor": {
+          "anyOf": [
+            {
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "The color of the legend symbol,"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "symbolLimit": {
+          "anyOf": [
+            {
+              "description": "The maximum number of allowed entries for a symbol legend. Additional entries will be dropped.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "symbolOffset": {
           "anyOf": [
             {
-              "$ref": "#/definitions/FieldName"
+              "description": "Horizontal pixel offset for legend symbols.\n\n__Default value:__ `0`.",
+              "type": "number"
             },
             {
-              "items": {
-                "$ref": "#/definitions/FieldName"
-              },
-              "type": "array"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The output fields on which to store the looked up data values.\n\nFor data lookups, this property may be left blank if `from.fields` has been specified (those field names will be used); if `from.fields` has not been specified, `as` must be a string.\n\nFor selection lookups, this property is optional: if unspecified, looked up values will be stored under a property named for the selection; and if specified, it must correspond to `from.fields`."
-        },
-        "default": {
-          "description": "The default value to use if lookup fails.\n\n__Default value:__ `null`",
-          "type": "string"
+          ]
         },
-        "from": {
+        "symbolOpacity": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LookupData"
+              "description": "Opacity of the legend symbols.",
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/LookupSelection"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Data source or selection for secondary data reference."
-        },
-        "lookup": {
-          "description": "Key in primary data source.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "lookup",
-        "from"
-      ],
-      "type": "object"
-    },
-    "Mark": {
-      "description": "All types of primitive marks.",
-      "enum": [
-        "arc",
-        "area",
-        "bar",
-        "image",
-        "line",
-        "point",
-        "rect",
-        "rule",
-        "text",
-        "tick",
-        "trail",
-        "circle",
-        "square",
-        "geoshape"
-      ],
-      "type": "string"
-    },
-    "MarkConfig<>": {
-      "additionalProperties": false,
-      "properties": {
-        "align": {
-          "$ref": "#/definitions/Align",
-          "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n\n__Note:__ Expression reference is *not* supported for range marks."
-        },
-        "angle": {
-          "description": "The rotation angle of the text, in degrees.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
-        },
-        "aria": {
-          "description": "A boolean flag indicating if [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) should be included (SVG output only). If `false`, the \"aria-hidden\" attribute will be set on the output SVG element, removing the mark item from the ARIA accessibility tree.",
-          "type": "boolean"
-        },
-        "ariaRole": {
-          "description": "Sets the type of user interface element of the mark item for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If specified, this property determines the \"role\" attribute. Warning: this property is experimental and may be changed in the future.",
-          "type": "string"
-        },
-        "ariaRoleDescription": {
-          "description": "A human-readable, author-localized description for the role of the mark item for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If specified, this property determines the \"aria-roledescription\" attribute. Warning: this property is experimental and may be changed in the future.",
-          "type": "string"
-        },
-        "aspect": {
-          "description": "Whether to keep aspect ratio of image marks.",
-          "type": "boolean"
-        },
-        "baseline": {
-          "$ref": "#/definitions/TextBaseline",
-          "description": "For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n\nFor range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Note:__ Expression reference is *not* supported for range marks."
-        },
-        "blend": {
-          "$ref": "#/definitions/Blend",
-          "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`"
+          ]
         },
-        "color": {
+        "symbolSize": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
+              "description": "The size of the legend symbol, in pixels.\n\n__Default value:__ `100`.",
+              "minimum": 0,
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/Gradient"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
-        },
-        "cornerRadius": {
-          "description": "The radius in pixels of rounded rectangles or arcs' corners.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cornerRadiusBottomLeft": {
-          "description": "The radius in pixels of rounded rectangles' bottom left corner.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cornerRadiusBottomRight": {
-          "description": "The radius in pixels of rounded rectangles' bottom right corner.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cornerRadiusTopLeft": {
-          "description": "The radius in pixels of rounded rectangles' top right corner.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cornerRadiusTopRight": {
-          "description": "The radius in pixels of rounded rectangles' top left corner.\n\n__Default value:__ `0`",
-          "type": "number"
-        },
-        "cursor": {
-          "$ref": "#/definitions/Cursor",
-          "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
-        },
-        "description": {
-          "description": "A text description of the mark item for [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) (SVG output only). If specified, this property determines the [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute).",
-          "type": "string"
-        },
-        "dir": {
-          "$ref": "#/definitions/TextDirection",
-          "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
-        },
-        "dx": {
-          "description": "The horizontal offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "dy": {
-          "description": "The vertical offset, in pixels, between the text label and its anchor point. The offset is applied after rotation by the _angle_ property.",
-          "type": "number"
-        },
-        "ellipsis": {
-          "description": "The ellipsis string for text truncated in response to the limit parameter.\n\n__Default value:__ `\"…\"`",
-          "type": "string"
-        },
-        "endAngle": {
-          "description": "The end angle in radians for arc marks. A value of `0` indicates up (north), increasing values proceed clockwise.",
-          "type": "number"
+          ]
         },
-        "fill": {
+        "symbolStrokeColor": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "Stroke color for legend symbols."
             },
             {
-              "$ref": "#/definitions/Gradient"
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "symbolStrokeWidth": {
+          "anyOf": [
+            {
+              "description": "The width of the symbol's stroke.\n\n__Default value:__ `1.5`.",
+              "minimum": 0,
+              "type": "number"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n\n__Default value:__ (None)"
-        },
-        "fillOpacity": {
-          "description": "The fill opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "filled": {
-          "description": "Whether the mark's color should be used as fill color instead of stroke color.\n\n__Default value:__ `false` for all `point`, `line`, and `rule` marks as well as `geoshape` marks for [`graticule`](https://vega.github.io/vega-lite/docs/data.html#graticule) data sources; otherwise, `true`.\n\n__Note:__ This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).",
-          "type": "boolean"
-        },
-        "font": {
-          "description": "The typeface to set the text in (e.g., `\"Helvetica Neue\"`).",
-          "type": "string"
-        },
-        "fontSize": {
-          "description": "The font size, in pixels.\n\n__Default value:__ `11`",
-          "minimum": 0,
-          "type": "number"
-        },
-        "fontStyle": {
-          "$ref": "#/definitions/FontStyle",
-          "description": "The font style (e.g., `\"italic\"`)."
-        },
-        "fontWeight": {
-          "$ref": "#/definitions/FontWeight",
-          "description": "The font weight. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
-        },
-        "height": {
-          "description": "Height of the marks.",
-          "type": "number"
-        },
-        "href": {
-          "$ref": "#/definitions/URI",
-          "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
-        },
-        "innerRadius": {
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.",
-          "type": "number"
-        },
-        "interpolate": {
-          "$ref": "#/definitions/Interpolate",
-          "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
-        },
-        "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
-          "enum": [
-            "filter",
-            null
-          ],
-          "type": [
-            "string",
-            "null"
           ]
         },
-        "limit": {
-          "description": "The maximum length of the text mark in pixels. The text value will be automatically truncated if the rendered size exceeds the limit.\n\n__Default value:__ `0` -- indicating no limit",
-          "type": "number"
-        },
-        "lineBreak": {
-          "description": "A delimiter, such as a newline character, upon which to break text strings into multiple lines. This property is ignored if the text is array-valued.",
-          "type": "string"
-        },
-        "lineHeight": {
-          "description": "The line height in pixels (the spacing between subsequent lines of text) for multi-line text marks.",
-          "type": "number"
-        },
-        "opacity": {
-          "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "order": {
-          "description": "For line and trail marks, this `order` property can be set to `null` or `false` to make the lines use the original order in the data sources.",
-          "type": [
-            "null",
-            "boolean"
+        "symbolType": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/SymbolShape",
+              "description": "The symbol shape. One of the plotting shapes `circle` (default), `square`, `cross`, `diamond`, `triangle-up`, `triangle-down`, `triangle-right`, or `triangle-left`, the line symbol `stroke`, or one of the centered directional shapes `arrow`, `wedge`, or `triangle`. Alternatively, a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) can be provided. For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.\n\n__Default value:__ `\"circle\"`."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
           ]
         },
-        "orient": {
-          "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
-        },
-        "outerRadius": {
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.",
-          "type": "number"
-        },
-        "padAngle": {
-          "description": "The angular padding applied to sides of the arc, in radians.",
-          "type": "number"
-        },
-        "radius": {
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.",
-          "type": "number"
-        },
-        "radius2": {
-          "description": "The secondary (inner) radius in pixels of arc marks.",
-          "type": "number"
+        "tickCount": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/TickCount",
+              "description": "The desired number of tick values for quantitative legends."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "shape": {
+        "title": {
+          "description": "Set to null to disable title for the axis, legend, or header.",
+          "type": "null"
+        },
+        "titleAlign": {
           "anyOf": [
             {
-              "$ref": "#/definitions/SymbolShape"
+              "$ref": "#/definitions/Align",
+              "description": "Horizontal text alignment for legend titles.\n\n__Default value:__ `\"left\"`."
             },
             {
-              "type": "string"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
-        },
-        "size": {
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "smooth": {
-          "description": "A boolean flag (default true) indicating if the image should be smoothed when resized. If false, individual pixels should be scaled directly rather than interpolated with smoothing. For SVG rendering, this option may not work in some browsers due to lack of standardization.",
-          "type": "boolean"
-        },
-        "startAngle": {
-          "description": "The start angle in radians for arc marks. A value of `0` indicates up (north), increasing values proceed clockwise.",
-          "type": "number"
+          ]
         },
-        "stroke": {
+        "titleAnchor": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Color"
+              "$ref": "#/definitions/TitleAnchor",
+              "description": "Text anchor position for placing legend titles."
             },
             {
-              "$ref": "#/definitions/Gradient"
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "titleBaseline": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/TextBaseline",
+              "description": "Vertical text baseline for legend titles.  One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, or `\"line-bottom\"`. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the *lineHeight* rather than *fontSize* alone.\n\n__Default value:__ `\"top\"`."
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n\n__Default value:__ (None)"
-        },
-        "strokeCap": {
-          "$ref": "#/definitions/StrokeCap",
-          "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
-        },
-        "strokeDash": {
-          "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
-        },
-        "strokeDashOffset": {
-          "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
-          "type": "number"
-        },
-        "strokeJoin": {
-          "$ref": "#/definitions/StrokeJoin",
-          "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
-        },
-        "strokeMiterLimit": {
-          "description": "The miter limit at which to bevel a line join.",
-          "type": "number"
-        },
-        "strokeOffset": {
-          "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.",
-          "type": "number"
-        },
-        "strokeOpacity": {
-          "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-          "maximum": 1,
-          "minimum": 0,
-          "type": "number"
-        },
-        "strokeWidth": {
-          "description": "The stroke width, in pixels.",
-          "minimum": 0,
-          "type": "number"
-        },
-        "tension": {
-          "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
-          "type": "number"
+          ]
         },
-        "text": {
-          "$ref": "#/definitions/Text",
-          "description": "Placeholder text if the `text` channel is not specified"
+        "titleColor": {
+          "anyOf": [
+            {
+              "anyOf": [
+                {
+                  "type": "null"
+                },
+                {
+                  "$ref": "#/definitions/Color"
+                }
+              ],
+              "description": "The color of the legend title, can be in hex color code or regular color name."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "theta": {
-          "description": "- For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n\n- For text marks, polar coordinate angle in radians.",
-          "maximum": 360,
-          "minimum": 0,
-          "type": "number"
+        "titleFont": {
+          "anyOf": [
+            {
+              "description": "The font of the legend title.",
+              "type": "string"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "theta2": {
-          "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise.",
-          "type": "number"
+        "titleFontSize": {
+          "anyOf": [
+            {
+              "description": "The font size of the legend title.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
+        "titleFontStyle": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/FontStyle",
+              "description": "The font style of the legend title."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "timeUnitBandPosition": {
-          "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
-          "type": "number"
+        "titleFontWeight": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/FontWeight",
+              "description": "The font weight of the legend title. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "tooltip": {
+        "titleLimit": {
           "anyOf": [
             {
+              "description": "Maximum allowed pixel width of legend titles.\n\n__Default value:__ `180`.",
+              "minimum": 0,
               "type": "number"
             },
             {
-              "type": "string"
-            },
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "titleLineHeight": {
+          "anyOf": [
             {
-              "type": "boolean"
+              "description": "Line height in pixels for multi-line title text or title text with `\"line-top\"` or `\"line-bottom\"` baseline.",
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/TooltipContent"
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "titleOpacity": {
+          "anyOf": [
+            {
+              "description": "Opacity of the legend title.",
+              "type": "number"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
-        },
-        "url": {
-          "$ref": "#/definitions/URI",
-          "description": "The URL of the image file for image marks."
+          ]
         },
-        "width": {
-          "description": "Width of the marks.",
-          "type": "number"
+        "titleOrient": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Orient",
+              "description": "Orientation of the legend title."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
-        "x": {
+        "titlePadding": {
           "anyOf": [
             {
+              "description": "The padding, in pixels, between title and legend.\n\n__Default value:__ `5`.",
               "type": "number"
             },
             {
-              "const": "width",
-              "type": "string"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+          ]
         },
-        "x2": {
+        "unselectedOpacity": {
+          "description": "The opacity of unselected legend entries.\n\n__Default value:__ 0.35.",
+          "type": "number"
+        },
+        "zindex": {
           "anyOf": [
             {
+              "description": "The integer z-index indicating the layering of the legend group relative to other axis, mark, and legend groups.",
+              "minimum": 0,
               "type": "number"
             },
             {
-              "const": "width",
-              "type": "string"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+          ]
+        }
+      },
+      "type": "object"
+    },
+    "LegendOrient": {
+      "enum": [
+        "none",
+        "left",
+        "right",
+        "top",
+        "bottom",
+        "top-left",
+        "top-right",
+        "bottom-left",
+        "bottom-right"
+      ],
+      "type": "string"
+    },
+    "LegendResolveMap": {
+      "additionalProperties": false,
+      "properties": {
+        "angle": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "color": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "fill": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "fillOpacity": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "opacity": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "shape": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "size": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "stroke": {
+          "$ref": "#/definitions/ResolveMode"
+        },
+        "strokeDash": {
+          "$ref": "#/definitions/ResolveMode"
         },
-        "y": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "height",
-              "type": "string"
-            }
-          ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
+        "strokeOpacity": {
+          "$ref": "#/definitions/ResolveMode"
         },
-        "y2": {
+        "strokeWidth": {
+          "$ref": "#/definitions/ResolveMode"
+        }
+      },
+      "type": "object"
+    },
+    "LegendStreamBinding": {
+      "additionalProperties": false,
+      "properties": {
+        "legend": {
           "anyOf": [
             {
-              "type": "number"
+              "type": "string"
             },
             {
-              "const": "height",
-              "type": "string"
+              "$ref": "#/definitions/Stream"
             }
-          ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
+          ]
         }
       },
+      "required": [
+        "legend"
+      ],
       "type": "object"
     },
-    "MarkConfig<ExprOrSignalRef>": {
+    "LineConfig": {
       "additionalProperties": false,
       "properties": {
         "align": {
@@ -16222,7 +14504,7 @@
               "$ref": "#/definitions/Align"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
           "description": "The horizontal alignment of the text or ranged marks (area, bar, image, rect, rule). One of `\"left\"`, `\"right\"`, `\"center\"`.\n\n__Note:__ Expression reference is *not* supported for range marks."
@@ -16236,7 +14518,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16247,7 +14529,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16258,7 +14540,7 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16269,7 +14551,7 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16280,7 +14562,7 @@
               "type": "boolean"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16290,7 +14572,7 @@
               "$ref": "#/definitions/TextBaseline"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
           "description": "For text marks, the vertical text baseline. One of `\"alphabetic\"` (default), `\"top\"`, `\"middle\"`, `\"bottom\"`, `\"line-top\"`, `\"line-bottom\"`, or an expression reference that provides one of the valid values. The `\"line-top\"` and `\"line-bottom\"` values operate similarly to `\"top\"` and `\"bottom\"`, but are calculated relative to the `lineHeight` rather than `fontSize` alone.\n\nFor range marks, the vertical alignment of the marks. One of `\"top\"`, `\"middle\"`, `\"bottom\"`.\n\n__Note:__ Expression reference is *not* supported for range marks."
@@ -16302,7 +14584,7 @@
               "description": "The color blend mode for drawing an item on its current background. Any valid [CSS mix-blend-mode](https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode) value can be used.\n\n__Default value: `\"source-over\"`"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16315,10 +14597,10 @@
               "$ref": "#/definitions/Gradient"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "cornerRadius": {
           "anyOf": [
@@ -16327,7 +14609,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16338,7 +14620,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16349,7 +14631,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16360,7 +14642,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16371,7 +14653,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16382,7 +14664,7 @@
               "description": "The mouse cursor used over the mark. Any valid [CSS cursor type](https://developer.mozilla.org/en-US/docs/Web/CSS/cursor#Values) can be used."
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16393,7 +14675,7 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16404,7 +14686,7 @@
               "description": "The direction of the text. One of `\"ltr\"` (left-to-right) or `\"rtl\"` (right-to-left). This property determines on which side is truncated in response to the limit parameter.\n\n__Default value:__ `\"ltr\"`"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16415,7 +14697,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16426,7 +14708,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16437,7 +14719,7 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16448,7 +14730,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16464,7 +14746,7 @@
               "type": "null"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
           "description": "Default fill color. This property has higher precedence than `config.color`. Set to `null` to remove fill.\n\n__Default value:__ (None)"
@@ -16478,7 +14760,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16493,7 +14775,7 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16505,7 +14787,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16516,7 +14798,7 @@
               "description": "The font style (e.g., `\"italic\"`)."
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16527,7 +14809,7 @@
               "description": "The font weight. This can be either a string (e.g `\"bold\"`, `\"normal\"`) or a number (`100`, `200`, `300`, ..., `900` where `\"normal\"` = `400` and `\"bold\"` = `700`)."
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16538,7 +14820,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16549,7 +14831,7 @@
               "description": "A URL to load upon mouse click. If defined, the mark acts as a hyperlink."
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16559,24 +14841,25 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -16593,7 +14876,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16604,7 +14887,7 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16615,7 +14898,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
@@ -16625,7 +14908,7 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
           "description": "The overall opacity (value between [0,1]).\n\n__Default value:__ `0.7` for non-aggregate plots with `point`, `tick`, `circle`, or `square` marks or layered `bar` charts and `1` otherwise.",
@@ -16641,7 +14924,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -16649,10 +14932,11 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -16661,20 +14945,36 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
+        "point": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/OverlayMarkDef"
+            },
+            {
+              "const": "transparent",
+              "type": "string"
+            }
+          ],
+          "description": "A flag for overlaying points on top of line or area marks, or an object defining the properties of the overlayed points.\n\n- If this property is `\"transparent\"`, transparent points will be used (for enhancing tooltips and selections).\n\n- If this property is an empty object (`{}`) or `true`, filled points with default properties will be used.\n\n- If this property is `false`, no points would be automatically added to line or area marks.\n\n__Default value:__ `false`."
+        },
         "radius": {
           "anyOf": [
             {
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -16682,10 +14982,11 @@
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "shape": {
           "anyOf": [
@@ -16698,320 +14999,657 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "size": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
+          "minimum": 0
+        },
+        "smooth": {
+          "anyOf": [
+            {
+              "description": "A boolean flag (default true) indicating if the image should be smoothed when resized. If false, individual pixels should be scaled directly rather than interpolated with smoothing. For SVG rendering, this option may not work in some browsers due to lack of standardization.",
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "startAngle": {
+          "anyOf": [
+            {
+              "description": "The start angle in radians for arc marks. A value of `0` indicates up (north), increasing values proceed clockwise.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "stroke": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Color"
+            },
+            {
+              "$ref": "#/definitions/Gradient"
+            },
+            {
+              "type": "null"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n\n__Default value:__ (None)"
+        },
+        "strokeCap": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/StrokeCap",
+              "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "strokeDash": {
+          "anyOf": [
+            {
+              "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "strokeDashOffset": {
+          "anyOf": [
+            {
+              "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "strokeJoin": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/StrokeJoin",
+              "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "strokeMiterLimit": {
+          "anyOf": [
+            {
+              "description": "The miter limit at which to bevel a line join.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "strokeOffset": {
+          "anyOf": [
+            {
+              "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "strokeOpacity": {
+          "anyOf": [
+            {
+              "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "strokeWidth": {
+          "anyOf": [
+            {
+              "description": "The stroke width, in pixels.",
+              "minimum": 0,
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "tension": {
+          "anyOf": [
+            {
+              "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
+        },
+        "text": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text",
+              "description": "Placeholder text if the `text` channel is not specified"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "size": {
+        "theta": {
           "anyOf": [
             {
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "- For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n\n- For text marks, polar coordinate angle in radians.",
+          "maximum": 360,
           "minimum": 0
         },
-        "smooth": {
+        "theta2": {
           "anyOf": [
             {
-              "description": "A boolean flag (default true) indicating if the image should be smoothed when resized. If false, individual pixels should be scaled directly rather than interpolated with smoothing. For SVG rendering, this option may not work in some browsers due to lack of standardization.",
-              "type": "boolean"
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
         },
-        "startAngle": {
+        "timeUnitBandPosition": {
+          "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
+          "type": "number"
+        },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
+        "tooltip": {
           "anyOf": [
             {
-              "description": "The start angle in radians for arc marks. A value of `0` indicates up (north), increasing values proceed clockwise.",
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ]
-        },
-        "stroke": {
-          "anyOf": [
+              "type": "string"
+            },
             {
-              "$ref": "#/definitions/Color"
+              "type": "boolean"
             },
             {
-              "$ref": "#/definitions/Gradient"
+              "$ref": "#/definitions/TooltipContent"
             },
             {
-              "type": "null"
+              "$ref": "#/definitions/ExprRef"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "type": "null"
             }
           ],
-          "description": "Default stroke color. This property has higher precedence than `config.color`. Set to `null` to remove stroke.\n\n__Default value:__ (None)"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
-        "strokeCap": {
+        "url": {
           "anyOf": [
             {
-              "$ref": "#/definitions/StrokeCap",
-              "description": "The stroke cap for line ending style. One of `\"butt\"`, `\"round\"`, or `\"square\"`.\n\n__Default value:__ `\"butt\"`"
+              "$ref": "#/definitions/URI",
+              "description": "The URL of the image file for image marks."
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "strokeDash": {
+        "width": {
           "anyOf": [
             {
-              "description": "An array of alternating stroke, space lengths for creating dashed or dotted lines.",
-              "items": {
-                "type": "number"
-              },
-              "type": "array"
+              "description": "Width of the marks.",
+              "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
-        "strokeDashOffset": {
+        "x": {
           "anyOf": [
             {
-              "description": "The offset (in pixels) into which to begin drawing with the stroke dash array.",
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ]
-        },
-        "strokeJoin": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/StrokeJoin",
-              "description": "The stroke line join method. One of `\"miter\"`, `\"round\"` or `\"bevel\"`.\n\n__Default value:__ `\"miter\"`"
+              "const": "width",
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
         },
-        "strokeMiterLimit": {
+        "x2": {
           "anyOf": [
             {
-              "description": "The miter limit at which to bevel a line join.",
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ]
-        },
-        "strokeOffset": {
-          "anyOf": [
-            {
-              "description": "The offset in pixels at which to draw the group stroke and fill. If unspecified, the default behavior is to dynamically offset stroked groups such that 1 pixel stroke widths align with the pixel grid.",
-              "type": "number"
+              "const": "width",
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
         },
-        "strokeOpacity": {
+        "y": {
           "anyOf": [
             {
-              "description": "The stroke opacity (value between [0,1]).\n\n__Default value:__ `1`",
-              "maximum": 1,
-              "minimum": 0,
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ]
-        },
-        "strokeWidth": {
-          "anyOf": [
-            {
-              "description": "The stroke width, in pixels.",
-              "minimum": 0,
-              "type": "number"
+              "const": "height",
+              "type": "string"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
         },
-        "tension": {
+        "y2": {
           "anyOf": [
             {
-              "description": "Depending on the interpolation type, sets the tension parameter (for line and area marks).",
               "type": "number"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "const": "height",
+              "type": "string"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
-          ]
+          ],
+          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
+        }
+      },
+      "type": "object"
+    },
+    "LineString": {
+      "additionalProperties": false,
+      "description": "LineString geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.4",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
+        },
+        "coordinates": {
+          "items": {
+            "$ref": "#/definitions/Position"
+          },
+          "type": "array"
+        },
+        "type": {
+          "const": "LineString",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "coordinates",
+        "type"
+      ],
+      "type": "object"
+    },
+    "LinearGradient": {
+      "additionalProperties": false,
+      "properties": {
+        "gradient": {
+          "const": "linear",
+          "description": "The type of gradient. Use `\"linear\"` for a linear gradient.",
+          "type": "string"
+        },
+        "id": {
+          "type": "string"
+        },
+        "stops": {
+          "description": "An array of gradient stops defining the gradient color sequence.",
+          "items": {
+            "$ref": "#/definitions/GradientStop"
+          },
+          "type": "array"
+        },
+        "x1": {
+          "description": "The starting x-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`",
+          "type": "number"
+        },
+        "x2": {
+          "description": "The ending x-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `1`",
+          "type": "number"
+        },
+        "y1": {
+          "description": "The starting y-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`",
+          "type": "number"
+        },
+        "y2": {
+          "description": "The ending y-coordinate, in normalized [0, 1] coordinates, of the linear gradient.\n\n__Default value:__ `0`",
+          "type": "number"
+        }
+      },
+      "required": [
+        "gradient",
+        "stops"
+      ],
+      "type": "object"
+    },
+    "LocalMultiTimeUnit": {
+      "enum": [
+        "yearquarter",
+        "yearquartermonth",
+        "yearmonth",
+        "yearmonthdate",
+        "yearmonthdatehours",
+        "yearmonthdatehoursminutes",
+        "yearmonthdatehoursminutesseconds",
+        "yearweek",
+        "yearweekday",
+        "yearweekdayhours",
+        "yearweekdayhoursminutes",
+        "yearweekdayhoursminutesseconds",
+        "yeardayofyear",
+        "quartermonth",
+        "monthdate",
+        "monthdatehours",
+        "monthdatehoursminutes",
+        "monthdatehoursminutesseconds",
+        "weekday",
+        "weeksdayhours",
+        "weekdayhoursminutes",
+        "weekdayhoursminutesseconds",
+        "dayhours",
+        "dayhoursminutes",
+        "dayhoursminutesseconds",
+        "hoursminutes",
+        "hoursminutesseconds",
+        "minutesseconds",
+        "secondsmilliseconds"
+      ],
+      "type": "string"
+    },
+    "LocalSingleTimeUnit": {
+      "enum": [
+        "year",
+        "quarter",
+        "month",
+        "week",
+        "day",
+        "dayofyear",
+        "date",
+        "hours",
+        "minutes",
+        "seconds",
+        "milliseconds"
+      ],
+      "type": "string"
+    },
+    "Locale": {
+      "additionalProperties": false,
+      "properties": {
+        "number": {
+          "$ref": "#/definitions/NumberLocale"
+        },
+        "time": {
+          "$ref": "#/definitions/TimeLocale"
+        }
+      },
+      "type": "object"
+    },
+    "LoessTransform": {
+      "additionalProperties": false,
+      "properties": {
+        "as": {
+          "description": "The output field names for the smoothed points generated by the loess transform.\n\n__Default value:__ The field names of the input x and y values.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "maxItems": 2,
+          "minItems": 2,
+          "type": "array"
         },
-        "text": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text",
-              "description": "Placeholder text if the `text` channel is not specified"
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ]
+        "bandwidth": {
+          "description": "A bandwidth parameter in the range `[0, 1]` that determines the amount of smoothing.\n\n__Default value:__ `0.3`",
+          "type": "number"
         },
-        "theta": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ],
-          "description": "- For arc marks, the arc length in radians if theta2 is not specified, otherwise the start arc angle. (A value of 0 indicates up or “north”, increasing values proceed clockwise.)\n\n- For text marks, polar coordinate angle in radians.",
-          "maximum": 360,
-          "minimum": 0
+        "groupby": {
+          "description": "The data fields to group by. If not specified, a single group containing all data objects will be used.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
         },
-        "theta2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ],
-          "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
+        "loess": {
+          "$ref": "#/definitions/FieldName",
+          "description": "The data field of the dependent variable to smooth."
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
+        "on": {
+          "$ref": "#/definitions/FieldName",
+          "description": "The data field of the independent variable to use a predictor."
+        }
+      },
+      "required": [
+        "loess",
+        "on"
+      ],
+      "type": "object"
+    },
+    "LogicalAnd<Predicate>": {
+      "additionalProperties": false,
+      "properties": {
+        "and": {
+          "items": {
+            "$ref": "#/definitions/PredicateComposition"
+          },
+          "type": "array"
+        }
+      },
+      "required": [
+        "and"
+      ],
+      "type": "object"
+    },
+    "PredicateComposition": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/LogicalNot<Predicate>"
         },
-        "timeUnitBandPosition": {
-          "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
-          "type": "number"
+        {
+          "$ref": "#/definitions/LogicalAnd<Predicate>"
         },
-        "tooltip": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "type": "boolean"
-            },
-            {
-              "$ref": "#/definitions/TooltipContent"
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+        {
+          "$ref": "#/definitions/LogicalOr<Predicate>"
         },
-        "url": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/URI",
-              "description": "The URL of the image file for image marks."
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ]
+        {
+          "$ref": "#/definitions/Predicate"
+        }
+      ]
+    },
+    "LogicalNot<Predicate>": {
+      "additionalProperties": false,
+      "properties": {
+        "not": {
+          "$ref": "#/definitions/PredicateComposition"
+        }
+      },
+      "required": [
+        "not"
+      ],
+      "type": "object"
+    },
+    "LogicalOr<Predicate>": {
+      "additionalProperties": false,
+      "properties": {
+        "or": {
+          "items": {
+            "$ref": "#/definitions/PredicateComposition"
+          },
+          "type": "array"
+        }
+      },
+      "required": [
+        "or"
+      ],
+      "type": "object"
+    },
+    "LookupData": {
+      "additionalProperties": false,
+      "properties": {
+        "data": {
+          "$ref": "#/definitions/Data",
+          "description": "Secondary data source to lookup in."
         },
-        "width": {
-          "anyOf": [
-            {
-              "description": "Width of the marks.",
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ]
+        "fields": {
+          "description": "Fields in foreign data or selection to lookup. If not specified, the entire object is queried.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
         },
-        "x": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "width",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ],
-          "description": "X coordinates of the marks, or width of horizontal `\"bar\"` and `\"area\"` without specified `x2` or `width`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+        "key": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Key in data to lookup."
+        }
+      },
+      "required": [
+        "data",
+        "key"
+      ],
+      "type": "object"
+    },
+    "LookupSelection": {
+      "additionalProperties": false,
+      "properties": {
+        "fields": {
+          "description": "Fields in foreign data or selection to lookup. If not specified, the entire object is queried.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
         },
-        "x2": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "width",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/ExprOrSignalRef"
-            }
-          ],
-          "description": "X2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"width\"` for the width of the plot."
+        "key": {
+          "$ref": "#/definitions/FieldName",
+          "description": "Key in data to lookup."
         },
-        "y": {
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Selection parameter name to look up."
+        }
+      },
+      "required": [
+        "key",
+        "param"
+      ],
+      "type": "object"
+    },
+    "LookupTransform": {
+      "additionalProperties": false,
+      "properties": {
+        "as": {
           "anyOf": [
             {
-              "type": "number"
-            },
-            {
-              "const": "height",
-              "type": "string"
+              "$ref": "#/definitions/FieldName"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "items": {
+                "$ref": "#/definitions/FieldName"
+              },
+              "type": "array"
             }
           ],
-          "description": "Y coordinates of the marks, or height of vertical `\"bar\"` and `\"area\"` without specified `y2` or `height`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
+          "description": "The output fields on which to store the looked up data values.\n\nFor data lookups, this property may be left blank if `from.fields` has been specified (those field names will be used); if `from.fields` has not been specified, `as` must be a string.\n\nFor selection lookups, this property is optional: if unspecified, looked up values will be stored under a property named for the selection; and if specified, it must correspond to `from.fields`."
         },
-        "y2": {
+        "default": {
+          "description": "The default value to use if lookup fails.\n\n__Default value:__ `null`"
+        },
+        "from": {
           "anyOf": [
             {
-              "type": "number"
-            },
-            {
-              "const": "height",
-              "type": "string"
+              "$ref": "#/definitions/LookupData"
             },
             {
-              "$ref": "#/definitions/ExprOrSignalRef"
+              "$ref": "#/definitions/LookupSelection"
             }
           ],
-          "description": "Y2 coordinates for ranged `\"area\"`, `\"bar\"`, `\"rect\"`, and  `\"rule\"`.\n\nThe `value` of this channel can be a number or a string `\"height\"` for the height of the plot."
+          "description": "Data source or selection for secondary data reference."
+        },
+        "lookup": {
+          "description": "Key in primary data source.",
+          "type": "string"
         }
       },
+      "required": [
+        "lookup",
+        "from"
+      ],
       "type": "object"
     },
+    "Mark": {
+      "description": "All types of primitive marks.",
+      "enum": [
+        "arc",
+        "area",
+        "bar",
+        "image",
+        "line",
+        "point",
+        "rect",
+        "rule",
+        "text",
+        "tick",
+        "trail",
+        "circle",
+        "square",
+        "geoshape"
+      ],
+      "type": "string"
+    },
     "MarkConfig": {
       "additionalProperties": false,
       "properties": {
@@ -17117,7 +15755,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "cornerRadius": {
           "anyOf": [
@@ -17361,13 +15999,14 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -17375,7 +16014,7 @@
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -17440,7 +16079,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -17451,7 +16090,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -17473,7 +16113,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -17484,7 +16125,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "shape": {
           "anyOf": [
@@ -17497,7 +16139,7 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -17513,7 +16155,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
           "minimum": 0
         },
         "smooth": {
@@ -17695,14 +16337,14 @@
           ],
           "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
         "timeUnitBandPosition": {
           "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
           "type": "number"
         },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
         "tooltip": {
           "anyOf": [
             {
@@ -17724,7 +16366,7 @@
               "type": "null"
             }
           ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
         "url": {
           "anyOf": [
@@ -17930,7 +16572,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "continuousBandSize": {
           "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`",
@@ -17979,7 +16621,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "- For vertical bars, top-left and top-right corner radius. - For horizontal bars, top-right and bottom-right corner radius."
+          "description": "- For vertical bars, top-left and top-right corner radius.\n\n- For horizontal bars, top-right and bottom-right corner radius."
         },
         "cornerRadiusTopLeft": {
           "anyOf": [
@@ -18037,9 +16679,16 @@
           ]
         },
         "discreteBandSize": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/RelativeBandSize"
+            }
+          ],
           "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is  `step-2`, which provides 2 pixel offset between bars.",
-          "minimum": 0,
-          "type": "number"
+          "minimum": 0
         },
         "dx": {
           "anyOf": [
@@ -18156,13 +16805,16 @@
         "height": {
           "anyOf": [
             {
-              "description": "Height of the marks.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
+            },
+            {
+              "$ref": "#/definitions/RelativeBandSize"
             }
-          ]
+          ],
+          "description": "Height of the marks.  One of:\n\n- A number representing a fixed pixel height.\n\n- A relative band size definition.  For example, `{band: 0.5}` represents half of the band"
         },
         "href": {
           "anyOf": [
@@ -18184,13 +16836,14 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -18198,7 +16851,7 @@
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -18274,7 +16927,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -18285,7 +16938,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -18322,7 +16976,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -18333,7 +16988,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "radius2Offset": {
           "anyOf": [
@@ -18368,7 +17024,7 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -18384,7 +17040,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
           "minimum": 0
         },
         "smooth": {
@@ -18596,14 +17252,14 @@
           "minimum": 0,
           "type": "number"
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
         "timeUnitBandPosition": {
           "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
           "type": "number"
         },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
         "tooltip": {
           "anyOf": [
             {
@@ -18625,7 +17281,7 @@
               "type": "null"
             }
           ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
         "type": {
           "$ref": "#/definitions/Mark",
@@ -18645,13 +17301,16 @@
         "width": {
           "anyOf": [
             {
-              "description": "Width of the marks.",
               "type": "number"
             },
             {
               "$ref": "#/definitions/ExprRef"
+            },
+            {
+              "$ref": "#/definitions/RelativeBandSize"
             }
-          ]
+          ],
+          "description": "Width of the marks.  One of:\n\n- A number representing a fixed pixel width.\n\n- A relative band size definition.  For example, `{band: 0.5}` represents half of the band."
         },
         "x": {
           "anyOf": [
@@ -18886,170 +17545,91 @@
       "minimum": 1,
       "type": "number"
     },
-    "MultiSelection": {
+    "MultiLineString": {
       "additionalProperties": false,
+      "description": "MultiLineString geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.5",
       "properties": {
-        "bind": {
-          "$ref": "#/definitions/LegendBinding",
-          "description": "When set, a selection is populated by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding."
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection. When set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
         },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial value (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation.",
+        "coordinates": {
           "items": {
-            "$ref": "#/definitions/SelectionInitMapping"
+            "items": {
+              "$ref": "#/definitions/Position"
+            },
+            "type": "array"
           },
           "type": "array"
         },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "toggle": {
-          "description": "Controls whether data values should be toggled or only ever inserted into multi selections. Can be `true`, `false` (for insertion only), or a [Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e., data values are toggled when a user interacts with the shift-key pressed).\n\nSetting the value to the Vega expression `\"true\"` will toggle data values without the user pressing the shift-key.\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
-        },
         "type": {
-          "const": "multi",
-          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `\"single\"` -- to select a single discrete data value on `click`. - `\"multi\"` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`. - `\"interval\"` -- to select a continuous range of data values on `drag`.",
+          "const": "MultiLineString",
+          "description": "Specifies the type of GeoJSON object.",
           "type": "string"
         }
       },
       "required": [
+        "coordinates",
         "type"
       ],
       "type": "object"
     },
-    "MultiSelectionConfig": {
+    "MultiPoint": {
       "additionalProperties": false,
+      "description": "MultiPoint geometry object.  https://tools.ietf.org/html/rfc7946#section-3.1.3",
       "properties": {
-        "bind": {
-          "$ref": "#/definitions/LegendBinding",
-          "description": "When set, a selection is populated by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding."
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection. When set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
         },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
+        "coordinates": {
           "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
+            "$ref": "#/definitions/Position"
           },
           "type": "array"
         },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
+        "type": {
+          "const": "MultiPoint",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "coordinates",
+        "type"
+      ],
+      "type": "object"
+    },
+    "MultiPolygon": {
+      "additionalProperties": false,
+      "description": "MultiPolygon geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.7",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
         },
-        "init": {
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and an initial value (or array of values).\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation.",
+        "coordinates": {
           "items": {
-            "$ref": "#/definitions/SelectionInitMapping"
+            "items": {
+              "items": {
+                "$ref": "#/definitions/Position"
+              },
+              "type": "array"
+            },
+            "type": "array"
           },
           "type": "array"
         },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "toggle": {
-          "description": "Controls whether data values should be toggled or only ever inserted into multi selections. Can be `true`, `false` (for insertion only), or a [Vega expression](https://vega.github.io/vega/docs/expressions/).\n\n__Default value:__ `true`, which corresponds to `event.shiftKey` (i.e., data values are toggled when a user interacts with the shift-key pressed).\n\nSetting the value to the Vega expression `\"true\"` will toggle data values without the user pressing the shift-key.\n\n__See also:__ [`toggle`](https://vega.github.io/vega-lite/docs/toggle.html) documentation.",
-          "type": [
-            "string",
-            "boolean"
-          ]
+        "type": {
+          "const": "MultiPolygon",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
         }
       },
+      "required": [
+        "coordinates",
+        "type"
+      ],
       "type": "object"
     },
     "MultiTimeUnit": {
@@ -19070,7 +17650,7 @@
           "description": "An object that specifies the format for parsing the data."
         },
         "name": {
-          "description": "Provide a placeholder name and bind data at runtime.",
+          "description": "Provide a placeholder name and bind data at runtime.\n\nNew data may change the layout but Vega does not always resize the chart. To update the layout when the data updates, set [autosize](https://vega.github.io/vega-lite/docs/size.html#autosize) or explicitly use [view.resize](https://vega.github.io/vega/docs/api/view/#view_resize).",
           "type": "string"
         }
       },
@@ -19118,10 +17698,10 @@
               "$ref": "#/definitions/RowCol<LayoutAlign>"
             }
           ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -19140,7 +17720,7 @@
           "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
         },
         "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
           "type": "number"
         },
         "data": {
@@ -19192,7 +17772,7 @@
           "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
         },
         "spec": {
-          "$ref": "#/definitions/Spec",
+          "$ref": "#/definitions/NonNormalizedSpec",
           "description": "A specification of the view that gets repeated."
         },
         "title": {
@@ -19220,14 +17800,75 @@
       ],
       "type": "object"
     },
+    "NonNormalizedSpec": {
+      "$ref": "#/definitions/Spec"
+    },
+    "NumberLocale": {
+      "additionalProperties": false,
+      "description": "Locale definition for formatting numbers.",
+      "properties": {
+        "currency": {
+          "$ref": "#/definitions/Vector2<string>",
+          "description": "The currency prefix and suffix (e.g., [\"$\", \"\"])."
+        },
+        "decimal": {
+          "description": "The decimal point (e.g., \".\").",
+          "type": "string"
+        },
+        "grouping": {
+          "description": "The array of group sizes (e.g., [3]), cycled as needed.",
+          "items": {
+            "type": "number"
+          },
+          "type": "array"
+        },
+        "minus": {
+          "description": "The minus sign (defaults to hyphen-minus, \"-\").",
+          "type": "string"
+        },
+        "nan": {
+          "description": "The not-a-number value (defaults to \"NaN\").",
+          "type": "string"
+        },
+        "numerals": {
+          "$ref": "#/definitions/Vector10<string>",
+          "description": "An array of ten strings to replace the numerals 0-9."
+        },
+        "percent": {
+          "description": "The percent sign (defaults to \"%\").",
+          "type": "string"
+        },
+        "thousands": {
+          "description": "The group separator (e.g., \",\").",
+          "type": "string"
+        }
+      },
+      "required": [
+        "decimal",
+        "thousands",
+        "grouping",
+        "currency"
+      ],
+      "type": "object"
+    },
     "NumericArrayMarkPropDef": {
       "$ref": "#/definitions/MarkPropDef<number[]>"
     },
     "NumericMarkPropDef": {
       "$ref": "#/definitions/MarkPropDef<number>"
     },
-    "NumericValueDef": {
-      "$ref": "#/definitions/ValueDef<(number|ExprRef)>"
+    "OffsetDef": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/ScaleFieldDef"
+        },
+        {
+          "$ref": "#/definitions/ScaleDatumDef"
+        },
+        {
+          "$ref": "#/definitions/ValueDef<number>"
+        }
+      ]
     },
     "OrderFieldDef": {
       "additionalProperties": false,
@@ -19236,8 +17877,8 @@
           "$ref": "#/definitions/Aggregate",
           "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -19258,7 +17899,7 @@
               "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "field": {
           "$ref": "#/definitions/Field",
@@ -19288,11 +17929,11 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -19312,7 +17953,7 @@
               "type": "array"
             }
           ],
-          "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+          "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
         },
         "value": {
           "anyOf": [
@@ -19456,7 +18097,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "cornerRadius": {
           "anyOf": [
@@ -19700,13 +18341,14 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -19714,7 +18356,7 @@
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -19779,7 +18421,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -19790,7 +18432,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -19812,7 +18455,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -19823,7 +18467,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "radius2Offset": {
           "anyOf": [
@@ -19858,7 +18503,7 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -19874,7 +18519,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
           "minimum": 0
         },
         "smooth": {
@@ -20092,14 +18737,14 @@
           ],
           "description": "Offset for theta."
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
         "timeUnitBandPosition": {
           "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
           "type": "number"
         },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
         "tooltip": {
           "anyOf": [
             {
@@ -20121,7 +18766,7 @@
               "type": "null"
             }
           ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
         "url": {
           "anyOf": [
@@ -20260,49 +18905,79 @@
         {
           "additionalProperties": false,
           "properties": {
-            "bottom": {
-              "type": "number"
-            },
-            "left": {
-              "type": "number"
-            },
-            "right": {
-              "type": "number"
+            "bottom": {
+              "type": "number"
+            },
+            "left": {
+              "type": "number"
+            },
+            "right": {
+              "type": "number"
+            },
+            "top": {
+              "type": "number"
+            }
+          },
+          "type": "object"
+        }
+      ],
+      "minimum": 0
+    },
+    "ParameterExtent": {
+      "anyOf": [
+        {
+          "additionalProperties": false,
+          "properties": {
+            "field": {
+              "$ref": "#/definitions/FieldName",
+              "description": "If a selection parameter is specified, the field name to extract selected values for when the selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings."
+            },
+            "param": {
+              "$ref": "#/definitions/ParameterName",
+              "description": "The name of a parameter."
+            }
+          },
+          "required": [
+            "param"
+          ],
+          "type": "object"
+        },
+        {
+          "additionalProperties": false,
+          "properties": {
+            "encoding": {
+              "$ref": "#/definitions/SingleDefUnitChannel",
+              "description": "If a selection parameter is specified, the encoding channel to extract selected values for when a selection is [projected](https://vega.github.io/vega-lite/docs/selection.html#project) over multiple fields or encodings."
             },
-            "top": {
-              "type": "number"
+            "param": {
+              "$ref": "#/definitions/ParameterName",
+              "description": "The name of a parameter."
             }
           },
+          "required": [
+            "param"
+          ],
           "type": "object"
         }
-      ],
-      "minimum": 0
+      ]
+    },
+    "ParameterName": {
+      "type": "string"
     },
-    "Parameter": {
+    "ParameterPredicate": {
       "additionalProperties": false,
       "properties": {
-        "bind": {
-          "$ref": "#/definitions/Binding",
-          "description": "Binds the parameter to an external input element such as a slider, selection list or radio button group."
-        },
-        "description": {
-          "description": "A text description of the parameter, useful for inline documentation.",
-          "type": "string"
-        },
-        "expr": {
-          "$ref": "#/definitions/Expr",
-          "description": "An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes."
-        },
-        "name": {
-          "description": "Required. A unique name for the parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or “$”, or “_”) and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\".",
-          "type": "string"
+        "empty": {
+          "description": "For selection parameters, the predicate of empty selections returns true by default. Override this behavior, by setting this property `empty: false`.",
+          "type": "boolean"
         },
-        "value": {
-          "description": "The initial value of the parameter.\n\n__Default value:__ `undefined`"
+        "param": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Filter using a parameter name."
         }
       },
       "required": [
-        "name"
+        "param"
       ],
       "type": "object"
     },
@@ -20353,8 +19028,8 @@
           "type": "number"
         },
         "op": {
-          "description": "The aggregation operation to apply to grouped `value` field values. __Default value:__ `sum`",
-          "type": "string"
+          "$ref": "#/definitions/AggregateOp",
+          "description": "The aggregation operation to apply to grouped `value` field values. __Default value:__ `sum`"
         },
         "pivot": {
           "$ref": "#/definitions/FieldName",
@@ -20371,6 +19046,157 @@
       ],
       "type": "object"
     },
+    "Point": {
+      "additionalProperties": false,
+      "description": "Point geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.2",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
+        },
+        "coordinates": {
+          "$ref": "#/definitions/Position"
+        },
+        "type": {
+          "const": "Point",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "coordinates",
+        "type"
+      ],
+      "type": "object"
+    },
+    "PointSelectionConfig": {
+      "additionalProperties": false,
+      "properties": {
+        "clear": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Stream"
+            },
+            {
+              "type": "string"
+            },
+            {
+              "type": "boolean"
+            }
+          ],
+          "description": "Clears the selection, emptying it of all values. This property can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation."
+        },
+        "encodings": {
+          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.",
+          "items": {
+            "$ref": "#/definitions/SingleDefUnitChannel"
+          },
+          "type": "array"
+        },
+        "fields": {
+          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
+        },
+        "nearest": {
+          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__Default value:__ `false`, which means that data values must be interacted with directly (e.g., clicked on) to be added to the selection.\n\n__See also:__ [`nearest` examples](https://vega.github.io/vega-lite/docs/selection.html#nearest) documentation.",
+          "type": "boolean"
+        },
+        "on": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Stream"
+            },
+            {
+              "type": "string"
+            }
+          ],
+          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n\n__See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation."
+        },
+        "resolve": {
+          "$ref": "#/definitions/SelectionResolution",
+          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\nOne of:\n- `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n- `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n- `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n\n__Default value:__ `global`.\n\n__See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation."
+        },
+        "toggle": {
+          "description": "Controls whether data values should be toggled (inserted or removed from a point selection) or only ever inserted into point selections.\n\nOne of:\n- `true` -- the default behavior, which corresponds to `\"event.shiftKey\"`.  As a result, data values are toggled when the user interacts with the shift-key pressed.\n- `false` -- disables toggling behaviour; the selection will only ever contain a single data value corresponding to the most recent interaction.\n- A [Vega expression](https://vega.github.io/vega/docs/expressions/) which is re-evaluated as the user interacts. If the expression evaluates to `true`, the data value is toggled into or out of the point selection. If the expression evaluates to `false`, the point selection is first cleared, and the data value is then inserted. For example, setting the value to the Vega expression `\"true\"` will toggle data values without the user pressing the shift-key.\n\n__Default value:__ `true`\n\n__See also:__ [`toggle` examples](https://vega.github.io/vega-lite/docs/selection.html#toggle) in the documentation.",
+          "type": [
+            "string",
+            "boolean"
+          ]
+        },
+        "type": {
+          "const": "point",
+          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n\n- `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n- `\"interval\"` -- to select a continuous range of data values on `drag`.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "type"
+      ],
+      "type": "object"
+    },
+    "PointSelectionConfigWithoutType": {
+      "additionalProperties": false,
+      "properties": {
+        "clear": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Stream"
+            },
+            {
+              "type": "string"
+            },
+            {
+              "type": "boolean"
+            }
+          ],
+          "description": "Clears the selection, emptying it of all values. This property can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable clear.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear` examples ](https://vega.github.io/vega-lite/docs/selection.html#clear) in the documentation."
+        },
+        "encodings": {
+          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.",
+          "items": {
+            "$ref": "#/definitions/SingleDefUnitChannel"
+          },
+          "type": "array"
+        },
+        "fields": {
+          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ The [projection with `encodings` and `fields` section](https://vega.github.io/vega-lite/docs/selection.html#project) in the documentation.",
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
+          "type": "array"
+        },
+        "nearest": {
+          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__Default value:__ `false`, which means that data values must be interacted with directly (e.g., clicked on) to be added to the selection.\n\n__See also:__ [`nearest` examples](https://vega.github.io/vega-lite/docs/selection.html#nearest) documentation.",
+          "type": "boolean"
+        },
+        "on": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Stream"
+            },
+            {
+              "type": "string"
+            }
+          ],
+          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters).\n\n__See also:__ [`on` examples](https://vega.github.io/vega-lite/docs/selection.html#on) in the documentation."
+        },
+        "resolve": {
+          "$ref": "#/definitions/SelectionResolution",
+          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\nOne of:\n- `\"global\"` -- only one brush exists for the entire SPLOM. When the user begins to drag, any previous brushes are cleared, and a new one is constructed.\n- `\"union\"` -- each cell contains its own brush, and points are highlighted if they lie within _any_ of these individual brushes.\n- `\"intersect\"` -- each cell contains its own brush, and points are highlighted only if they fall within _all_ of these individual brushes.\n\n__Default value:__ `global`.\n\n__See also:__ [`resolve` examples](https://vega.github.io/vega-lite/docs/selection.html#resolve) in the documentation."
+        },
+        "toggle": {
+          "description": "Controls whether data values should be toggled (inserted or removed from a point selection) or only ever inserted into point selections.\n\nOne of:\n- `true` -- the default behavior, which corresponds to `\"event.shiftKey\"`.  As a result, data values are toggled when the user interacts with the shift-key pressed.\n- `false` -- disables toggling behaviour; the selection will only ever contain a single data value corresponding to the most recent interaction.\n- A [Vega expression](https://vega.github.io/vega/docs/expressions/) which is re-evaluated as the user interacts. If the expression evaluates to `true`, the data value is toggled into or out of the point selection. If the expression evaluates to `false`, the point selection is first cleared, and the data value is then inserted. For example, setting the value to the Vega expression `\"true\"` will toggle data values without the user pressing the shift-key.\n\n__Default value:__ `true`\n\n__See also:__ [`toggle` examples](https://vega.github.io/vega-lite/docs/selection.html#toggle) in the documentation.",
+          "type": [
+            "string",
+            "boolean"
+          ]
+        }
+      },
+      "type": "object"
+    },
     "PolarDef": {
       "anyOf": [
         {
@@ -20384,6 +19210,42 @@
         }
       ]
     },
+    "Polygon": {
+      "additionalProperties": false,
+      "description": "Polygon geometry object. https://tools.ietf.org/html/rfc7946#section-3.1.6",
+      "properties": {
+        "bbox": {
+          "$ref": "#/definitions/BBox",
+          "description": "Bounding box of the coordinate range of the object's Geometries, Features, or Feature Collections. https://tools.ietf.org/html/rfc7946#section-5"
+        },
+        "coordinates": {
+          "items": {
+            "items": {
+              "$ref": "#/definitions/Position"
+            },
+            "type": "array"
+          },
+          "type": "array"
+        },
+        "type": {
+          "const": "Polygon",
+          "description": "Specifies the type of GeoJSON object.",
+          "type": "string"
+        }
+      },
+      "required": [
+        "coordinates",
+        "type"
+      ],
+      "type": "object"
+    },
+    "Position": {
+      "description": "A Position is an array of coordinates. https://tools.ietf.org/html/rfc7946#section-3.1.1 Array should contain between two and three elements. The previous GeoJSON specification allowed more elements (e.g., which could be used to represent M values), but the current specification only allows X, Y, and (optionally) Z to be defined.",
+      "items": {
+        "type": "number"
+      },
+      "type": "array"
+    },
     "Position2Def": {
       "anyOf": [
         {
@@ -20411,8 +19273,8 @@
           ],
           "description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -20468,11 +19330,22 @@
               "type": "boolean"
             }
           ],
-          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+        },
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -20480,8 +19353,8 @@
     "PositionDatumDefBase": {
       "additionalProperties": false,
       "properties": {
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -20526,11 +19399,22 @@
               "type": "boolean"
             }
           ],
-          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+        },
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/Type",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -20566,8 +19450,8 @@
           ],
           "description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -20588,7 +19472,7 @@
               "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "field": {
           "$ref": "#/definitions/Field",
@@ -20618,7 +19502,7 @@
         },
         "sort": {
           "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
         },
         "stack": {
           "anyOf": [
@@ -20632,7 +19516,7 @@
               "type": "boolean"
             }
           ],
-          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
         },
         "timeUnit": {
           "anyOf": [
@@ -20654,11 +19538,11 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -20670,8 +19554,8 @@
           "$ref": "#/definitions/Aggregate",
           "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -20692,7 +19576,7 @@
               "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "field": {
           "$ref": "#/definitions/Field",
@@ -20711,7 +19595,7 @@
         },
         "sort": {
           "$ref": "#/definitions/Sort",
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
         },
         "stack": {
           "anyOf": [
@@ -20725,7 +19609,7 @@
               "type": "boolean"
             }
           ],
-          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+          "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
         },
         "timeUnit": {
           "anyOf": [
@@ -20747,11 +19631,11 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -20786,7 +19670,7 @@
           "$ref": "#/definitions/FieldValidPredicate"
         },
         {
-          "$ref": "#/definitions/SelectionPredicate"
+          "$ref": "#/definitions/ParameterPredicate"
         },
         {
           "type": "string"
@@ -20805,25 +19689,69 @@
       "additionalProperties": false,
       "properties": {
         "center": {
-          "$ref": "#/definitions/Vector2<number>",
-          "description": "The projection's center, a two-element array of longitude and latitude in degrees.\n\n__Default value:__ `[0, 0]`"
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Vector2<number>",
+              "description": "The projection's center, a two-element array of longitude and latitude in degrees.\n\n__Default value:__ `[0, 0]`"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "clipAngle": {
-          "description": "The projection's clipping circle radius to the specified angle in degrees. If `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather than small-circle clipping.",
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The projection's clipping circle radius to the specified angle in degrees. If `null`, switches to [antimeridian](http://bl.ocks.org/mbostock/3788999) cutting rather than small-circle clipping.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "clipExtent": {
-          "$ref": "#/definitions/Vector2<Vector2<number>>",
-          "description": "The projection's viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no viewport clipping is performed."
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Vector2<Vector2<number>>",
+              "description": "The projection's viewport clip extent to the specified bounds in pixels. The extent bounds are specified as an array `[[x0, y0], [x1, y1]]`, where `x0` is the left-side of the viewport, `y0` is the top, `x1` is the right and `y1` is the bottom. If `null`, no viewport clipping is performed."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "coefficient": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The coefficient parameter for the `hammer` projection.\n\n__Default value:__ `2`",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "distance": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "For the `satellite` projection, the distance from the center of the sphere to the point of view, as a proportion of the sphere’s radius. The recommended maximum clip angle for a given `distance` is acos(1 / distance) converted to degrees. If tilt is also applied, then more conservative clipping may be necessary.\n\n__Default value:__ `2.0`",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "extent": {
-          "$ref": "#/definitions/Vector2<Vector2<number>>"
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Vector2<Vector2<number>>"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "fit": {
           "anyOf": [
@@ -20835,76 +19763,208 @@
                 "$ref": "#/definitions/Fit"
               },
               "type": "array"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
             }
           ]
         },
         "fraction": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The fraction parameter for the `bottomley` projection.\n\n__Default value:__ `0.5`, corresponding to a sin(ψ) where ψ = π/6.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "lobes": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The number of lobes in projections that support multi-lobe views: `berghaus`, `gingery`, or `healpix`. The default value varies based on the projection type.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "parallel": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The parallel parameter for projections that support it: `armadillo`, `bonne`, `craig`, `cylindricalEqualArea`, `cylindricalStereographic`, `hammerRetroazimuthal`, `loximuthal`, or `rectangularPolyconic`. The default value varies based on the projection type.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "parallels": {
-          "description": "For conic projections, the [two standard parallels](https://en.wikipedia.org/wiki/Map_projection#Conic) that define the map layout. The default depends on the specific conic projection used.",
-          "items": {
-            "type": "number"
-          },
-          "type": "array"
+          "anyOf": [
+            {
+              "description": "For conic projections, the [two standard parallels](https://en.wikipedia.org/wiki/Map_projection#Conic) that define the map layout. The default depends on the specific conic projection used.",
+              "items": {
+                "type": "number"
+              },
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "pointRadius": {
-          "description": "The default radius (in pixels) to use when drawing GeoJSON `Point` and `MultiPoint` geometries. This parameter sets a constant default value. To modify the point radius in response to data, see the corresponding parameter of the GeoPath and GeoShape transforms.\n\n__Default value:__ `4.5`",
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The default radius (in pixels) to use when drawing GeoJSON `Point` and `MultiPoint` geometries. This parameter sets a constant default value. To modify the point radius in response to data, see the corresponding parameter of the GeoPath and GeoShape transforms.\n\n__Default value:__ `4.5`",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "precision": {
-          "description": "The threshold for the projection's [adaptive resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This value corresponds to the [Douglas–Peucker distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm). If precision is not specified, returns the projection's current resampling precision which defaults to `√0.5 ≅ 0.70710…`.",
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The threshold for the projection's [adaptive resampling](http://bl.ocks.org/mbostock/3795544) to the specified value in pixels. This value corresponds to the [Douglas–Peucker distance](http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm). If precision is not specified, returns the projection's current resampling precision which defaults to `√0.5 ≅ 0.70710…`.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "radius": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The radius parameter for the `airy` or `gingery` projection. The default value varies based on the projection type.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "ratio": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The ratio parameter for the `hill`, `hufnagel`, or `wagner` projections. The default value varies based on the projection type.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "reflectX": {
-          "type": "boolean"
+          "anyOf": [
+            {
+              "description": "Sets whether or not the x-dimension is reflected (negated) in the output.",
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "reflectY": {
-          "type": "boolean"
+          "anyOf": [
+            {
+              "description": "Sets whether or not the y-dimension is reflected (negated) in the output.",
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "rotate": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Vector2<number>"
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Vector2<number>"
+                },
+                {
+                  "$ref": "#/definitions/Vector3<number>"
+                }
+              ],
+              "description": "The projection's three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.)\n\n__Default value:__ `[0, 0, 0]`"
             },
             {
-              "$ref": "#/definitions/Vector3<number>"
+              "$ref": "#/definitions/ExprRef"
             }
-          ],
-          "description": "The projection's three-axis rotation to the specified angles, which must be a two- or three-element array of numbers [`lambda`, `phi`, `gamma`] specifying the rotation angles in degrees about each spherical axis. (These correspond to yaw, pitch and roll.)\n\n__Default value:__ `[0, 0, 0]`"
+          ]
         },
         "scale": {
-          "description": "The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections.",
-          "type": "number"
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "The projection’s scale (zoom) factor, overriding automatic fitting. The default scale is projection-specific. The scale factor corresponds linearly to the distance between projected points; however, scale factor values are not equivalent across projections."
         },
         "size": {
-          "$ref": "#/definitions/Vector2<number>"
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Vector2<number>",
+              "description": "Used in conjunction with fit, provides the width and height in pixels of the area to which the projection should be automatically fit."
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "spacing": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The spacing parameter for the `lagrange` projection.\n\n__Default value:__ `0.5`",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "tilt": {
-          "type": "number"
+          "anyOf": [
+            {
+              "description": "The tilt angle (in degrees) for the `satellite` projection.\n\n__Default value:__ `0`.",
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ]
         },
         "translate": {
-          "$ref": "#/definitions/Vector2<number>",
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Vector2<number>"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
           "description": "The projection’s translation offset as a two-element array `[tx, ty]`."
         },
         "type": {
-          "$ref": "#/definitions/ProjectionType",
-          "description": "The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n\n__Default value:__ `mercator`"
+          "anyOf": [
+            {
+              "$ref": "#/definitions/ProjectionType"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "The cartographic projection to use. This value is case-insensitive, for example `\"albers\"` and `\"Albers\"` indicate the same projection type. You can find all valid projection types [in the documentation](https://vega.github.io/vega-lite/docs/projection.html#projection-types).\n\n__Default value:__ `equalEarth`"
         }
       },
       "type": "object"
@@ -20939,14 +19999,9 @@
       "properties": {
         "as": {
           "description": "The output field names for the probability and quantile values.\n\n__Default value:__ `[\"prob\", \"value\"]`",
-          "items": [
-            {
-              "$ref": "#/definitions/FieldName"
-            },
-            {
-              "$ref": "#/definitions/FieldName"
-            }
-          ],
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
           "maxItems": 2,
           "minItems": 2,
           "type": "array"
@@ -21315,7 +20370,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "continuousBandSize": {
           "description": "The default size of the bars on continuous scales.\n\n__Default value:__ `5`",
@@ -21411,9 +20466,16 @@
           ]
         },
         "discreteBandSize": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/RelativeBandSize"
+            }
+          ],
           "description": "The default size of the bars with discrete dimensions. If unspecified, the default size is  `step-2`, which provides 2 pixel offset between bars.",
-          "minimum": 0,
-          "type": "number"
+          "minimum": 0
         },
         "dx": {
           "anyOf": [
@@ -21569,13 +20631,14 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -21583,7 +20646,7 @@
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -21648,7 +20711,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -21659,7 +20722,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -21681,7 +20745,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -21692,7 +20757,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "shape": {
           "anyOf": [
@@ -21705,7 +20771,7 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -21721,7 +20787,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
           "minimum": 0
         },
         "smooth": {
@@ -21903,14 +20969,14 @@
           ],
           "description": "The end angle of arc marks in radians. A value of 0 indicates up or “north”, increasing values proceed clockwise."
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
         "timeUnitBandPosition": {
           "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
           "type": "number"
         },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
         "tooltip": {
           "anyOf": [
             {
@@ -21932,7 +20998,7 @@
               "type": "null"
             }
           ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
         "url": {
           "anyOf": [
@@ -22024,28 +21090,18 @@
       "properties": {
         "as": {
           "description": "The output field names for the smoothed points generated by the regression transform.\n\n__Default value:__ The field names of the input x and y values.",
-          "items": [
-            {
-              "$ref": "#/definitions/FieldName"
-            },
-            {
-              "$ref": "#/definitions/FieldName"
-            }
-          ],
+          "items": {
+            "$ref": "#/definitions/FieldName"
+          },
           "maxItems": 2,
           "minItems": 2,
           "type": "array"
         },
         "extent": {
           "description": "A [min, max] domain over the independent (x) field for the starting and ending points of the generated trend line.",
-          "items": [
-            {
-              "type": "number"
-            },
-            {
-              "type": "number"
-            }
-          ],
+          "items": {
+            "type": "number"
+          },
           "maxItems": 2,
           "minItems": 2,
           "type": "array"
@@ -22092,6 +21148,19 @@
       ],
       "type": "object"
     },
+    "RelativeBandSize": {
+      "additionalProperties": false,
+      "properties": {
+        "band": {
+          "description": "The relative band size.  For example `0.5` means half of the band scale's band width.",
+          "type": "number"
+        }
+      },
+      "required": [
+        "band"
+      ],
+      "type": "object"
+    },
     "RepeatMapping": {
       "additionalProperties": false,
       "properties": {
@@ -22209,10 +21278,10 @@
         },
         "align": {
           "$ref": "#/definitions/LayoutAlign",
-          "description": "The alignment to apply to row/column facet's subplot. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\n__Default value:__ `\"all\"`."
+          "description": "The alignment to apply to row/column facet's subplot. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\n__Default value:__ `\"all\"`."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -22229,7 +21298,7 @@
               "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "center": {
           "description": "Boolean flag indicating if facet's subviews should be centered relative to their respective rows or columns.\n\n__Default value:__ `false`",
@@ -22240,7 +21309,14 @@
           "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
         },
         "header": {
-          "$ref": "#/definitions/Header",
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Header"
+            },
+            {
+              "type": "null"
+            }
+          ],
           "description": "An object defining properties of a facet's header."
         },
         "sort": {
@@ -22258,7 +21334,7 @@
               "type": "null"
             }
           ],
-          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` is not supported for `row` and `column`."
         },
         "spacing": {
           "description": "The spacing in pixels between facet's sub-views.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)",
@@ -22284,11 +21360,11 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -22333,7 +21409,7 @@
         },
         "bins": {
           "$ref": "#/definitions/ScaleBins",
-          "description": "Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are: - An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements. - A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries. - An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels."
+          "description": "Bin boundaries can be provided to scales as either an explicit array of bin boundaries or as a bin specification object. The legal values are:\n- An [array](../types/#Array) literal of bin boundary values. For example, `[0, 5, 10, 15, 20]`. The array must include both starting and ending boundaries. The previous example uses five values to indicate a total of four bin intervals: [0-5), [5-10), [10-15), [15-20]. Array literals may include signal references as elements.\n- A [bin specification object](https://vega.github.io/vega-lite/docs/scale.html#bins) that indicates the bin _step_ size, and optionally the _start_ and _stop_ boundaries.\n- An array of bin boundaries over the scale domain. If provided, axes and legends will use the bin boundaries to inform the choice of tick marks and text labels."
         },
         "clamp": {
           "anyOf": [
@@ -22389,7 +21465,7 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/SelectionExtent"
+              "$ref": "#/definitions/ParameterExtent"
             },
             {
               "$ref": "#/definitions/DomainUnionWith"
@@ -22398,7 +21474,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Customized domain values in the form of constant values or dynamic values driven by a selection.\n\n1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n\n- A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property. - An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise). - A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n\n2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n\n3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n\n4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n\n5) Domain can also takes an object defining a field or encoding of a selection that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain."
+          "description": "Customized domain values in the form of constant values or dynamic values driven by a parameter.\n\n1) Constant `domain` for _quantitative_ fields can take one of the following forms:\n\n- A two-element array with minimum and maximum values. To create a diverging scale, this two-element array can be combined with the `domainMid` property.\n- An array with more than two entries, for [Piecewise quantitative scales](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n- A string value `\"unaggregated\"`, if the input field is aggregated, to indicate that the domain should include the raw data values prior to the aggregation.\n\n2) Constant `domain` for _temporal_ fields can be a two-element array with minimum and maximum values, in the form of either timestamps or the [DateTime definition objects](https://vega.github.io/vega-lite/docs/types.html#datetime).\n\n3) Constant `domain` for _ordinal_ and _nominal_ fields can be an array that lists valid input values.\n\n4) To combine (union) specified constant domain with the field's values, `domain` can be an object with a `unionWith` property that specify constant domain to be combined. For example, `domain: {unionWith: [0, 100]}` for a quantitative scale means that the scale domain always includes `[0, 100]`, but will include other values in the fields beyond `[0, 100]`.\n\n5) Domain can also takes an object defining a field or encoding of a parameter that [interactively determines](https://vega.github.io/vega-lite/docs/selection.html#scale-domains) the scale domain."
         },
         "domainMax": {
           "anyOf": [
@@ -22482,7 +21558,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n\nFor quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n\nFor temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n\n__Default value:__ `true` for unbinned _quantitative_ fields; `false` otherwise."
+          "description": "Extending the domain so that it starts and ends on nice round values. This method typically modifies the scale’s domain, and may only extend the bounds to the nearest round value. Nicing is useful if the domain is computed from data and may be irregular. For example, for a domain of _[0.201479…, 0.996679…]_, a nice domain might be _[0.2, 1.0]_.\n\nFor quantitative scales such as linear, `nice` can be either a boolean flag or a number. If `nice` is a number, it will represent a desired tick count. This allows greater control over the step size used to extend the bounds, guaranteeing that the returned ticks will exactly cover the domain.\n\nFor temporal fields with time and utc scales, the `nice` value can be a string indicating the desired time interval. Legal values are `\"millisecond\"`, `\"second\"`, `\"minute\"`, `\"hour\"`, `\"day\"`, `\"week\"`, `\"month\"`, and `\"year\"`. Alternatively, `time` and `utc` scales can accept an object-valued interval specifier of the form `{\"interval\": \"month\", \"step\": 3}`, which includes a desired number of interval steps. Here, the domain would snap to quarter (Jan, Apr, Jul, Oct) boundaries.\n\n__Default value:__ `true` for unbinned _quantitative_ fields without explicit domain bounds; `false` otherwise."
         },
         "padding": {
           "anyOf": [
@@ -22547,19 +21623,10 @@
                   }
                 ]
               },
-              "type": "array"
-            },
-            {
-              "additionalProperties": false,
-              "properties": {
-                "field": {
-                  "type": "string"
-                }
-              },
-              "required": [
-                "field"
-              ],
-              "type": "object"
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/FieldRange"
             }
           ],
           "description": "The range of the scale. One of:\n\n- A string indicating a [pre-defined named scale range](https://vega.github.io/vega-lite/docs/scale.html#range-config) (e.g., example, `\"symbol\"`, or `\"diverging\"`).\n\n- For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous), two-element array indicating  minimum and maximum values, or an array with more than two entries for specifying a [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).\n\n- For [discrete](https://vega.github.io/vega-lite/docs/scale.html#discrete) and [discretizing](https://vega.github.io/vega-lite/docs/scale.html#discretizing) scales, an array of desired output values or an object with a `field` property representing the range values.  For example, if a field `color` contains CSS color names, we can set `range` to `{field: \"color\"}`.\n\n__Notes:__\n\n1) For color scales you can also specify a color [`scheme`](https://vega.github.io/vega-lite/docs/scale.html#scheme) instead of `range`.\n\n2) Any directly specified `range` for `x` and `y` channels will be ignored. Range can be customized via the view's corresponding [size](https://vega.github.io/vega-lite/docs/size.html) (`width` and `height`)."
@@ -22692,7 +21759,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default inner padding for `x` and `y` band-ordinal scales.\n\n__Default value:__ - `barBandPaddingInner` for bar marks (`0.1` by default) - `rectBandPaddingInner` for rect and other marks (`0` by default)",
+          "description": "Default inner padding for `x` and `y` band scales.\n\n__Default value:__\n- `nestedOffsetPaddingInner` for x/y scales with nested x/y offset scales.\n- `barBandPaddingInner` for bar marks (`0.1` by default)\n- `rectBandPaddingInner` for rect and other marks (`0` by default)",
           "maximum": 1,
           "minimum": 0
         },
@@ -22705,7 +21772,33 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default outer padding for `x` and `y` band-ordinal scales.\n\n__Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)",
+          "description": "Default outer padding for `x` and `y` band scales.\n\n__Default value:__ `paddingInner/2` (which makes _width/height = number of unique values * step_)",
+          "maximum": 1,
+          "minimum": 0
+        },
+        "bandWithNestedOffsetPaddingInner": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "Default inner padding for `x` and `y` band scales with nested `xOffset` and `yOffset` encoding.\n\n__Default value:__ `0.2`",
+          "maximum": 1,
+          "minimum": 0
+        },
+        "bandWithNestedOffsetPaddingOuter": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "Default outer padding for `x` and `y` band scales with nested `xOffset` and `yOffset` encoding.\n\n__Default value:__ `0.2`",
           "maximum": 1,
           "minimum": 0
         },
@@ -22742,7 +21835,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default padding for continuous scales.\n\n__Default:__ `5` for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.",
+          "description": "Default padding for continuous x/y scales.\n\n__Default:__ The bar width for continuous x-scale of a vertical bar and continuous y-scale of a horizontal bar.; `0` otherwise.",
           "minimum": 0
         },
         "maxBandSize": {
@@ -22797,6 +21890,28 @@
           "minimum": 0,
           "type": "number"
         },
+        "offsetBandPaddingInner": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "Default padding inner for xOffset/yOffset's band scales.\n\n__Default Value:__ `0`"
+        },
+        "offsetBandPaddingOuter": {
+          "anyOf": [
+            {
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            }
+          ],
+          "description": "Default padding outer for xOffset/yOffset's band scales.\n\n__Default Value:__ `0`"
+        },
         "pointPadding": {
           "anyOf": [
             {
@@ -22858,6 +21973,140 @@
             }
           ],
           "description": "Reverse x-scale by default (useful for right-to-left charts)."
+        },
+        "zero": {
+          "description": "Default `scale.zero` for [`continuous`](https://vega.github.io/vega-lite/docs/scale.html#continuous) scales except for (1) x/y-scales of non-ranged bar or area charts and (2) size scales.\n\n__Default value:__ `true`",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "ScaleDatumDef": {
+      "additionalProperties": false,
+      "properties": {
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "datum": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/PrimitiveValue"
+            },
+            {
+              "$ref": "#/definitions/DateTime"
+            },
+            {
+              "$ref": "#/definitions/ExprRef"
+            },
+            {
+              "$ref": "#/definitions/RepeatRef"
+            }
+          ],
+          "description": "A constant value in data domain."
+        },
+        "scale": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Scale"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+        },
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        },
+        "type": {
+          "$ref": "#/definitions/Type",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+        }
+      },
+      "type": "object"
+    },
+    "ScaleFieldDef": {
+      "additionalProperties": false,
+      "properties": {
+        "aggregate": {
+          "$ref": "#/definitions/Aggregate",
+          "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+        },
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+          "maximum": 1,
+          "minimum": 0,
+          "type": "number"
+        },
+        "bin": {
+          "anyOf": [
+            {
+              "type": "boolean"
+            },
+            {
+              "$ref": "#/definitions/BinParams"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+        },
+        "field": {
+          "$ref": "#/definitions/Field",
+          "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+        },
+        "scale": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Scale"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+        },
+        "sort": {
+          "$ref": "#/definitions/Sort",
+          "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+        },
+        "timeUnit": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/TimeUnit"
+            },
+            {
+              "$ref": "#/definitions/TimeUnitParams"
+            }
+          ],
+          "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+        },
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "type": "null"
+            }
+          ],
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+        },
+        "type": {
+          "$ref": "#/definitions/StandardType",
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -22940,8 +22189,14 @@
         "x": {
           "$ref": "#/definitions/ResolveMode"
         },
+        "xOffset": {
+          "$ref": "#/definitions/ResolveMode"
+        },
         "y": {
           "$ref": "#/definitions/ResolveMode"
+        },
+        "yOffset": {
+          "$ref": "#/definitions/ResolveMode"
         }
       },
       "type": "object"
@@ -22999,14 +22254,14 @@
           "$ref": "#/definitions/Aggregate",
           "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
         },
         "bin": {
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
           "type": "null"
         },
         "field": {
@@ -23033,7 +22288,7 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         }
       },
       "type": "object"
@@ -23042,71 +22297,16 @@
       "additionalProperties": false,
       "properties": {
         "interval": {
-          "$ref": "#/definitions/IntervalSelectionConfig",
-          "description": "The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations for an interval selection definition (except `type`) may be specified here.\n\nFor instance, setting `interval` to `{\"translate\": false}` disables the ability to move interval selections by default."
+          "$ref": "#/definitions/IntervalSelectionConfigWithoutType",
+          "description": "The default definition for an [`interval`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations for an interval selection definition (except `type`) may be specified here.\n\nFor instance, setting `interval` to `{\"translate\": false}` disables the ability to move interval selections by default."
         },
-        "multi": {
-          "$ref": "#/definitions/MultiSelectionConfig",
-          "description": "The default definition for a [`multi`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations for a multi selection definition (except `type`) may be specified here.\n\nFor instance, setting `multi` to `{\"toggle\": \"event.altKey\"}` adds additional values to multi selections when clicking with the alt-key pressed by default."
-        },
-        "single": {
-          "$ref": "#/definitions/SingleSelectionConfig",
-          "description": "The default definition for a [`single`](https://vega.github.io/vega-lite/docs/selection.html#type) selection. All properties and transformations   for a single selection definition (except `type`) may be specified here.\n\nFor instance, setting `single` to `{\"on\": \"dblclick\"}` populates single selections on double-click by default."
+        "point": {
+          "$ref": "#/definitions/PointSelectionConfigWithoutType",
+          "description": "The default definition for a [`point`](https://vega.github.io/vega-lite/docs/parameter.html#select) selection. All properties and transformations  for a point selection definition (except `type`) may be specified here.\n\nFor instance, setting `point` to `{\"on\": \"dblclick\"}` populates point selections on double-click by default."
         }
       },
       "type": "object"
     },
-    "SelectionDef": {
-      "anyOf": [
-        {
-          "$ref": "#/definitions/SingleSelection"
-        },
-        {
-          "$ref": "#/definitions/MultiSelection"
-        },
-        {
-          "$ref": "#/definitions/IntervalSelection"
-        }
-      ]
-    },
-    "SelectionExtent": {
-      "anyOf": [
-        {
-          "additionalProperties": false,
-          "properties": {
-            "field": {
-              "$ref": "#/definitions/FieldName",
-              "description": "The field name to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html) over multiple fields or encodings."
-            },
-            "selection": {
-              "description": "The name of a selection.",
-              "type": "string"
-            }
-          },
-          "required": [
-            "selection"
-          ],
-          "type": "object"
-        },
-        {
-          "additionalProperties": false,
-          "properties": {
-            "encoding": {
-              "$ref": "#/definitions/SingleDefUnitChannel",
-              "description": "The encoding channel to extract selected values for, when a selection is [projected](https://vega.github.io/vega-lite/docs/project.html) over multiple fields or encodings."
-            },
-            "selection": {
-              "description": "The name of a selection.",
-              "type": "string"
-            }
-          },
-          "required": [
-            "selection"
-          ],
-          "type": "object"
-        }
-      ]
-    },
     "SelectionInit": {
       "anyOf": [
         {
@@ -23128,27 +22328,80 @@
         {
           "$ref": "#/definitions/Vector2<string>"
         },
-        {
-          "$ref": "#/definitions/Vector2<DateTime>"
-        }
-      ]
-    },
-    "SelectionInitIntervalMapping": {
-      "$ref": "#/definitions/Dict<SelectionInitInterval>"
-    },
-    "SelectionInitMapping": {
-      "$ref": "#/definitions/Dict<SelectionInit>"
-    },
-    "SelectionPredicate": {
-      "additionalProperties": false,
-      "properties": {
-        "selection": {
-          "$ref": "#/definitions/SelectionComposition",
-          "description": "Filter using a selection name or a logical composition of selection names."
+        {
+          "$ref": "#/definitions/Vector2<DateTime>"
+        }
+      ]
+    },
+    "SelectionInitIntervalMapping": {
+      "$ref": "#/definitions/Dict<SelectionInitInterval>"
+    },
+    "SelectionInitMapping": {
+      "$ref": "#/definitions/Dict<SelectionInit>"
+    },
+    "SelectionParameter": {
+      "additionalProperties": false,
+      "properties": {
+        "bind": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Binding"
+            },
+            {
+              "additionalProperties": {
+                "$ref": "#/definitions/Binding"
+              },
+              "type": "object"
+            },
+            {
+              "$ref": "#/definitions/LegendBinding"
+            },
+            {
+              "const": "scales",
+              "type": "string"
+            }
+          ],
+          "description": "When set, a selection is populated by input elements (also known as dynamic query widgets) or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding.\n\nQuery widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind) or can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation."
+        },
+        "name": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Required. A unique name for the selection parameter. Selection names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\"."
+        },
+        "select": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/SelectionType"
+            },
+            {
+              "$ref": "#/definitions/PointSelectionConfig"
+            },
+            {
+              "$ref": "#/definitions/IntervalSelectionConfig"
+            }
+          ],
+          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n\n- `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n- `\"interval\"` -- to select a continuous range of data values on `drag`."
+        },
+        "value": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/SelectionInit"
+            },
+            {
+              "items": {
+                "$ref": "#/definitions/SelectionInitMapping"
+              },
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/SelectionInitIntervalMapping"
+            }
+          ],
+          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/selection.html#project) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/value.html) documentation."
         }
       },
       "required": [
-        "selection"
+        "name",
+        "select"
       ],
       "type": "object"
     },
@@ -23160,6 +22413,13 @@
       ],
       "type": "string"
     },
+    "SelectionType": {
+      "enum": [
+        "point",
+        "interval"
+      ],
+      "type": "string"
+    },
     "SequenceGenerator": {
       "additionalProperties": false,
       "properties": {
@@ -23442,8 +22702,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -23460,7 +22720,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -23476,7 +22736,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -23493,10 +22753,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -23543,7 +22803,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -23565,20 +22825,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -23601,8 +22861,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -23619,7 +22879,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -23635,7 +22895,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -23652,10 +22912,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -23702,7 +22962,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -23724,20 +22984,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -23766,8 +23026,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -23788,7 +23048,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -23804,7 +23064,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -23821,10 +23081,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "field": {
               "$ref": "#/definitions/Field",
@@ -23836,17 +23096,13 @@
                   "type": "string"
                 },
                 {
-                  "$ref": "#/definitions/Dict<unknown>"
+                  "$ref": "#/definitions/Dict"
                 }
               ],
-              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
             },
             "formatType": {
-              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-              "type": "string"
-            },
-            "labelExpr": {
-              "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
+              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
               "type": "string"
             },
             "timeUnit": {
@@ -23869,11 +23125,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/StandardType",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -23913,8 +23169,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -23931,7 +23187,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -23947,7 +23203,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -23964,10 +23220,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -24014,7 +23270,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -24036,20 +23292,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -24078,8 +23334,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -24096,7 +23352,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -24112,7 +23368,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -24129,10 +23385,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -24179,7 +23435,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -24201,20 +23457,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -24237,8 +23493,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -24259,7 +23515,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -24275,7 +23531,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -24292,10 +23548,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "field": {
               "$ref": "#/definitions/Field",
@@ -24307,17 +23563,13 @@
                   "type": "string"
                 },
                 {
-                  "$ref": "#/definitions/Dict<unknown>"
+                  "$ref": "#/definitions/Dict"
                 }
               ],
-              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
             },
             "formatType": {
-              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-              "type": "string"
-            },
-            "labelExpr": {
-              "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
+              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
               "type": "string"
             },
             "timeUnit": {
@@ -24340,11 +23592,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/StandardType",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -24370,8 +23622,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -24392,7 +23644,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "field": {
               "$ref": "#/definitions/Field",
@@ -24418,11 +23670,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/StandardType",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
           },
           "type": "object"
@@ -24434,14 +23686,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -24485,32 +23737,21 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "const": "quantitative",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.",
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.",
                   "type": "string"
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-                }
-              ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-            },
-            "value": {
-              "anyOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/definitions/ExprRef"
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
           },
           "type": "object"
@@ -24522,14 +23763,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -24573,11 +23814,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -24608,14 +23849,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -24659,32 +23900,21 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "const": "quantitative",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.",
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation.",
                   "type": "string"
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
-            },
-            "value": {
-              "anyOf": [
-                {
-                  "type": "number"
-                },
-                {
-                  "$ref": "#/definitions/ExprRef"
-                }
-              ],
-              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             }
           },
           "type": "object"
@@ -24696,14 +23926,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -24747,11 +23977,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -24782,8 +24012,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -24800,7 +24030,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -24816,7 +24046,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -24833,10 +24063,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -24883,7 +24113,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -24905,20 +24135,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -24949,7 +24179,7 @@
               "$ref": "#/definitions/OrderValueDef"
             }
           ],
-          "description": "Order of the marks. - For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order). - For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources. - Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
+          "description": "Order of the marks.\n- For stacked marks, this `order` channel encodes [stack order](https://vega.github.io/vega-lite/docs/stack.html#order).\n- For line and trail marks, this `order` channel encodes order of data points in the lines. This can be useful for creating [a connected scatterplot](https://vega.github.io/vega-lite/examples/connected_scatterplot.html). Setting `order` to `{\"value\": null}` makes the line marks use the original order in the data sources.\n- Otherwise, this `order` channel encodes layer order of the marks.\n\n__Note__: In aggregate plots, `order` field should be `aggregate`d to avoid creating additional aggregation grouping."
         },
         "radius": {
           "additionalProperties": false,
@@ -24958,8 +24188,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -24980,7 +24210,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "datum": {
               "anyOf": [
@@ -25016,7 +24246,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "stack": {
               "anyOf": [
@@ -25030,7 +24260,7 @@
                   "type": "boolean"
                 }
               ],
-              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -25052,20 +24282,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -25096,14 +24326,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -25147,11 +24377,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -25182,8 +24412,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -25200,7 +24430,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -25216,7 +24446,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -25233,10 +24463,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -25283,7 +24513,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -25305,20 +24535,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/TypeForShape",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -25344,8 +24574,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -25362,7 +24592,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -25378,7 +24608,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -25395,10 +24625,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -25445,7 +24675,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -25467,20 +24697,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -25503,8 +24733,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -25521,7 +24751,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -25537,7 +24767,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -25554,10 +24784,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -25604,7 +24834,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -25626,20 +24856,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -25668,8 +24898,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -25686,7 +24916,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -25702,7 +24932,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -25719,10 +24949,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -25769,7 +24999,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -25791,20 +25021,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -25830,8 +25060,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -25848,7 +25078,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -25864,7 +25094,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -25881,10 +25111,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -25931,7 +25161,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -25953,20 +25183,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -25989,8 +25219,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -26007,7 +25237,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -26023,7 +25253,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -26040,10 +25270,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -26090,7 +25320,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -26112,20 +25342,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -26148,8 +25378,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -26170,7 +25400,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -26186,7 +25416,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -26203,10 +25433,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "datum": {
               "anyOf": [
@@ -26235,17 +25465,13 @@
                   "type": "string"
                 },
                 {
-                  "$ref": "#/definitions/Dict<unknown>"
+                  "$ref": "#/definitions/Dict"
                 }
               ],
-              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
             },
             "formatType": {
-              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-              "type": "string"
-            },
-            "labelExpr": {
-              "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
+              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
               "type": "string"
             },
             "timeUnit": {
@@ -26268,20 +25494,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -26304,8 +25530,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -26326,7 +25552,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "datum": {
               "anyOf": [
@@ -26362,7 +25588,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "stack": {
               "anyOf": [
@@ -26376,7 +25602,7 @@
                   "type": "boolean"
                 }
               ],
-              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -26398,20 +25624,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -26442,14 +25668,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -26493,11 +25719,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -26548,8 +25774,8 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -26570,7 +25796,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "condition": {
               "anyOf": [
@@ -26586,7 +25812,7 @@
                       "type": "array"
                     }
                   ],
-                  "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+                  "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
                 },
                 {
                   "anyOf": [
@@ -26603,10 +25829,10 @@
                       "type": "array"
                     }
                   ],
-                  "description": "A field definition or one or more value definition(s) with a selection predicate."
+                  "description": "A field definition or one or more value definition(s) with a parameter predicate."
                 }
               ],
-              "description": "One or more value definition(s) with [a selection or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
+              "description": "One or more value definition(s) with [a parameter or a test predicate](https://vega.github.io/vega-lite/docs/condition.html).\n\n__Note:__ A field definition's `condition` property can only contain [conditional value definitions](https://vega.github.io/vega-lite/docs/condition.html#value) since Vega-Lite only allows at most one encoded field per encoding channel."
             },
             "field": {
               "$ref": "#/definitions/Field",
@@ -26618,17 +25844,13 @@
                   "type": "string"
                 },
                 {
-                  "$ref": "#/definitions/Dict<unknown>"
+                  "$ref": "#/definitions/Dict"
                 }
               ],
-              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+              "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
             },
             "formatType": {
-              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-              "type": "string"
-            },
-            "labelExpr": {
-              "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
+              "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
               "type": "string"
             },
             "timeUnit": {
@@ -26651,11 +25873,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/StandardType",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -26692,8 +25914,8 @@
               ],
               "description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -26714,7 +25936,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "datum": {
               "anyOf": [
@@ -26761,7 +25983,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "stack": {
               "anyOf": [
@@ -26775,7 +25997,7 @@
                   "type": "boolean"
                 }
               ],
-              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -26797,20 +26019,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -26841,14 +26063,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -26892,11 +26114,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -26927,14 +26149,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "field": {
@@ -26961,7 +26183,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "value": {
               "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
@@ -26977,14 +26199,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "field": {
@@ -27011,7 +26233,112 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "value": {
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
+              "type": "number"
+            }
+          },
+          "type": "object"
+        },
+        "xOffset": {
+          "additionalProperties": false,
+          "properties": {
+            "aggregate": {
+              "$ref": "#/definitions/Aggregate",
+              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+            },
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
+            },
+            "bin": {
+              "anyOf": [
+                {
+                  "type": "boolean"
+                },
+                {
+                  "$ref": "#/definitions/BinParams"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+            },
+            "datum": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/PrimitiveValue"
+                },
+                {
+                  "$ref": "#/definitions/DateTime"
+                },
+                {
+                  "$ref": "#/definitions/ExprRef"
+                },
+                {
+                  "$ref": "#/definitions/RepeatRef"
+                }
+              ],
+              "description": "A constant value in data domain."
+            },
+            "field": {
+              "$ref": "#/definitions/Field",
+              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+            },
+            "scale": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Scale"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+            },
+            "sort": {
+              "$ref": "#/definitions/Sort",
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+            },
+            "timeUnit": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/TimeUnit"
+                },
+                {
+                  "$ref": "#/definitions/TimeUnitParams"
+                }
+              ],
+              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+            },
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/StandardType",
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                },
+                {
+                  "$ref": "#/definitions/Type",
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                }
+              ],
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
@@ -27038,8 +26365,8 @@
               ],
               "description": "An object defining properties of axis's gridlines, ticks and labels. If `null`, the axis for the encoding channel will be removed.\n\n__Default value:__ If undefined, default [axis properties](https://vega.github.io/vega-lite/docs/axis.html) are applied.\n\n__See also:__ [`axis`](https://vega.github.io/vega-lite/docs/axis.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
@@ -27060,7 +26387,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
             },
             "datum": {
               "anyOf": [
@@ -27107,7 +26434,7 @@
             },
             "sort": {
               "$ref": "#/definitions/Sort",
-              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following: - `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript. - [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`. - [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field. - [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`). - `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
             },
             "stack": {
               "anyOf": [
@@ -27121,7 +26448,7 @@
                   "type": "boolean"
                 }
               ],
-              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values: - `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart). - `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized). <br/> -`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)). - `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
+              "description": "Type of stacking offset if the field should be stacked. `stack` is only applicable for `x`, `y`, `theta`, and `radius` channels with continuous domains. For example, `stack` of `y` can be used to customize stacking for a vertical bar chart.\n\n`stack` can be one of the following values:\n- `\"zero\"` or `true`: stacking with baseline offset at zero value of the scale (for creating typical stacked [bar](https://vega.github.io/vega-lite/docs/stack.html#bar) and [area](https://vega.github.io/vega-lite/docs/stack.html#area) chart).\n- `\"normalize\"` - stacking with normalized domain (for creating [normalized stacked bar and area charts](https://vega.github.io/vega-lite/docs/stack.html#normalized) and pie charts [with percentage tooltip](https://vega.github.io/vega-lite/docs/arc.html#tooltip)). <br/>\n-`\"center\"` - stacking with center baseline (for [streamgraph](https://vega.github.io/vega-lite/docs/stack.html#streamgraph)).\n- `null` or `false` - No-stacking. This will produce layered [bar](https://vega.github.io/vega-lite/docs/stack.html#layered-bar-chart) and area chart.\n\n__Default value:__ `zero` for plots with all of the following conditions are true: (1) the mark is `bar`, `area`, or `arc`; (2) the stacked measure channel (x or y) has a linear scale; (3) At least one of non-position channels mapped to an unaggregated field that is different from x and y. Otherwise, `null` by default.\n\n__See also:__ [`stack`](https://vega.github.io/vega-lite/docs/stack.html) documentation."
             },
             "timeUnit": {
               "anyOf": [
@@ -27143,20 +26470,20 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "anyOf": [
                 {
                   "$ref": "#/definitions/StandardType",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 },
                 {
                   "$ref": "#/definitions/Type",
-                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
                 }
               ],
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -27187,14 +26514,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "datum": {
@@ -27238,11 +26565,11 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "type": {
               "$ref": "#/definitions/Type",
-              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "anyOf": [
@@ -27273,14 +26600,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "field": {
@@ -27307,7 +26634,7 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
             },
             "value": {
               "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
@@ -27323,14 +26650,14 @@
               "$ref": "#/definitions/Aggregate",
               "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
             },
-            "band": {
-              "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
               "maximum": 1,
               "minimum": 0,
               "type": "number"
             },
             "bin": {
-              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation.",
               "type": "null"
             },
             "field": {
@@ -27357,7 +26684,112 @@
                   "type": "null"
                 }
               ],
-              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "value": {
+              "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
+              "type": "number"
+            }
+          },
+          "type": "object"
+        },
+        "yOffset": {
+          "additionalProperties": false,
+          "properties": {
+            "aggregate": {
+              "$ref": "#/definitions/Aggregate",
+              "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
+            },
+            "bandPosition": {
+              "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
+              "maximum": 1,
+              "minimum": 0,
+              "type": "number"
+            },
+            "bin": {
+              "anyOf": [
+                {
+                  "type": "boolean"
+                },
+                {
+                  "$ref": "#/definitions/BinParams"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+            },
+            "datum": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/PrimitiveValue"
+                },
+                {
+                  "$ref": "#/definitions/DateTime"
+                },
+                {
+                  "$ref": "#/definitions/ExprRef"
+                },
+                {
+                  "$ref": "#/definitions/RepeatRef"
+                }
+              ],
+              "description": "A constant value in data domain."
+            },
+            "field": {
+              "$ref": "#/definitions/Field",
+              "description": "__Required.__ A string defining the name of the field from which to pull a data value or an object defining iterated values from the [`repeat`](https://vega.github.io/vega-lite/docs/repeat.html) operator.\n\n__See also:__ [`field`](https://vega.github.io/vega-lite/docs/field.html) documentation.\n\n__Notes:__ 1)  Dots (`.`) and brackets (`[` and `]`) can be used to access nested objects (e.g., `\"field\": \"foo.bar\"` and `\"field\": \"foo['bar']\"`). If field names contain dots or brackets but are not nested, you can use `\\\\` to escape dots and brackets (e.g., `\"a\\\\.b\"` and `\"a\\\\[0\\\\]\"`). See more details about escaping in the [field documentation](https://vega.github.io/vega-lite/docs/field.html). 2) `field` is not required if `aggregate` is `count`."
+            },
+            "scale": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Scale"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "An object defining properties of the channel's scale, which is the function that transforms values in the data domain (numbers, dates, strings, etc) to visual values (pixels, colors, sizes) of the encoding channels.\n\nIf `null`, the scale will be [disabled and the data value will be directly encoded](https://vega.github.io/vega-lite/docs/scale.html#disable).\n\n__Default value:__ If undefined, default [scale properties](https://vega.github.io/vega-lite/docs/scale.html) are applied.\n\n__See also:__ [`scale`](https://vega.github.io/vega-lite/docs/scale.html) documentation."
+            },
+            "sort": {
+              "$ref": "#/definitions/Sort",
+              "description": "Sort order for the encoded field.\n\nFor continuous fields (quantitative or temporal), `sort` can be either `\"ascending\"` or `\"descending\"`.\n\nFor discrete fields, `sort` can be one of the following:\n- `\"ascending\"` or `\"descending\"` -- for sorting by the values' natural order in JavaScript.\n- [A string indicating an encoding channel name to sort by](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding) (e.g., `\"x\"` or `\"y\"`) with an optional minus prefix for descending sort (e.g., `\"-x\"` to sort by x-field, descending). This channel string is short-form of [a sort-by-encoding definition](https://vega.github.io/vega-lite/docs/sort.html#sort-by-encoding). For example, `\"sort\": \"-x\"` is equivalent to `\"sort\": {\"encoding\": \"x\", \"order\": \"descending\"}`.\n- [A sort field definition](https://vega.github.io/vega-lite/docs/sort.html#sort-field) for sorting by another field.\n- [An array specifying the field values in preferred order](https://vega.github.io/vega-lite/docs/sort.html#sort-array). In this case, the sort order will obey the values in the array, followed by any unspecified values in their original order. For discrete time field, values in the sort array can be [date-time definition objects](types#datetime). In addition, for time units `\"month\"` and `\"day\"`, the values can be the month or day names (case insensitive) or their 3-letter initials (e.g., `\"Mon\"`, `\"Tue\"`).\n- `null` indicating no sort.\n\n__Default value:__ `\"ascending\"`\n\n__Note:__ `null` and sorting by another channel is not supported for `row` and `column`.\n\n__See also:__ [`sort`](https://vega.github.io/vega-lite/docs/sort.html) documentation."
+            },
+            "timeUnit": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/TimeUnit"
+                },
+                {
+                  "$ref": "#/definitions/TimeUnitParams"
+                }
+              ],
+              "description": "Time unit (e.g., `year`, `yearmonth`, `month`, `hours`) for a temporal field. or [a temporal field that gets casted as ordinal](https://vega.github.io/vega-lite/docs/type.html#cast).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html) documentation."
+            },
+            "title": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/Text"
+                },
+                {
+                  "type": "null"
+                }
+              ],
+              "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+            },
+            "type": {
+              "anyOf": [
+                {
+                  "$ref": "#/definitions/StandardType",
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                },
+                {
+                  "$ref": "#/definitions/Type",
+                  "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+                }
+              ],
+              "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
             },
             "value": {
               "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity).",
@@ -27373,6 +26805,8 @@
       "enum": [
         "x",
         "y",
+        "xOffset",
+        "yOffset",
         "x2",
         "y2",
         "longitude",
@@ -27402,178 +26836,6 @@
       ],
       "type": "string"
     },
-    "SingleSelection": {
-      "additionalProperties": false,
-      "properties": {
-        "bind": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Binding"
-            },
-            {
-              "additionalProperties": {
-                "$ref": "#/definitions/Binding"
-              },
-              "type": "object"
-            },
-            {
-              "$ref": "#/definitions/LegendBinding"
-            }
-          ],
-          "description": "When set, a selection is populated by input elements (also known as dynamic query widgets) or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding.\n\nQuery widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind) or can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation."
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection. When set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "$ref": "#/definitions/SelectionInitMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        },
-        "type": {
-          "const": "single",
-          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports three selection types:\n\n- `\"single\"` -- to select a single discrete data value on `click`. - `\"multi\"` -- to select multiple discrete data value; the first value is selected on `click` and additional values toggled on shift-`click`. - `\"interval\"` -- to select a continuous range of data values on `drag`.",
-          "type": "string"
-        }
-      },
-      "required": [
-        "type"
-      ],
-      "type": "object"
-    },
-    "SingleSelectionConfig": {
-      "additionalProperties": false,
-      "properties": {
-        "bind": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Binding"
-            },
-            {
-              "additionalProperties": {
-                "$ref": "#/definitions/Binding"
-              },
-              "type": "object"
-            },
-            {
-              "$ref": "#/definitions/LegendBinding"
-            }
-          ],
-          "description": "When set, a selection is populated by input elements (also known as dynamic query widgets) or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding.\n\nQuery widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind) or can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation."
-        },
-        "clear": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            },
-            {
-              "type": "boolean"
-            }
-          ],
-          "description": "Clears the selection, emptying it of all values. Can be a [Event Stream](https://vega.github.io/vega/docs/event-streams/) or `false` to disable.\n\n__Default value:__ `dblclick`.\n\n__See also:__ [`clear`](https://vega.github.io/vega-lite/docs/clear.html) documentation."
-        },
-        "empty": {
-          "description": "By default, `all` data values are considered to lie within an empty selection. When set to `none`, empty selections contain no data values.",
-          "enum": [
-            "all",
-            "none"
-          ],
-          "type": "string"
-        },
-        "encodings": {
-          "description": "An array of encoding channels. The corresponding data field values must match for a data tuple to fall within the selection.\n\n__See also:__ [`encodings`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/SingleDefUnitChannel"
-          },
-          "type": "array"
-        },
-        "fields": {
-          "description": "An array of field names whose values must match for a data tuple to fall within the selection.\n\n__See also:__ [`fields`](https://vega.github.io/vega-lite/docs/project.html) documentation.",
-          "items": {
-            "$ref": "#/definitions/FieldName"
-          },
-          "type": "array"
-        },
-        "init": {
-          "$ref": "#/definitions/SelectionInitMapping",
-          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/project.html) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/init.html) documentation."
-        },
-        "nearest": {
-          "description": "When true, an invisible voronoi diagram is computed to accelerate discrete selection. The data value _nearest_ the mouse cursor is added to the selection.\n\n__See also:__ [`nearest`](https://vega.github.io/vega-lite/docs/nearest.html) documentation.",
-          "type": "boolean"
-        },
-        "on": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Stream"
-            },
-            {
-              "type": "string"
-            }
-          ],
-          "description": "A [Vega event stream](https://vega.github.io/vega/docs/event-streams/) (object or selector) that triggers the selection. For interval selections, the event stream must specify a [start and end](https://vega.github.io/vega/docs/event-streams/#between-filters)."
-        },
-        "resolve": {
-          "$ref": "#/definitions/SelectionResolution",
-          "description": "With layered and multi-view displays, a strategy that determines how selections' data queries are resolved when applied in a filter transform, conditional encoding rule, or scale domain.\n\n__See also:__ [`resolve`](https://vega.github.io/vega-lite/docs/selection-resolve.html) documentation."
-        }
-      },
-      "type": "object"
-    },
     "SingleTimeUnit": {
       "anyOf": [
         {
@@ -27764,14 +27026,9 @@
               "$ref": "#/definitions/FieldName"
             },
             {
-              "items": [
-                {
-                  "$ref": "#/definitions/FieldName"
-                },
-                {
-                  "$ref": "#/definitions/FieldName"
-                }
-              ],
+              "items": {
+                "$ref": "#/definitions/FieldName"
+              },
               "maxItems": 2,
               "minItems": 2,
               "type": "array"
@@ -27826,6 +27083,10 @@
     "Step": {
       "additionalProperties": false,
       "properties": {
+        "for": {
+          "$ref": "#/definitions/StepFor",
+          "description": "Whether to apply the step to position scale or offset scale when there are both `x` and `xOffset` or both `y` and `yOffset` encodings."
+        },
         "step": {
           "description": "The size (width/height) per discrete step.",
           "type": "number"
@@ -27836,6 +27097,13 @@
       ],
       "type": "object"
     },
+    "StepFor": {
+      "enum": [
+        "position",
+        "offset"
+      ],
+      "type": "string"
+    },
     "Stream": {
       "anyOf": [
         {
@@ -27856,8 +27124,8 @@
           "$ref": "#/definitions/Aggregate",
           "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -27878,7 +27146,7 @@
               "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "field": {
           "$ref": "#/definitions/Field",
@@ -27890,17 +27158,13 @@
               "type": "string"
             },
             {
-              "$ref": "#/definitions/Dict<unknown>"
+              "$ref": "#/definitions/Dict"
             }
           ],
-          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format). - If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
+          "description": "When used with the default `\"number\"` and `\"time\"` format type, the text formatting pattern for labels of guides (axes, legends, headers) and text marks.\n\n- If the format type is `\"number\"` (e.g., for quantitative fields), this is D3's [number format pattern](https://github.com/d3/d3-format#locale_format).\n- If the format type is `\"time\"` (e.g., for temporal fields), this is D3's [time format pattern](https://github.com/d3/d3-time-format#locale_format).\n\nSee the [format documentation](https://vega.github.io/vega-lite/docs/format.html) for more examples.\n\nWhen used with a [custom `formatType`](https://vega.github.io/vega-lite/docs/config.html#custom-format-type), this value will be passed as `format` alongside `datum.value` to the registered function.\n\n__Default value:__  Derived from [numberFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for number format and from [timeFormat](https://vega.github.io/vega-lite/docs/config.html#format) config for time format."
         },
         "formatType": {
-          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__ - `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`. - `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
-          "type": "string"
-        },
-        "labelExpr": {
-          "description": "[Vega expression](https://vega.github.io/vega/docs/expressions/) for customizing labels text.\n\n__Note:__ The label text and value can be assessed via the `label` and `value` properties of the axis's backing `datum` object.",
+          "description": "The format type for labels. One of `\"number\"`, `\"time\"`, or a [registered custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type).\n\n__Default value:__\n- `\"time\"` for temporal fields and ordinal and nominal fields with `timeUnit`.\n- `\"number\"` for quantitative fields as well as ordinal and nominal fields without `timeUnit`.",
           "type": "string"
         },
         "timeUnit": {
@@ -27923,11 +27187,11 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -28210,7 +27474,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__ - This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config). - The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
+          "description": "Default color.\n\n__Default value:__ <span style=\"color: #4682b4;\">&#9632;</span> `\"#4682b4\"`\n\n__Note:__\n- This property cannot be used in a [style config](https://vega.github.io/vega-lite/docs/mark.html#style-config).\n- The `fill` and `stroke` properties have higher precedence than `color` and will override `color`."
         },
         "cornerRadius": {
           "anyOf": [
@@ -28454,13 +27718,14 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`."
+          "description": "The inner radius in pixels of arc marks. `innerRadius` is an alias for `radius2`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "interpolate": {
           "anyOf": [
             {
               "$ref": "#/definitions/Interpolate",
-              "description": "The line interpolation method to use for line and area marks. One of the following: - `\"linear\"`: piecewise linear segments, as in a polyline. - `\"linear-closed\"`: close the linear segments to form a polygon. - `\"step\"`: alternate between horizontal and vertical segments, as in a step function. - `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function. - `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function. - `\"basis\"`: a B-spline, with control point duplication on the ends. - `\"basis-open\"`: an open B-spline; may not intersect the start or end. - `\"basis-closed\"`: a closed B-spline, as in a loop. - `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends. - `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points. - `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop. - `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline. - `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
+              "description": "The line interpolation method to use for line and area marks. One of the following:\n- `\"linear\"`: piecewise linear segments, as in a polyline.\n- `\"linear-closed\"`: close the linear segments to form a polygon.\n- `\"step\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"step-before\"`: alternate between vertical and horizontal segments, as in a step function.\n- `\"step-after\"`: alternate between horizontal and vertical segments, as in a step function.\n- `\"basis\"`: a B-spline, with control point duplication on the ends.\n- `\"basis-open\"`: an open B-spline; may not intersect the start or end.\n- `\"basis-closed\"`: a closed B-spline, as in a loop.\n- `\"cardinal\"`: a Cardinal spline, with control point duplication on the ends.\n- `\"cardinal-open\"`: an open Cardinal spline; may not intersect the start or end, but will intersect other control points.\n- `\"cardinal-closed\"`: a closed Cardinal spline, as in a loop.\n- `\"bundle\"`: equivalent to basis, except the tension parameter is used to straighten the spline.\n- `\"monotone\"`: cubic interpolation that preserves monotonicity in y."
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -28468,7 +27733,7 @@
           ]
         },
         "invalid": {
-          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`). - If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks). - If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
+          "description": "Defines how Vega-Lite should handle marks for invalid values (`null` and `NaN`).\n- If set to `\"filter\"` (default), all data items with null values will be skipped (for line, trail, and area marks) or filtered (for other marks).\n- If `null`, all data items are included. In this case, invalid values will be interpreted as zeroes.",
           "enum": [
             "filter",
             null
@@ -28533,7 +27798,7 @@
         },
         "orient": {
           "$ref": "#/definitions/Orientation",
-          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical. - For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension. - For area, this property determines the orient property of the Vega output. - For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
+          "description": "The orientation of a non-stacked bar, tick, area, and line charts. The value is either horizontal (default) or vertical.\n- For bar, rule and tick, this determines whether the size of the bar and tick should be applied to x or y dimension.\n- For area, this property determines the orient property of the Vega output.\n- For line and trail marks, this property determines the sort order of the points in the line if `config.sortLineBy` is not specified. For stacked charts, this is always determined by the orientation of the stack; therefore explicitly specified value will be ignored."
         },
         "outerRadius": {
           "anyOf": [
@@ -28544,7 +27809,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`."
+          "description": "The outer radius in pixels of arc marks. `outerRadius` is an alias for `radius`.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "padAngle": {
           "anyOf": [
@@ -28566,7 +27832,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties."
+          "description": "For arc mark, the primary (outer) radius in pixels.\n\nFor text marks, polar coordinate radial offset, in pixels, of the text from the origin determined by the `x` and `y` properties.\n\n__Default value:__ `min(plot_width, plot_height)/2`",
+          "minimum": 0
         },
         "radius2": {
           "anyOf": [
@@ -28577,7 +27844,8 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "The secondary (inner) radius in pixels of arc marks."
+          "description": "The secondary (inner) radius in pixels of arc marks.\n\n__Default value:__ `0`",
+          "minimum": 0
         },
         "shape": {
           "anyOf": [
@@ -28590,7 +27858,7 @@
                   "type": "string"
                 }
               ],
-              "description": "Shape of the point marks. Supported values include: - plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`. - the line symbol `\"stroke\"` - centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"` - a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
+              "description": "Shape of the point marks. Supported values include:\n- plotting shapes: `\"circle\"`, `\"square\"`, `\"cross\"`, `\"diamond\"`, `\"triangle-up\"`, `\"triangle-down\"`, `\"triangle-right\"`, or `\"triangle-left\"`.\n- the line symbol `\"stroke\"`\n- centered directional shapes `\"arrow\"`, `\"wedge\"`, or `\"triangle\"`\n- a custom [SVG path string](https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths) (For correct sizing, custom shape paths should be defined within a square bounding box with coordinates ranging from -1 to 1 along both the x and y dimensions.)\n\n__Default value:__ `\"circle\"`"
             },
             {
               "$ref": "#/definitions/ExprRef"
@@ -28606,7 +27874,7 @@
               "$ref": "#/definitions/ExprRef"
             }
           ],
-          "description": "Default size for marks. - For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value. - For `bar`, this represents the band size of the bar, in pixels. - For `text`, this represents the font size, in pixels.\n\n__Default value:__ - `30` for point, circle, square marks; width/height's `step` - `2` for bar marks with discrete dimensions; - `5` for bar marks with continuous dimensions; - `11` for text marks.",
+          "description": "Default size for marks.\n- For `point`/`circle`/`square`, this represents the pixel area of the marks. Note that this value sets the area of the symbol; the side lengths will increase with the square root of this value.\n- For `bar`, this represents the band size of the bar, in pixels.\n- For `text`, this represents the font size, in pixels.\n\n__Default value:__\n- `30` for point, circle, square marks; width/height's `step`\n- `2` for bar marks with discrete dimensions;\n- `5` for bar marks with continuous dimensions;\n- `11` for text marks.",
           "minimum": 0
         },
         "smooth": {
@@ -28793,14 +28061,14 @@
           "minimum": 0,
           "type": "number"
         },
-        "timeUnitBand": {
-          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
-          "type": "number"
-        },
         "timeUnitBandPosition": {
           "description": "Default relative band position for a time unit. If set to `0`, the marks will be positioned at the beginning of the time unit band step. If set to `0.5`, the marks will be positioned in the middle of the time unit band step.",
           "type": "number"
         },
+        "timeUnitBandSize": {
+          "description": "Default relative band size for a time unit. If set to `1`, the bandwidth of the marks will be equal to the time unit band step. If set to `0.5`, bandwidth of the marks will be half of the time unit band step.",
+          "type": "number"
+        },
         "tooltip": {
           "anyOf": [
             {
@@ -28822,7 +28090,7 @@
               "type": "null"
             }
           ],
-          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used. - If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used. - If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
+          "description": "The tooltip text string to show upon mouse hover or an object defining which fields should the tooltip be derived from.\n\n- If `tooltip` is `true` or `{\"content\": \"encoding\"}`, then all fields from `encoding` will be used.\n- If `tooltip` is `{\"content\": \"data\"}`, then all fields that appear in the highlighted data point will be used.\n- If set to `null` or `false`, then no tooltip will be used.\n\nSee the [`tooltip`](https://vega.github.io/vega-lite/docs/tooltip.html) documentation for a detailed discussion about tooltip  in Vega-Lite.\n\n__Default value:__ `null`"
         },
         "url": {
           "anyOf": [
@@ -28951,6 +28219,55 @@
       ],
       "type": "object"
     },
+    "TimeLocale": {
+      "additionalProperties": false,
+      "description": "Locale definition for formatting dates and times.",
+      "properties": {
+        "date": {
+          "description": "The date (%x) format specifier (e.g., \"%m/%d/%Y\").",
+          "type": "string"
+        },
+        "dateTime": {
+          "description": "The date and time (%c) format specifier (e.g., \"%a %b %e %X %Y\").",
+          "type": "string"
+        },
+        "days": {
+          "$ref": "#/definitions/Vector7<string>",
+          "description": "The full names of the weekdays, starting with Sunday."
+        },
+        "months": {
+          "$ref": "#/definitions/Vector12<string>",
+          "description": "The full names of the months (starting with January)."
+        },
+        "periods": {
+          "$ref": "#/definitions/Vector2<string>",
+          "description": "The A.M. and P.M. equivalents (e.g., [\"AM\", \"PM\"])."
+        },
+        "shortDays": {
+          "$ref": "#/definitions/Vector7<string>",
+          "description": "The abbreviated names of the weekdays, starting with Sunday."
+        },
+        "shortMonths": {
+          "$ref": "#/definitions/Vector12<string>",
+          "description": "The abbreviated names of the months (starting with January)."
+        },
+        "time": {
+          "description": "The time (%X) format specifier (e.g., \"%H:%M:%S\").",
+          "type": "string"
+        }
+      },
+      "required": [
+        "dateTime",
+        "date",
+        "time",
+        "periods",
+        "days",
+        "shortDays",
+        "months",
+        "shortMonths"
+      ],
+      "type": "object"
+    },
     "TimeUnit": {
       "anyOf": [
         {
@@ -29371,11 +28688,11 @@
       ],
       "type": "object"
     },
-    "TopLevelNormalizedConcatSpec<GenericSpec>": {
+    "TopLevelConcatSpec": {
       "additionalProperties": false,
       "properties": {
         "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
           "format": "uri",
           "type": "string"
         },
@@ -29388,7 +28705,7 @@
               "$ref": "#/definitions/RowCol<LayoutAlign>"
             }
           ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
         },
         "autosize": {
           "anyOf": [
@@ -29413,7 +28730,7 @@
           "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -29432,13 +28749,13 @@
           "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
         },
         "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
           "type": "number"
         },
         "concat": {
           "description": "A list of views to be concatenated.",
           "items": {
-            "$ref": "#/definitions/NormalizedSpec"
+            "$ref": "#/definitions/NonNormalizedSpec"
           },
           "type": "array"
         },
@@ -29481,9 +28798,9 @@
           "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
         },
         "params": {
-          "description": "Dynamic variables that parameterize a visualization.",
+          "description": "Dynamic variables or selections that parameterize a visualization.",
           "items": {
-            "$ref": "#/definitions/Parameter"
+            "$ref": "#/definitions/TopLevelParameter"
           },
           "type": "array"
         },
@@ -29521,7 +28838,7 @@
           "type": "array"
         },
         "usermeta": {
-          "$ref": "#/definitions/Dict<unknown>",
+          "$ref": "#/definitions/Dict",
           "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
         }
       },
@@ -29530,11 +28847,11 @@
       ],
       "type": "object"
     },
-    "TopLevelNormalizedHConcatSpec<GenericSpec>": {
+    "TopLevelHConcatSpec": {
       "additionalProperties": false,
       "properties": {
         "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
           "format": "uri",
           "type": "string"
         },
@@ -29561,7 +28878,7 @@
           "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -29598,7 +28915,7 @@
         "hconcat": {
           "description": "A list of views to be concatenated and put into a row.",
           "items": {
-            "$ref": "#/definitions/NormalizedSpec"
+            "$ref": "#/definitions/NonNormalizedSpec"
           },
           "type": "array"
         },
@@ -29618,9 +28935,9 @@
           "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
         },
         "params": {
-          "description": "Dynamic variables that parameterize a visualization.",
+          "description": "Dynamic variables or selections that parameterize a visualization.",
           "items": {
-            "$ref": "#/definitions/Parameter"
+            "$ref": "#/definitions/TopLevelParameter"
           },
           "type": "array"
         },
@@ -29651,7 +28968,7 @@
           "type": "array"
         },
         "usermeta": {
-          "$ref": "#/definitions/Dict<unknown>",
+          "$ref": "#/definitions/Dict",
           "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
         }
       },
@@ -29660,11 +28977,11 @@
       ],
       "type": "object"
     },
-    "TopLevelNormalizedVConcatSpec<GenericSpec>": {
+    "TopLevelVConcatSpec": {
       "additionalProperties": false,
       "properties": {
         "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
           "format": "uri",
           "type": "string"
         },
@@ -29691,7 +29008,7 @@
           "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -29741,9 +29058,9 @@
           "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
         },
         "params": {
-          "description": "Dynamic variables that parameterize a visualization.",
+          "description": "Dynamic variables or selections that parameterize a visualization.",
           "items": {
-            "$ref": "#/definitions/Parameter"
+            "$ref": "#/definitions/TopLevelParameter"
           },
           "type": "array"
         },
@@ -29774,13 +29091,13 @@
           "type": "array"
         },
         "usermeta": {
-          "$ref": "#/definitions/Dict<unknown>",
+          "$ref": "#/definitions/Dict",
           "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
         },
         "vconcat": {
           "description": "A list of views to be concatenated and put into a column.",
           "items": {
-            "$ref": "#/definitions/NormalizedSpec"
+            "$ref": "#/definitions/NonNormalizedSpec"
           },
           "type": "array"
         }
@@ -29794,7 +29111,7 @@
       "additionalProperties": false,
       "properties": {
         "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
           "format": "uri",
           "type": "string"
         },
@@ -29860,7 +29177,7 @@
               "$ref": "#/definitions/Step"
             }
           ],
-          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number. - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) - To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         },
         "layer": {
           "description": "Layer or single view specifications to be layered.\n\n__Note__: Specifications inside `layer` cannot use `row` and `column` channels as layering facet specifications is not allowed. Instead, use the [facet operator](https://vega.github.io/vega-lite/docs/facet.html) and place a layer inside a facet.",
@@ -29892,9 +29209,9 @@
           "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
         },
         "params": {
-          "description": "Dynamic variables that parameterize a visualization.",
+          "description": "Dynamic variables or selections that parameterize a visualization.",
           "items": {
-            "$ref": "#/definitions/Parameter"
+            "$ref": "#/definitions/TopLevelParameter"
           },
           "type": "array"
         },
@@ -29925,7 +29242,7 @@
           "type": "array"
         },
         "usermeta": {
-          "$ref": "#/definitions/Dict<unknown>",
+          "$ref": "#/definitions/Dict",
           "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
         },
         "view": {
@@ -29945,7 +29262,7 @@
               "$ref": "#/definitions/Step"
             }
           ],
-          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number. - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) - To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         }
       },
       "required": [
@@ -29959,7 +29276,7 @@
           "additionalProperties": false,
           "properties": {
             "$schema": {
-              "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+              "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
               "format": "uri",
               "type": "string"
             },
@@ -29972,7 +29289,7 @@
                   "$ref": "#/definitions/RowCol<LayoutAlign>"
                 }
               ],
-              "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+              "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
             },
             "autosize": {
               "anyOf": [
@@ -29997,7 +29314,7 @@
               "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
             },
             "bounds": {
-              "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+              "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
               "enum": [
                 "full",
                 "flush"
@@ -30016,7 +29333,7 @@
               "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
             },
             "columns": {
-              "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+              "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
               "type": "number"
             },
             "config": {
@@ -30058,9 +29375,9 @@
               "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
             },
             "params": {
-              "description": "Dynamic variables that parameterize a visualization.",
+              "description": "Dynamic variables or selections that parameterize a visualization.",
               "items": {
-                "$ref": "#/definitions/Parameter"
+                "$ref": "#/definitions/TopLevelParameter"
               },
               "type": "array"
             },
@@ -30094,7 +29411,7 @@
               "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
             },
             "spec": {
-              "$ref": "#/definitions/Spec",
+              "$ref": "#/definitions/NonNormalizedSpec",
               "description": "A specification of the view that gets repeated."
             },
             "title": {
@@ -30116,7 +29433,7 @@
               "type": "array"
             },
             "usermeta": {
-              "$ref": "#/definitions/Dict<unknown>",
+              "$ref": "#/definitions/Dict",
               "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
             }
           },
@@ -30130,7 +29447,7 @@
           "additionalProperties": false,
           "properties": {
             "$schema": {
-              "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+              "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
               "format": "uri",
               "type": "string"
             },
@@ -30143,7 +29460,7 @@
                   "$ref": "#/definitions/RowCol<LayoutAlign>"
                 }
               ],
-              "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+              "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
             },
             "autosize": {
               "anyOf": [
@@ -30168,7 +29485,7 @@
               "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
             },
             "bounds": {
-              "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+              "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
               "enum": [
                 "full",
                 "flush"
@@ -30187,7 +29504,7 @@
               "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
             },
             "columns": {
-              "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+              "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
               "type": "number"
             },
             "config": {
@@ -30229,9 +29546,9 @@
               "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
             },
             "params": {
-              "description": "Dynamic variables that parameterize a visualization.",
+              "description": "Dynamic variables or selections that parameterize a visualization.",
               "items": {
-                "$ref": "#/definitions/Parameter"
+                "$ref": "#/definitions/TopLevelParameter"
               },
               "type": "array"
             },
@@ -30260,7 +29577,7 @@
                   "$ref": "#/definitions/LayerSpec"
                 },
                 {
-                  "$ref": "#/definitions/UnitSpec"
+                  "$ref": "#/definitions/UnitSpecWithFrame"
                 }
               ],
               "description": "A specification of the view that gets repeated."
@@ -30284,7 +29601,7 @@
               "type": "array"
             },
             "usermeta": {
-              "$ref": "#/definitions/Dict<unknown>",
+              "$ref": "#/definitions/Dict",
               "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
             }
           },
@@ -30300,7 +29617,7 @@
       "additionalProperties": false,
       "properties": {
         "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
           "format": "uri",
           "type": "string"
         },
@@ -30313,7 +29630,7 @@
               "$ref": "#/definitions/RowCol<LayoutAlign>"
             }
           ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
         },
         "autosize": {
           "anyOf": [
@@ -30338,7 +29655,7 @@
           "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -30357,7 +29674,7 @@
           "description": "Boolean flag indicating if subviews should be centered relative to their respective rows or columns.\n\nAn object value of the form `{\"row\": boolean, \"column\": boolean}` can be used to supply different centering values for rows and columns.\n\n__Default value:__ `false`"
         },
         "columns": {
-          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for: - the general (wrappable) `concat` operator (not `hconcat`/`vconcat`) - the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
+          "description": "The number of columns to include in the view composition layout.\n\n__Default value__: `undefined` -- An infinite number of columns (a single row) will be assumed. This is equivalent to `hconcat` (for `concat`) and to using the `column` channel (for `facet` and `repeat`).\n\n__Note__:\n\n1) This property is only for:\n- the general (wrappable) `concat` operator (not `hconcat`/`vconcat`)\n- the `facet` and `repeat` operator with one field/repetition definition (without row/column nesting)\n\n2) Setting the `columns` to `1` is equivalent to `vconcat` (for `concat`) and to using the `row` channel (for `facet` and `repeat`).",
           "type": "number"
         },
         "config": {
@@ -30410,9 +29727,9 @@
           "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
         },
         "params": {
-          "description": "Dynamic variables that parameterize a visualization.",
+          "description": "Dynamic variables or selections that parameterize a visualization.",
           "items": {
-            "$ref": "#/definitions/Parameter"
+            "$ref": "#/definitions/TopLevelParameter"
           },
           "type": "array"
         },
@@ -30423,52 +29740,135 @@
         "spacing": {
           "anyOf": [
             {
-              "type": "number"
+              "type": "number"
+            },
+            {
+              "$ref": "#/definitions/RowCol<number>"
+            }
+          ],
+          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
+        },
+        "spec": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/LayerSpec"
+            },
+            {
+              "$ref": "#/definitions/UnitSpecWithFrame"
+            }
+          ],
+          "description": "A specification of the view that gets faceted."
+        },
+        "title": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Text"
+            },
+            {
+              "$ref": "#/definitions/TitleParams"
+            }
+          ],
+          "description": "Title for the plot."
+        },
+        "transform": {
+          "description": "An array of data transformations such as filter and new field calculation.",
+          "items": {
+            "$ref": "#/definitions/Transform"
+          },
+          "type": "array"
+        },
+        "usermeta": {
+          "$ref": "#/definitions/Dict",
+          "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
+        }
+      },
+      "required": [
+        "data",
+        "facet",
+        "spec"
+      ],
+      "type": "object"
+    },
+    "TopLevelParameter": {
+      "anyOf": [
+        {
+          "$ref": "#/definitions/VariableParameter"
+        },
+        {
+          "$ref": "#/definitions/TopLevelSelectionParameter"
+        }
+      ]
+    },
+    "TopLevelSelectionParameter": {
+      "additionalProperties": false,
+      "properties": {
+        "bind": {
+          "anyOf": [
+            {
+              "$ref": "#/definitions/Binding"
+            },
+            {
+              "additionalProperties": {
+                "$ref": "#/definitions/Binding"
+              },
+              "type": "object"
             },
             {
-              "$ref": "#/definitions/RowCol<number>"
+              "$ref": "#/definitions/LegendBinding"
+            },
+            {
+              "const": "scales",
+              "type": "string"
             }
           ],
-          "description": "The spacing in pixels between sub-views of the composition operator. An object of the form `{\"row\": number, \"column\": number}` can be used to set different spacing values for rows and columns.\n\n__Default value__: Depends on `\"spacing\"` property of [the view composition configuration](https://vega.github.io/vega-lite/docs/config.html#view-config) (`20` by default)"
+          "description": "When set, a selection is populated by input elements (also known as dynamic query widgets) or by interacting with the corresponding legend. Direct manipulation interaction is disabled by default; to re-enable it, set the selection's [`on`](https://vega.github.io/vega-lite/docs/selection.html#common-selection-properties) property.\n\nLegend bindings are restricted to selections that only specify a single field or encoding.\n\nQuery widget binding takes the form of Vega's [input element binding definition](https://vega.github.io/vega/docs/signals/#bind) or can be a mapping between projected field/encodings and binding definitions.\n\n__See also:__ [`bind`](https://vega.github.io/vega-lite/docs/bind.html) documentation."
         },
-        "spec": {
+        "name": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "Required. A unique name for the selection parameter. Selection names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\"."
+        },
+        "select": {
           "anyOf": [
             {
-              "$ref": "#/definitions/LayerSpec"
+              "$ref": "#/definitions/SelectionType"
             },
             {
-              "$ref": "#/definitions/UnitSpecWithFrame"
+              "$ref": "#/definitions/PointSelectionConfig"
+            },
+            {
+              "$ref": "#/definitions/IntervalSelectionConfig"
             }
           ],
-          "description": "A specification of the view that gets faceted."
+          "description": "Determines the default event processing and data query for the selection. Vega-Lite currently supports two selection types:\n\n- `\"point\"` -- to select multiple discrete data values; the first value is selected on `click` and additional values toggled on shift-click.\n- `\"interval\"` -- to select a continuous range of data values on `drag`."
         },
-        "title": {
+        "value": {
           "anyOf": [
             {
-              "$ref": "#/definitions/Text"
+              "$ref": "#/definitions/SelectionInit"
             },
             {
-              "$ref": "#/definitions/TitleParams"
+              "items": {
+                "$ref": "#/definitions/SelectionInitMapping"
+              },
+              "type": "array"
+            },
+            {
+              "$ref": "#/definitions/SelectionInitIntervalMapping"
             }
           ],
-          "description": "Title for the plot."
+          "description": "Initialize the selection with a mapping between [projected channels or field names](https://vega.github.io/vega-lite/docs/selection.html#project) and initial values.\n\n__See also:__ [`init`](https://vega.github.io/vega-lite/docs/value.html) documentation."
         },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
+        "views": {
+          "description": "By default, top-level selections are applied to every view in the visualization. If this property is specified, selections will only be applied to views with the given names.",
           "items": {
-            "$ref": "#/definitions/Transform"
+            "type": "string"
           },
           "type": "array"
-        },
-        "usermeta": {
-          "$ref": "#/definitions/Dict<unknown>",
-          "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
         }
       },
       "required": [
-        "data",
-        "facet",
-        "spec"
+        "name",
+        "select"
       ],
       "type": "object"
     },
@@ -30487,13 +29887,13 @@
           "$ref": "#/definitions/TopLevelRepeatSpec"
         },
         {
-          "$ref": "#/definitions/TopLevelNormalizedConcatSpec<GenericSpec>"
+          "$ref": "#/definitions/TopLevelConcatSpec"
         },
         {
-          "$ref": "#/definitions/TopLevelNormalizedVConcatSpec<GenericSpec>"
+          "$ref": "#/definitions/TopLevelVConcatSpec"
         },
         {
-          "$ref": "#/definitions/TopLevelNormalizedHConcatSpec<GenericSpec>"
+          "$ref": "#/definitions/TopLevelHConcatSpec"
         }
       ],
       "description": "A Vega-Lite top-level specification. This is the root class for all Vega-Lite specifications. (The json schema is generated from this type.)"
@@ -30502,7 +29902,7 @@
       "additionalProperties": false,
       "properties": {
         "$schema": {
-          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v4.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
+          "description": "URL to [JSON schema](http://json-schema.org/) for a Vega-Lite specification. Unless you have a reason to change this, use `https://vega.github.io/schema/vega-lite/v5.json`. Setting the `$schema` property allows automatic validation and autocomplete in editors that support JSON schema.",
           "format": "uri",
           "type": "string"
         },
@@ -30515,7 +29915,7 @@
               "$ref": "#/definitions/RowCol<LayoutAlign>"
             }
           ],
-          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other. - For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size. - For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
+          "description": "The alignment to apply to grid rows and columns. The supported string values are `\"all\"`, `\"each\"`, and `\"none\"`.\n\n- For `\"none\"`, a flow layout will be used, in which adjacent subviews are simply placed one after the other.\n- For `\"each\"`, subviews will be aligned into a clean grid structure, but each row or column may be of variable size.\n- For `\"all\"`, subviews will be aligned and each row or column will be sized identically based on the maximum observed size. String values for this property will be applied to both grid rows and columns.\n\nAlternatively, an object value of the form `{\"row\": string, \"column\": string}` can be used to supply different alignments for rows and columns.\n\n__Default value:__ `\"all\"`."
         },
         "autosize": {
           "anyOf": [
@@ -30540,7 +29940,7 @@
           "description": "CSS color property to use as the background of the entire view.\n\n__Default value:__ `\"white\"`"
         },
         "bounds": {
-          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used. - If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
+          "description": "The bounds calculation method to use for determining the extent of a sub-plot. One of `full` (the default) or `flush`.\n\n- If set to `full`, the entire calculated bounds (including axes, title, and legend) will be used.\n- If set to `flush`, only the specified width and height values for the sub-view will be used. The `flush` setting can be useful when attempting to place sub-plots without axes or legends into a uniform grid structure.\n\n__Default value:__ `\"full\"`",
           "enum": [
             "full",
             "flush"
@@ -30598,7 +29998,7 @@
               "$ref": "#/definitions/Step"
             }
           ],
-          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number. - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) - To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         },
         "mark": {
           "$ref": "#/definitions/AnyMark",
@@ -30620,9 +30020,9 @@
           "description": "The default visualization padding, in pixels, from the edge of the visualization canvas to the data rectangle. If a number, specifies padding for all sides. If an object, the value should have the format `{\"left\": 5, \"top\": 5, \"right\": 5, \"bottom\": 5}` to specify padding for each side of the visualization.\n\n__Default value__: `5`"
         },
         "params": {
-          "description": "Dynamic variables that parameterize a visualization.",
+          "description": "An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.",
           "items": {
-            "$ref": "#/definitions/Parameter"
+            "$ref": "#/definitions/TopLevelParameter"
           },
           "type": "array"
         },
@@ -30634,13 +30034,6 @@
           "$ref": "#/definitions/Resolve",
           "description": "Scale, axis, and legend resolutions for view composition specifications."
         },
-        "selection": {
-          "additionalProperties": {
-            "$ref": "#/definitions/SelectionDef"
-          },
-          "description": "A key-value mapping between selection names and definitions.",
-          "type": "object"
-        },
         "spacing": {
           "anyOf": [
             {
@@ -30671,7 +30064,7 @@
           "type": "array"
         },
         "usermeta": {
-          "$ref": "#/definitions/Dict<unknown>",
+          "$ref": "#/definitions/Dict",
           "description": "Optional metadata that will be passed to Vega. This object is completely ignored by Vega and Vega-Lite and can be used for custom metadata."
         },
         "view": {
@@ -30691,7 +30084,7 @@
               "$ref": "#/definitions/Step"
             }
           ],
-          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number. - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) - To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         }
       },
       "required": [
@@ -30708,7 +30101,7 @@
           "type": "string"
         },
         "mesh": {
-          "description": "The name of the TopoJSON object set to convert to mesh. Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.   Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features. Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.",
+          "description": "The name of the TopoJSON object set to convert to mesh. Similar to the `feature` option, `mesh` extracts a named TopoJSON object set.  Unlike the `feature` option, the corresponding geo data is returned as a single, unified mesh instance, not as individual GeoJSON features. Extracting a mesh is useful for more efficiently drawing borders or other geographic elements that you do not need to associate with specific regions such as individual countries, states or counties.",
           "type": "string"
         },
         "parse": {
@@ -30720,7 +30113,7 @@
               "type": "null"
             }
           ],
-          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using Javascript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
+          "description": "If set to `null`, disable type inference based on the spec and only use type inference based on the data. Alternatively, a parsing directive object can be provided for explicit data types. Each property of the object corresponds to a field name, and the value to the desired data type (one of `\"number\"`, `\"boolean\"`, `\"date\"`, or null (do not parse the field)). For example, `\"parse\": {\"modified_on\": \"date\"}` parses the `modified_on` field in each input record a Date value.\n\nFor `\"date\"`, we parse data based using JavaScript's [`Date.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse). For Specific date formats can be provided (e.g., `{foo: \"date:'%m%d%Y'\"}`), using the [d3-time-format syntax](https://github.com/d3/d3-time-format#locale_format). UTC date format parsing is supported similarly (e.g., `{foo: \"utc:'%m%d%Y'\"}`). See more about [UTC time](https://vega.github.io/vega-lite/docs/timeunit.html#utc)"
         },
         "type": {
           "const": "topojson",
@@ -30815,8 +30208,8 @@
           "$ref": "#/definitions/Aggregate",
           "description": "Aggregation function for the field (e.g., `\"mean\"`, `\"sum\"`, `\"median\"`, `\"min\"`, `\"max\"`, `\"count\"`).\n\n__Default value:__ `undefined` (None)\n\n__See also:__ [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html) documentation."
         },
-        "band": {
-          "description": "For rect-based marks (`rect`, `bar`, and `image`), mark size relative to bandwidth of [band scales](https://vega.github.io/vega-lite/docs/scale.html#band), bins or time units. If set to `1`, the mark size is set to the bandwidth, the bin interval, or the time unit interval. If set to `0.5`, the mark size is half of the bandwidth or the time unit interval.\n\nFor other marks, relative position on a band of a stacked, binned, time unit or band scale. If set to `0`, the marks will be positioned at the beginning of the band. If set to `0.5`, the marks will be positioned in the middle of the band.",
+        "bandPosition": {
+          "description": "Relative position on a band of a stacked, binned, time unit, or band scale. For example, the marks will be positioned at the beginning of the band if set to `0`, and at the middle of the band if set to `0.5`.",
           "maximum": 1,
           "minimum": 0,
           "type": "number"
@@ -30837,7 +30230,7 @@
               "type": "null"
             }
           ],
-          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#params), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
+          "description": "A flag for binning a `quantitative` field, [an object defining binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters), or indicating that the data for `x` or `y` channel are binned before they are imported into Vega-Lite (`\"binned\"`).\n\n- If `true`, default [binning parameters](https://vega.github.io/vega-lite/docs/bin.html#bin-parameters) will be applied.\n\n- If `\"binned\"`, this indicates that the data for the `x` (or `y`) channel are already binned. You can map the bin-start field to `x` (or `y`) and the bin-end field to `x2` (or `y2`). The scale and axis will be formatted similar to binning in Vega-Lite.  To adjust the axis ticks based on the bin step, you can also set the axis's [`tickMinStep`](https://vega.github.io/vega-lite/docs/axis.html#ticks) property.\n\n__Default value:__ `false`\n\n__See also:__ [`bin`](https://vega.github.io/vega-lite/docs/bin.html) documentation."
         },
         "field": {
           "$ref": "#/definitions/Field",
@@ -30863,11 +30256,11 @@
               "type": "null"
             }
           ],
-          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/docs/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
+          "description": "A title for the field. If `null`, the title will be removed.\n\n__Default value:__  derived from the field's name and transformation function (`aggregate`, `bin` and `timeUnit`). If the field has an aggregate function, the function is displayed as part of the title (e.g., `\"Sum of Profit\"`). If the field is binned or has a time unit applied, the applied function is shown in parentheses (e.g., `\"Profit (binned)\"`, `\"Transaction Date (year-month)\"`). Otherwise, the title is simply the field name.\n\n__Notes__:\n\n1) You can customize the default field title format by providing the [`fieldTitle`](https://vega.github.io/vega-lite/docs/config.html#top-level-config) property in the [config](https://vega.github.io/vega-lite/docs/config.html) or [`fieldTitle` function via the `compile` function's options](https://vega.github.io/vega-lite/usage/compile.html#field-title).\n\n2) If both field definition's `title` and axis, header, or legend `title` are defined, axis/header/legend title will be used."
         },
         "type": {
           "$ref": "#/definitions/StandardType",
-          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria: - `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type). - `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale - `ordinal\"\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`): - `\"quantitative\"` if the datum is a number - `\"nominal\"` if the datum is a string - `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__ - Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data. - Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`). - When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin). - When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`. - Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
+          "description": "The type of measurement (`\"quantitative\"`, `\"temporal\"`, `\"ordinal\"`, or `\"nominal\"`) for the encoded field or constant value (`datum`). It can also be a `\"geojson\"` type for encoding ['geoshape'](https://vega.github.io/vega-lite/docs/geoshape.html).\n\nVega-Lite automatically infers data types in many cases as discussed below. However, type is required for a field if: (1) the field is not nominal and the field encoding has no specified `aggregate` (except `argmin` and `argmax`), `bin`, scale type, custom `sort` order, nor `timeUnit` or (2) if you wish to use an ordinal scale for a field with `bin` or `timeUnit`.\n\n__Default value:__\n\n1) For a data `field`, `\"nominal\"` is the default data type unless the field encoding has `aggregate`, `channel`, `bin`, scale type, `sort`, or `timeUnit` that satisfies the following criteria:\n- `\"quantitative\"` is the default type if (1) the encoded field contains `bin` or `aggregate` except `\"argmin\"` and `\"argmax\"`, (2) the encoding channel is `latitude` or `longitude` channel or (3) if the specified scale type is [a quantitative scale](https://vega.github.io/vega-lite/docs/scale.html#type).\n- `\"temporal\"` is the default type if (1) the encoded field contains `timeUnit` or (2) the specified scale type is a time or utc scale\n- `\"ordinal\"` is the default type if (1) the encoded field contains a [custom `sort` order](https://vega.github.io/vega-lite/docs/sort.html#specifying-custom-sort-order), (2) the specified scale type is an ordinal/point/band scale, or (3) the encoding channel is `order`.\n\n2) For a constant value in data domain (`datum`):\n- `\"quantitative\"` if the datum is a number\n- `\"nominal\"` if the datum is a string\n- `\"temporal\"` if the datum is [a date time object](https://vega.github.io/vega-lite/docs/datetime.html)\n\n__Note:__\n- Data `type` describes the semantics of the data rather than the primitive data types (number, string, etc.). The same primitive data type can have different types of measurement. For example, numeric data can represent quantitative, ordinal, or nominal data.\n- Data values for a temporal field can be either a date-time string (e.g., `\"2015-03-07 12:32:17\"`, `\"17:01\"`, `\"2015-03-16\"`. `\"2015\"`) or a timestamp number (e.g., `1552199579097`).\n- When using with [`bin`](https://vega.github.io/vega-lite/docs/bin.html), the `type` property can be either `\"quantitative\"` (for using a linear bin scale) or [`\"ordinal\"` (for using an ordinal bin scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`timeUnit`](https://vega.github.io/vega-lite/docs/timeunit.html), the `type` property can be either `\"temporal\"` (default, for using a temporal scale) or [`\"ordinal\"` (for using an ordinal scale)](https://vega.github.io/vega-lite/docs/type.html#cast-bin).\n- When using with [`aggregate`](https://vega.github.io/vega-lite/docs/aggregate.html), the `type` property refers to the post-aggregation data type. For example, we can calculate count `distinct` of a categorical field `\"cat\"` using `{\"aggregate\": \"distinct\", \"field\": \"cat\"}`. The `\"type\"` of the aggregate output is `\"quantitative\"`.\n- Secondary channels (e.g., `x2`, `y2`, `xError`, `yError`) do not have `type` as they must have exactly the same type as their primary channels (e.g., `x`, `y`).\n\n__See also:__ [`type`](https://vega.github.io/vega-lite/docs/type.html) documentation."
         }
       },
       "type": "object"
@@ -30877,8 +30270,11 @@
       "type": "string"
     },
     "UnitSpec": {
+      "$ref": "#/definitions/GenericUnitSpec<Encoding,AnyMark>",
+      "description": "A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types)."
+    },
+    "UnitSpecWithFrame": {
       "additionalProperties": false,
-      "description": "A unit specification, which can contain either [primitive marks or composite marks](https://vega.github.io/vega-lite/docs/mark.html#types).",
       "properties": {
         "data": {
           "anyOf": [
@@ -30912,7 +30308,7 @@
               "$ref": "#/definitions/Step"
             }
           ],
-          "description": "__Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec."
+          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number.\n- For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.)\n- To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         },
         "mark": {
           "$ref": "#/definitions/AnyMark",
@@ -30922,116 +30318,17 @@
           "description": "Name of the visualization for later reference.",
           "type": "string"
         },
-        "projection": {
-          "$ref": "#/definitions/Projection",
-          "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks and to `latitude` and `\"longitude\"` channels for other marks."
-        },
-        "selection": {
-          "additionalProperties": {
-            "$ref": "#/definitions/SelectionDef"
-          },
-          "description": "A key-value mapping between selection names and definitions.",
-          "type": "object"
-        },
-        "title": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Text"
-            },
-            {
-              "$ref": "#/definitions/TitleParams"
-            }
-          ],
-          "description": "Title for the plot."
-        },
-        "transform": {
-          "description": "An array of data transformations such as filter and new field calculation.",
+        "params": {
+          "description": "An array of parameters that may either be simple variables, or more complex selections that map user input to data queries.",
           "items": {
-            "$ref": "#/definitions/Transform"
+            "$ref": "#/definitions/SelectionParameter"
           },
           "type": "array"
         },
-        "view": {
-          "$ref": "#/definitions/ViewBackground",
-          "description": "__Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec."
-        },
-        "width": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "container",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Step"
-            }
-          ],
-          "description": "__Deprecated:__ Please avoid using width in a unit spec that's a part of a layer spec."
-        }
-      },
-      "required": [
-        "mark"
-      ],
-      "type": "object"
-    },
-    "UnitSpecWithFrame": {
-      "additionalProperties": false,
-      "properties": {
-        "data": {
-          "anyOf": [
-            {
-              "$ref": "#/definitions/Data"
-            },
-            {
-              "type": "null"
-            }
-          ],
-          "description": "An object describing the data source. Set to `null` to ignore the parent's data source. If no data is set, it is derived from the parent."
-        },
-        "description": {
-          "description": "Description of this mark for commenting purpose.",
-          "type": "string"
-        },
-        "encoding": {
-          "$ref": "#/definitions/Encoding",
-          "description": "A key-value mapping between encoding channels and definition of fields."
-        },
-        "height": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "const": "container",
-              "type": "string"
-            },
-            {
-              "$ref": "#/definitions/Step"
-            }
-          ],
-          "description": "The height of a visualization.\n\n- For a plot with a continuous y-field, height should be a number. - For a plot with either a discrete y-field or no y-field, height can be either a number indicating a fixed height or an object in the form of `{step: number}` defining the height per discrete step. (No y-field is equivalent to having one discrete step.) - To enable responsive sizing on height, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousHeight` for a plot with a continuous y-field and `config.view.discreteHeight` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the height of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`height`](https://vega.github.io/vega-lite/docs/size.html) documentation."
-        },
-        "mark": {
-          "$ref": "#/definitions/AnyMark",
-          "description": "A string describing the mark type (one of `\"bar\"`, `\"circle\"`, `\"square\"`, `\"tick\"`, `\"line\"`, `\"area\"`, `\"point\"`, `\"rule\"`, `\"geoshape\"`, and `\"text\"`) or a [mark definition object](https://vega.github.io/vega-lite/docs/mark.html#mark-def)."
-        },
-        "name": {
-          "description": "Name of the visualization for later reference.",
-          "type": "string"
-        },
         "projection": {
           "$ref": "#/definitions/Projection",
           "description": "An object defining properties of geographic projection, which will be applied to `shape` path for `\"geoshape\"` marks and to `latitude` and `\"longitude\"` channels for other marks."
         },
-        "selection": {
-          "additionalProperties": {
-            "$ref": "#/definitions/SelectionDef"
-          },
-          "description": "A key-value mapping between selection names and definitions.",
-          "type": "object"
-        },
         "title": {
           "anyOf": [
             {
@@ -31067,7 +30364,7 @@
               "$ref": "#/definitions/Step"
             }
           ],
-          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number. - For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.) - To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
+          "description": "The width of a visualization.\n\n- For a plot with a continuous x-field, width should be a number.\n- For a plot with either a discrete x-field or no x-field, width can be either a number indicating a fixed width or an object in the form of `{step: number}` defining the width per discrete step. (No x-field is equivalent to having one discrete step.)\n- To enable responsive sizing on width, it should be set to `\"container\"`.\n\n__Default value:__ Based on `config.view.continuousWidth` for a plot with a continuous x-field and `config.view.discreteWidth` otherwise.\n\n__Note:__ For plots with [`row` and `column` channels](https://vega.github.io/vega-lite/docs/encoding.html#facet), this represents the width of a single view and the `\"container\"` option cannot be used.\n\n__See also:__ [`width`](https://vega.github.io/vega-lite/docs/size.html) documentation."
         }
       },
       "required": [
@@ -31175,27 +30472,6 @@
       ],
       "type": "object"
     },
-    "ValueDef<(number|ExprRef)>": {
-      "additionalProperties": false,
-      "description": "Definition object for a constant value (primitive value or gradient definition) of an encoding channel.",
-      "properties": {
-        "value": {
-          "anyOf": [
-            {
-              "type": "number"
-            },
-            {
-              "$ref": "#/definitions/ExprRef"
-            }
-          ],
-          "description": "A constant value in visual domain (e.g., `\"red\"` / `\"#0099ff\"` / [gradient definition](https://vega.github.io/vega-lite/docs/types.html#gradient) for color, values between `0` to `1` for opacity)."
-        }
-      },
-      "required": [
-        "value"
-      ],
-      "type": "object"
-    },
     "ValueDef<number>": {
       "additionalProperties": false,
       "description": "Definition object for a constant value (primitive value or gradient definition) of an encoding channel.",
@@ -31229,7 +30505,7 @@
               "type": "array"
             }
           ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
+          "description": "A field definition or one or more value definition(s) with a parameter predicate."
         },
         "value": {
           "anyOf": [
@@ -31270,7 +30546,7 @@
               "type": "array"
             }
           ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
+          "description": "A field definition or one or more value definition(s) with a parameter predicate."
         },
         "value": {
           "anyOf": [
@@ -31308,7 +30584,7 @@
               "type": "array"
             }
           ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
+          "description": "A field definition or one or more value definition(s) with a parameter predicate."
         },
         "value": {
           "anyOf": [
@@ -31343,7 +30619,7 @@
               "type": "array"
             }
           ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
+          "description": "A field definition or one or more value definition(s) with a parameter predicate."
         },
         "value": {
           "anyOf": [
@@ -31381,7 +30657,7 @@
               "type": "array"
             }
           ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
+          "description": "A field definition or one or more value definition(s) with a parameter predicate."
         },
         "value": {
           "anyOf": [
@@ -31419,7 +30695,7 @@
               "type": "array"
             }
           ],
-          "description": "A field definition or one or more value definition(s) with a selection predicate."
+          "description": "A field definition or one or more value definition(s) with a parameter predicate."
         },
         "value": {
           "anyOf": [
@@ -31435,87 +30711,102 @@
       },
       "type": "object"
     },
-    "Vector2<DateTime>": {
-      "items": [
-        {
-          "$ref": "#/definitions/DateTime"
+    "VariableParameter": {
+      "additionalProperties": false,
+      "properties": {
+        "bind": {
+          "$ref": "#/definitions/Binding",
+          "description": "Binds the parameter to an external input element such as a slider, selection list or radio button group."
         },
-        {
-          "$ref": "#/definitions/DateTime"
+        "expr": {
+          "$ref": "#/definitions/Expr",
+          "description": "An expression for the value of the parameter. This expression may include other parameters, in which case the parameter will automatically update in response to upstream parameter changes."
+        },
+        "name": {
+          "$ref": "#/definitions/ParameterName",
+          "description": "A unique name for the variable parameter. Parameter names should be valid JavaScript identifiers: they should contain only alphanumeric characters (or \"$\", or \"_\") and may not start with a digit. Reserved keywords that may not be used as parameter names are \"datum\", \"event\", \"item\", and \"parent\"."
+        },
+        "value": {
+          "description": "The [initial value](http://vega.github.io/vega-lite/docs/value.html) of the parameter.\n\n__Default value:__ `undefined`"
         }
+      },
+      "required": [
+        "name"
       ],
+      "type": "object"
+    },
+    "Vector10<string>": {
+      "items": {
+        "type": "string"
+      },
+      "maxItems": 10,
+      "minItems": 10,
+      "type": "array"
+    },
+    "Vector12<string>": {
+      "items": {
+        "type": "string"
+      },
+      "maxItems": 12,
+      "minItems": 12,
+      "type": "array"
+    },
+    "Vector2<DateTime>": {
+      "items": {
+        "$ref": "#/definitions/DateTime"
+      },
       "maxItems": 2,
       "minItems": 2,
       "type": "array"
     },
     "Vector2<Vector2<number>>": {
-      "items": [
-        {
-          "$ref": "#/definitions/Vector2<number>"
-        },
-        {
-          "$ref": "#/definitions/Vector2<number>"
-        }
-      ],
+      "items": {
+        "$ref": "#/definitions/Vector2<number>"
+      },
       "maxItems": 2,
       "minItems": 2,
       "type": "array"
     },
     "Vector2<boolean>": {
-      "items": [
-        {
-          "type": "boolean"
-        },
-        {
-          "type": "boolean"
-        }
-      ],
+      "items": {
+        "type": "boolean"
+      },
       "maxItems": 2,
       "minItems": 2,
       "type": "array"
     },
     "Vector2<number>": {
-      "items": [
-        {
-          "type": "number"
-        },
-        {
-          "type": "number"
-        }
-      ],
+      "items": {
+        "type": "number"
+      },
       "maxItems": 2,
       "minItems": 2,
       "type": "array"
     },
     "Vector2<string>": {
-      "items": [
-        {
-          "type": "string"
-        },
-        {
-          "type": "string"
-        }
-      ],
+      "items": {
+        "type": "string"
+      },
       "maxItems": 2,
       "minItems": 2,
       "type": "array"
     },
     "Vector3<number>": {
-      "items": [
-        {
-          "type": "number"
-        },
-        {
-          "type": "number"
-        },
-        {
-          "type": "number"
-        }
-      ],
+      "items": {
+        "type": "number"
+      },
       "maxItems": 3,
       "minItems": 3,
       "type": "array"
     },
+    "Vector7<string>": {
+      "items": {
+        "type": "string"
+      },
+      "maxItems": 7,
+      "minItems": 7,
+      "type": "array"
+    },
     "ViewBackground": {
       "additionalProperties": false,
       "properties": {
@@ -31785,10 +31076,6 @@
             }
           ]
         },
-        "height": {
-          "description": "Default height\n\n__Deprecated:__ Since Vega-Lite 4.0. Please use continuousHeight and discreteHeight instead.",
-          "type": "number"
-        },
         "opacity": {
           "anyOf": [
             {
@@ -31902,10 +31189,6 @@
               "$ref": "#/definitions/ExprRef"
             }
           ]
-        },
-        "width": {
-          "description": "Default width\n\n__Deprecated:__ Since Vega-Lite 4.0. Please use continuousWidth and discreteWidth instead.",
-          "type": "number"
         }
       },
       "type": "object"
@@ -32014,4 +31297,4 @@
       "type": "object"
     }
   }
-}
\ No newline at end of file
+}
diff --git a/altair/vegalite/v4/theme.py b/altair/vegalite/v5/theme.py
similarity index 77%
rename from altair/vegalite/v4/theme.py
rename to altair/vegalite/v5/theme.py
index b1db457..b536a1d 100644
--- a/altair/vegalite/v4/theme.py
+++ b/altair/vegalite/v5/theme.py
@@ -10,10 +10,13 @@ VEGA_THEMES = [
     "dark",
     "latimes",
     "urbaninstitute",
+    "excel",
+    "googlecharts",
+    "powerbi",
 ]
 
 
-class VegaTheme(object):
+class VegaTheme:
     """Implementation of a builtin vega theme."""
 
     def __init__(self, theme):
@@ -22,7 +25,7 @@ class VegaTheme(object):
     def __call__(self):
         return {
             "usermeta": {"embedOptions": {"theme": self.theme}},
-            "config": {"view": {"continuousWidth": 400, "continuousHeight": 300}},
+            "config": {"view": {"continuousWidth": 300, "continuousHeight": 300}},
         }
 
     def __repr__(self):
@@ -32,19 +35,19 @@ class VegaTheme(object):
 # The entry point group that can be used by other packages to declare other
 # renderers that will be auto-detected. Explicit registration is also
 # allowed by the PluginRegistery API.
-ENTRY_POINT_GROUP = "altair.vegalite.v4.theme"  # type: str
+ENTRY_POINT_GROUP = "altair.vegalite.v5.theme"  # type: str
 themes = ThemeRegistry(entry_point_group=ENTRY_POINT_GROUP)
 
 themes.register(
     "default",
-    lambda: {"config": {"view": {"continuousWidth": 400, "continuousHeight": 300}}},
+    lambda: {"config": {"view": {"continuousWidth": 300, "continuousHeight": 300}}},
 )
 themes.register(
     "opaque",
     lambda: {
         "config": {
             "background": "white",
-            "view": {"continuousWidth": 400, "continuousHeight": 300},
+            "view": {"continuousWidth": 300, "continuousHeight": 300},
         }
     },
 )
diff --git a/debian/changelog b/debian/changelog
index 631a58d..e9f6f38 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+python-altair (5.0.1-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+  * Drop patch remove-failing-tests.patch, present upstream.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sun, 25 Jun 2023 20:10:14 -0000
+
 python-altair (4.2.0-1) unstable; urgency=medium
 
   * New upstream version 4.2.0
diff --git a/debian/patches/remove-failing-tests.patch b/debian/patches/remove-failing-tests.patch
deleted file mode 100644
index 77cebd0..0000000
--- a/debian/patches/remove-failing-tests.patch
+++ /dev/null
@@ -1,81 +0,0 @@
-Description: As of python-altair 4.2.0, these tests fail at bulding.
-
-Index: python-altair/altair/examples/line_chart_with_color_datum.py
-===================================================================
---- python-altair.orig/altair/examples/line_chart_with_color_datum.py
-+++ python-altair/altair/examples/line_chart_with_color_datum.py
-@@ -1,21 +0,0 @@
--"""
--Line Chart with datum for color
---------------------------------
--An example of using ``datum`` and ``repeat`` to color a multi-series line chart.
--This is adapted from this corresponding Vega-Lite Example:
--`Repeat and Layer to Show Different Movie Measures <https://vega.github.io/vega-lite/examples/repeat_layer.html>`_.
--"""
--# category: line charts
--
--import altair as alt
--from vega_datasets import data
--
--source = data.movies()
--
--alt.Chart(source).mark_line().encode(
--    x=alt.X("IMDB_Rating", bin=True),
--    y=alt.Y(
--        alt.repeat("layer"), aggregate="mean", title="Mean of US and Worldwide Gross"
--    ),
--    color=alt.datum(alt.repeat("layer")),
--).repeat(layer=["US_Gross", "Worldwide_Gross"])
-Index: python-altair/altair/examples/line_with_log_scale.py
-===================================================================
---- python-altair.orig/altair/examples/line_with_log_scale.py
-+++ python-altair/altair/examples/line_with_log_scale.py
-@@ -1,18 +0,0 @@
--"""
--Line Chart with Logarithmic Scale
-----------------------------------
--How to make a line chart on a `Logarithmic scale <https://en.wikipedia.org/wiki/Logarithmic_scale>`_.
--"""
--# category: line charts
--import altair as alt
--from vega_datasets import data
--
--source = data.population()
--
--alt.Chart(source).mark_line().encode(
--    x='year:O',
--    y=alt.Y(
--        'sum(people)',
--        scale=alt.Scale(type="log")  # Here the scale is applied
--    )
--)
-\ No newline at end of file
-Index: python-altair/altair/examples/wind_vector_map.py
-===================================================================
---- python-altair.orig/altair/examples/wind_vector_map.py
-+++ python-altair/altair/examples/wind_vector_map.py
-@@ -1,24 +0,0 @@
--"""
--Wind Vector Map
-----------------
--An example showing a vector array map showing wind speed and direction using ``wedge``
--as shape for ``mark_point`` and ``angle`` encoding for the wind direction.
--This is adapted from this corresponding Vega-Lite Example:
--`Wind Vector Map <https://vega.github.io/vega-lite/examples/point_angle_windvector.html>`_.
--"""
--# category: scatter plots
--
--import altair as alt
--from vega_datasets import data
--
--source = data.windvectors()
--
--alt.Chart(source).mark_point(shape="wedge", filled=True).encode(
--    latitude="latitude",
--    longitude="longitude",
--    color=alt.Color(
--        "dir", scale=alt.Scale(domain=[0, 360], scheme="rainbow"), legend=None
--    ),
--    angle=alt.Angle("dir", scale=alt.Scale(domain=[0, 360], range=[180, 540])),
--    size=alt.Size("speed", scale=alt.Scale(rangeMax=500)),
--).project("equalEarth")
diff --git a/debian/patches/series b/debian/patches/series
index c82b55a..e69de29 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +0,0 @@
-remove-failing-tests.patch
diff --git a/doc/.gitignore b/doc/.gitignore
index d976b6b..c3db69f 100644
--- a/doc/.gitignore
+++ b/doc/.gitignore
@@ -3,7 +3,6 @@ _build
 # gallery is auto-generated; don't version-control it
 gallery
 _images
-data.json
 
 # generated class documentation
 user_guide/generated
diff --git a/doc/Makefile b/doc/Makefile
deleted file mode 100644
index 929e7fe..0000000
--- a/doc/Makefile
+++ /dev/null
@@ -1,250 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
-BUILDDIR      = _build
-
-# User-friendly check for sphinx-build
-ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
-    $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don\'t have Sphinx installed, grab it from http://sphinx-doc.org/)
-endif
-
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help
-help:
-	@echo "Please use \`make <target>' where <target> is one of"
-	@echo "  html       to make standalone HTML files"
-	@echo "  dirhtml    to make HTML files named index.html in directories"
-	@echo "  singlehtml to make a single large HTML file"
-	@echo "  pickle     to make pickle files"
-	@echo "  json       to make JSON files"
-	@echo "  htmlhelp   to make HTML files and a HTML help project"
-	@echo "  qthelp     to make HTML files and a qthelp project"
-	@echo "  applehelp  to make an Apple Help Book"
-	@echo "  devhelp    to make HTML files and a Devhelp project"
-	@echo "  epub       to make an epub"
-	@echo "  epub3      to make an epub3"
-	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
-	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of all changed/added/deprecated items"
-	@echo "  xml        to make Docutils-native XML files"
-	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
-	@echo "  linkcheck  to check all external links for integrity"
-	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
-	@echo "  coverage   to run coverage check of the documentation (if enabled)"
-	@echo "  dummy      to check syntax errors of document sources"
-
-.PHONY: clean
-clean:
-	rm -rf $(BUILDDIR)
-
-.PHONY: clean-generated
-clean-generated:
-	rm -rf user_guide/generated/
-	rm -rf gallery/
-
-.PHONY: clean-images
-clean-images:
-	rm -rf _images
-
-.PHONY: clean-all
-clean-all: clean clean-generated clean-images
-
-.PHONY: html
-html:
-	mkdir -p _images
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-.PHONY: dirhtml
-dirhtml:
-	mkdir -p _images
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-.PHONY: singlehtml
-singlehtml:
-	mkdir -p _images
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-.PHONY: pickle
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-.PHONY: json
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-.PHONY: htmlhelp
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-.PHONY: qthelp
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@echo
-	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
-	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
-	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/altair.qhcp"
-	@echo "To view the help file:"
-	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/altair.qhc"
-
-.PHONY: applehelp
-applehelp:
-	$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
-	@echo
-	@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
-	@echo "N.B. You won't be able to view it unless you put it in" \
-	      "~/Library/Documentation/Help or install it in your application" \
-	      "bundle."
-
-.PHONY: devhelp
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/altair"
-	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/altair"
-	@echo "# devhelp"
-
-.PHONY: epub
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-.PHONY: epub3
-epub3:
-	$(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
-	@echo
-	@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
-
-.PHONY: latex
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make' in that directory to run these through (pdf)latex" \
-	      "(use \`make latexpdf' here to do that automatically)."
-
-.PHONY: latexpdf
-latexpdf:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through pdflatex..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: latexpdfja
-latexpdfja:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through platex and dvipdfmx..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: text
-text:
-	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-	@echo
-	@echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-.PHONY: man
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-.PHONY: texinfo
-texinfo:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo
-	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-	@echo "Run \`make' in that directory to run these through makeinfo" \
-	      "(use \`make info' here to do that automatically)."
-
-.PHONY: info
-info:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo "Running Texinfo files through makeinfo..."
-	make -C $(BUILDDIR)/texinfo info
-	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-.PHONY: gettext
-gettext:
-	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-	@echo
-	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-.PHONY: changes
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-.PHONY: linkcheck
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-.PHONY: doctest
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
-
-.PHONY: coverage
-coverage:
-	$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
-	@echo "Testing of coverage in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/coverage/python.txt."
-
-.PHONY: xml
-xml:
-	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
-	@echo
-	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
-
-.PHONY: pseudoxml
-pseudoxml:
-	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
-	@echo
-	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
-
-.PHONY: dummy
-dummy:
-	$(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
-	@echo
-	@echo "Build finished. Dummy builder generates no files."
-
-
-.PHONY: publish
-publish: html
-	bash sync_website.sh
diff --git a/doc/_static/altair-gallery.css b/doc/_static/altair-gallery.css
index b7104fa..2dfe9e8 100644
--- a/doc/_static/altair-gallery.css
+++ b/doc/_static/altair-gallery.css
@@ -44,11 +44,13 @@ div.bottomnav {
 /* Front-page Example Showcase */
 #showcase {
   width: 100%;
-  height: 240px;
+  height: 300px;
   overflow: hidden;
   margin: 0;
   padding: 0;
-  position: relative;
+  position: absolute;
+  left: 0;
+  right: 0;
   margin-bottom: 10px;
 }
 #showcase:after,
@@ -71,13 +73,21 @@ div.bottomnav {
 }
 #showcase .examples {
   margin: 0 auto;
-  height: 240px;
-  width: 800px;
+  height: 300px;
   line-height: 0;
+  /* Width and padding settings give the example showcase the same width
+  as the page header on a big screen. On smaller screens, they both will
+  have the same width anyway as the title header is responsive and gets narrower
+  and the example showcase gets clipped by the overflow: hidden setting. */
+  width: 88rem;
+  padding-left: 1rem;
+  padding-right: 1rem;
 }
 #showcase .preview {
-  width: 144px;
-  height: 80px;
+  /* Value is chosen through trial and error so that the examples fill out the 
+  whole width which is defined in #showcase .examples */
+  width: 172px;
+  height: 100px;
   padding: 0;
   outline: 1px solid #ddd;
   background-position: left top;
@@ -132,4 +142,6 @@ div.bottomnav {
 
 .gallery .image-title {
   font-size: .95em;
+  display: block;
+  line-height: 22px;
 }
diff --git a/doc/_static/altair-plot.css b/doc/_static/altair-plot.css
index 06e9a91..a800138 100644
--- a/doc/_static/altair-plot.css
+++ b/doc/_static/altair-plot.css
@@ -8,6 +8,5 @@
 .vega-embed {
     margin-bottom: 20px;
     margin-top: 20px;
-    width: 100%;
 }
 
diff --git a/doc/_static/chart.html b/doc/_static/chart.html
index fbd768d..7290f33 100644
--- a/doc/_static/chart.html
+++ b/doc/_static/chart.html
@@ -2,18 +2,18 @@
 <html>
 <head>
   <script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
-  <script src="https://cdn.jsdelivr.net/npm/vega-lite@4"></script>
+  <script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
   <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
 </head>
 <body>
   <div id="vis"></div>
   <script type="text/javascript">
     var spec = {
-      "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+      "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
       "config": {
         "view": {
           "continuousHeight": 300,
-          "continuousWidth": 400
+          "continuousWidth": 300
         }
       },
       "data": {
diff --git a/doc/_static/custom.css b/doc/_static/custom.css
index fd823a1..f5c32b7 100644
--- a/doc/_static/custom.css
+++ b/doc/_static/custom.css
@@ -23,4 +23,73 @@ table.docutils td p {
 table.docutils td li {
   line-height: 18px;
 
-}
\ No newline at end of file
+}
+
+table td.vl-type-def {
+  max-width: 170px;
+  overflow-x: clip;
+}
+
+/* Hide this empty container as it leads to a vertical scrollbar in 
+the primary sidebar even if there is no need for such a scrollbar as all content
+would fit onto the screen */
+#rtd-footer-container {
+  display: none;
+}
+
+/* Default for the pydata theme is 25% */
+.bd-sidebar-primary {
+  max-width: 20%
+}
+
+/* By providing max-width above for .bd-sidebar-primary, we also overwrite
+the setting from the template for small screens, e.g. mobile phones. The values below
+are copied out of pydata-sphinx-theme.css so that the sidebar is again
+properly displayed on mobile devices and not restricted to 20% */
+@media (max-width: 959.98px) {
+  .bd-sidebar-primary {
+      max-width: 350px;
+  }
+}
+
+.properties-example .vega-bind-name {
+  display: inline-block;
+  min-width: 150px;
+}
+
+.properties-example .vega-bindings {
+  padding-left: 20px;
+  padding-bottom: 10px;
+}
+
+.properties-example .vega-bindings select {
+  max-width: 180px;
+}
+
+.properties-example .vega-bindings input {
+  vertical-align: text-bottom;
+  margin-right: 3px;
+}
+  
+.full-width-plot {
+  width: 100%;
+}
+
+/* Configurations for the start page
+------------------------------------ */
+.lead {
+  font-size: 1.3em;
+  font-weight: 300;
+  margin-top: 22px;
+  margin-bottom: 22px;
+  /* This pushes down the lead so that it is not rendered on top of
+  the gallery (showcase) which has an absolute position. The value is calculated
+  as height (showcase) + margin-bottom (showcase) + margin-top (lead) */
+  padding-top: 332px;
+}
+
+.lead strong {
+  /* Default is bolder which is less */
+  font-weight: bold;
+}
+/* ---------------------------------- */
\ No newline at end of file
diff --git a/doc/_static/theme_overrides.css b/doc/_static/theme_overrides.css
index f1ccfb9..33d3af3 100644
--- a/doc/_static/theme_overrides.css
+++ b/doc/_static/theme_overrides.css
@@ -23,3 +23,8 @@
 img.logo {
     width: 120px !important;
 }
+
+/* Increas max-width of the content area slightly to accomodate larger screens */
+.bd-main .bd-content .bd-article-container {
+    max-width: 1000px;
+}
diff --git a/doc/_templates/navbar-project.html b/doc/_templates/navbar-project.html
new file mode 100644
index 0000000..2b8ece7
--- /dev/null
+++ b/doc/_templates/navbar-project.html
@@ -0,0 +1,4 @@
+<a class="navbar-brand" href="{{ pathto(master_doc) }}">
+<p class="title">{{ project }}</p>
+</a>
+
diff --git a/doc/_templates/sidebar-logo.html b/doc/_templates/sidebar-logo.html
new file mode 100644
index 0000000..e3c1e8f
--- /dev/null
+++ b/doc/_templates/sidebar-logo.html
@@ -0,0 +1,13 @@
+<div class="navbar-brand-box">
+    <a class="navbar-brand text-wrap" href="{{ pathto('index') }}">
+      {% if logo %}
+        <!-- `logo` is deprecated in Sphinx 4.0, so remove this when we stop supporting 3 -->
+        {% set logo_url=logo %}
+      {% endif %}
+      {% if logo_url %}
+      <img src="{{ pathto('_static/' + logo, 1) }}" class="logo" alt="logo">
+      <br>
+      <p class="site-version" id="site-version">{{ version }}</p>
+      {% endif %}
+    </a>
+</div>
diff --git a/doc/case_studies/exploring-weather.rst b/doc/case_studies/exploring-weather.rst
index b85609e..4b16bef 100644
--- a/doc/case_studies/exploring-weather.rst
+++ b/doc/case_studies/exploring-weather.rst
@@ -1,7 +1,7 @@
 .. _exploring-weather:
 
 Exploring Seattle Weather
-=========================
+-------------------------
 
 (This tutorial is adapted from `Vega-Lite's documentation
 <http://vega.github.io/vega-lite/tutorials/explore.html>`_)
@@ -54,7 +54,7 @@ The result is a histogram of precipitation values:
 .. altair-plot::
 
     alt.Chart(df).mark_bar().encode(
-        alt.X('precipitation', bin=True),
+        alt.X('precipitation').bin(),
         y='count()'
     )
 
@@ -177,7 +177,7 @@ meaning of the plot more clear:
 .. altair-plot::
 
     alt.Chart(df).mark_bar().encode(
-        x=alt.X('month(date):N', title='Month of the year'),
+        x=alt.X('month(date):N').title('Month of the year'),
         y='count()',
         color=alt.Color('weather', legend=alt.Legend(title='Weather type'), scale=scale),
     )
@@ -191,10 +191,10 @@ and to allow interactive panning and zooming with the mouse:
 .. altair-plot::
 
     alt.Chart(df).mark_point().encode(
-        alt.X('temp_max', title='Maximum Daily Temperature (C)'),
-        alt.Y('temp_range:Q', title='Daily Temperature Range (C)'),
-        alt.Color('weather', scale=scale),
-        alt.Size('precipitation', scale=alt.Scale(range=[1, 200]))
+        alt.X('temp_max').title('Maximum Daily Temperature (C)'),
+        alt.Y('temp_range:Q').title('Daily Temperature Range (C)'),
+        alt.Color('weather').scale(scale),
+        alt.Size('precipitation').scale(range=[1, 200])
     ).transform_calculate(
         "temp_range", "datum.temp_max - datum.temp_min"
     ).properties(
@@ -215,7 +215,7 @@ by weather type:
     alt.Chart(df).mark_bar().encode(
         x='count()',
         y='weather:N',
-        color=alt.Color('weather:N', scale=scale),
+        color=alt.Color('weather:N').scale(scale),
     )
 
 And now we can vertically concatenate this histogram to the points plot above,
@@ -225,26 +225,26 @@ of the selection (for more information on selections, see
 
 .. altair-plot::
 
-    brush = alt.selection(type='interval')
+    brush = alt.selection_interval()
 
     points = alt.Chart().mark_point().encode(
-        alt.X('temp_max:Q', title='Maximum Daily Temperature (C)'),
-        alt.Y('temp_range:Q', title='Daily Temperature Range (C)'),
+        alt.X('temp_max:Q').title('Maximum Daily Temperature (C)'),
+        alt.Y('temp_range:Q').title('Daily Temperature Range (C)'),
         color=alt.condition(brush, 'weather:N', alt.value('lightgray'), scale=scale),
-        size=alt.Size('precipitation:Q', scale=alt.Scale(range=[1, 200]))
+        size=alt.Size('precipitation:Q').scale(range=[1, 200])
     ).transform_calculate(
         "temp_range", "datum.temp_max - datum.temp_min"
     ).properties(
         width=600,
         height=400
-    ).add_selection(
+    ).add_params(
         brush
     )
 
     bars = alt.Chart().mark_bar().encode(
         x='count()',
         y='weather:N',
-        color=alt.Color('weather:N', scale=scale),
+        color=alt.Color('weather:N').scale(scale),
     ).transform_calculate(
         "temp_range", "datum.temp_max - datum.temp_min"
     ).transform_filter(
@@ -263,6 +263,13 @@ This is the end of this tutorial where you have seen various ways to bin
 and aggregate data, derive new fields, and customize your charts.
 You can find more visualizations in the :ref:`example-gallery`.
 If you want to further customize your charts, you can refer to Altair's
-:ref:`API`.
+:ref:`api`.
 
 .. _Pandas: http://pandas.pydata.org/
+
+
+.. toctree::
+   :maxdepth: 1
+   :hidden:
+
+   self
diff --git a/doc/conf.py b/doc/conf.py
index 0344be5..1ebc128 100644
--- a/doc/conf.py
+++ b/doc/conf.py
@@ -12,8 +12,9 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import sys
 import os
+import sys
+from datetime import datetime
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
@@ -35,9 +36,11 @@ extensions = [
     "sphinx.ext.coverage",
     "sphinx.ext.githubpages",
     "numpydoc.numpydoc",
-    "altair.sphinxext.altairplot",
-    "altair.sphinxext.altairgallery",
-    "altair.sphinxext.schematable",
+    "sphinxext_altair.altairplot",
+    "sphinxext.altairgallery",
+    "sphinxext.schematable",
+    "sphinx_copybutton",
+    "sphinx_design",
 ]
 
 altair_plot_links = {"editor": True, "source": False, "export": False}
@@ -64,25 +67,25 @@ source_suffix = ".rst"
 master_doc = "index"
 
 # General information about the project.
-project = "Altair"
-copyright = "2016-2020, Altair Developers"
-author = "Brian Granger and Jake VanderPlas"
+project = "Vega-Altair"
+copyright = "2016-{}, Vega-Altair Developers".format(datetime.now().year)
+author = "Vega-Altair Developers"
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = "4.2.0"
+version = "5.0.1"
 # The full version, including alpha/beta/rc tags.
-release = version
+release = f"{version}"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
 #
 # This is also used if you do content translation via gettext catalogs.
 # Usually you set "language" from the command line for these cases.
-language = None
+language = "en"
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
@@ -127,12 +130,36 @@ todo_include_todos = False
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
-html_theme = "sphinx_rtd_theme"
+html_theme = "pydata_sphinx_theme"
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
 # documentation.
-# html_theme_options = {}
+html_theme_options = {
+    "navbar_start": ["navbar-logo", "navbar-project"],
+    "navbar_center": ["navbar-nav"],
+    "navbar_end": ["theme-switcher", "navbar-icon-links"],
+    "primary_sidebar_end": [],
+    "footer_items": [],
+    "icon_links": [
+        {
+            "name": "GitHub",
+            "url": "https://github.com/altair-viz/altair",
+            "icon": "fab fa-github fa-lg",
+            "type": "fontawesome",
+        },
+        {
+            "name": "StackOverflow",
+            "url": "https://stackoverflow.com/tags/altair",
+            "icon": "fab fa-stack-overflow fa-xl",
+            "type": "fontawesome",
+        },
+    ],
+    "header_links_before_dropdown": 6,
+    "announcement": """This website is for version 5. You can find the documentation for version 4 <a href='https://altair-viz.github.io/altair-viz-v4/'>here</a>.""",
+}
+
+html_context = {"default_mode": "light"}
 
 # Add any paths that contain custom themes here, relative to this directory.
 # html_theme_path = []
@@ -166,6 +193,7 @@ def setup(app):
     app.add_css_file("theme_overrides.css")
     app.add_css_file("custom.css")
 
+
 # Add any extra paths that contain custom files (such as robots.txt or
 # .htaccess) here, relative to this directory. These files are copied
 # directly to the root of the documentation.
@@ -181,7 +209,16 @@ def setup(app):
 # html_use_smartypants = True
 
 # Custom sidebar templates, maps document names to template names.
-# html_sidebars = {}
+html_sidebars = {
+    "index": [],
+    "**": ["sidebar-nav-bs"],
+}
+
+# Redirection of old page locations via the rediraffe sphinx-extension
+# It seems like only pages can be redirected, not headings within pages
+# rediraffe_redirects = {
+#     'case_studies/exploring-weather.rst': 'user_guide/case_studies/exploring-weather.rst'
+# }
 
 # Additional templates that should be rendered to pages, maps page names to
 # template names.
@@ -197,7 +234,7 @@ def setup(app):
 # html_split_index = False
 
 # If true, links to the reST sources are added to the pages.
-# html_show_sourcelink = True
+html_show_sourcelink = False
 
 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
 # html_show_sphinx = True
@@ -253,7 +290,7 @@ latex_documents = [
         master_doc,
         "altair.tex",
         "altair Documentation",
-        "Brian Granger and Jake VanderPlas",
+        "Altair Developers",
         "manual",
     ),
 ]
diff --git a/doc/getting_started/getting_help.rst b/doc/getting_started/getting_help.rst
new file mode 100644
index 0000000..e89fb7e
--- /dev/null
+++ b/doc/getting_started/getting_help.rst
@@ -0,0 +1,20 @@
+Getting Help
+============
+
+Altair is BSD-licensed and the source is available on `GitHub`_,
+where you can also report `bugs and feature requests`_.
+For general questions, please ask on `StackOverflow`_
+using the `altair` tag.
+
+You can browse this documentation
+via the links in the top navigation panel
+or by viewing the full site :ref:`genindex`.
+In addition to reading this documentation page,
+it can be helpful to also browse the `Vega-Lite documentation <https://vega.github.io/vega-lite/docs/>`_.
+
+.. _GitHub: http://github.com/altair-viz/altair
+.. _Git Issues: http://github.com/altair-viz/altair/issues
+.. _Vega: http://vega.github.io/vega
+.. _Vega-Lite: http://vega.github.io/vega-lite
+.. _bugs and feature requests: https://github.com/altair-viz/altair/issues/new/choose
+.. _StackOverflow: https://stackoverflow.com/tags/altair
diff --git a/doc/getting_started/installation.rst b/doc/getting_started/installation.rst
index 1e31f2e..06078b3 100644
--- a/doc/getting_started/installation.rst
+++ b/doc/getting_started/installation.rst
@@ -4,46 +4,26 @@
 
 Installation
 ============
-Altair can be installed, along with the example datasets in vega_datasets_, using::
 
-    $ pip install altair vega_datasets
+Altair can be installed, along with the example datasets in vega_datasets_, using:
 
-If you are using the conda_ package manager, the equivalent is::
+.. code-block:: bash
+
+    pip install altair vega_datasets
 
-    $ conda install -c conda-forge altair vega_datasets
+If you are using the conda_ package manager, the equivalent is:
+
+.. code-block:: bash
+
+    conda install -c conda-forge altair vega_datasets
 
 At this point, you should be able to open `Jupyter Notebook`_ or `JupyterLab`_
 and execute any of the code from the :ref:`example-gallery`.
 For more information on how to display charts in various notebook environments
 and non-notebook IDEs, see :ref:`displaying-charts`.
 
-Dependencies
-============
-
-Altair has the following dependencies, all of which are installed automatically
-with the above installation commands:
-
-- python 3.6 or newer
-- entrypoints_
-- jsonschema_
-- NumPy_
-- Pandas_
-- Toolz_
-
-To run Altair's full test suite and build Altair's documentation requires a few
-additional dependencies:
-
-- flake8
-- pytest
-- jinja2
-- sphinx
-- m2r
-- docutils
-- vega_datasets_
-- ipython
-
-Development Install
-===================
+Development Installation
+========================
 
 The `Altair source repository`_ is available on GitHub. Once you have cloned the
 repository and installed all the above dependencies, run the following command
@@ -51,35 +31,27 @@ from the root of the repository to install the master version of Altair:
 
 .. code-block:: bash
 
-    $ pip install -e .
+    pip install -e .
 
 To install development dependencies as well, run
 
 .. code-block:: bash
 
-    $ pip install -e .[dev]
+    pip install -e .[dev]
 
 If you do not wish to clone the source repository, you can install the
 development version directly from GitHub using:
 
 .. code-block:: bash
 
-    $ pip install -e git+https://github.com/altair-viz/altair.git
+    pip install -e git+https://github.com/altair-viz/altair.git
 
+Please see `CONTRIBUTING.md <https://github.com/altair-viz/altair/blob/master/CONTRIBUTING.md>`_
+for details on how to contribute to the Altair project.
 
 .. _conda: https://docs.conda.io/
 .. _Vega-Lite: http://vega.github.io/vega-lite
+.. _vega_datasets: https://github.com/altair-viz/vega_datasets
 .. _JupyterLab: http://jupyterlab.readthedocs.io/
 .. _Jupyter Notebook: https://jupyter-notebook.readthedocs.io/
-.. _Zeppelin: https://zeppelin.apache.org/
-.. _IPython: https://github.com/ipython/ipython
-
-.. _entrypoints: https://github.com/takluyver/entrypoints
-.. _jsonschema: https://github.com/Julian/jsonschema
-.. _NumPy: http://www.numpy.org/
-.. _Pandas: http://pandas.pydata.org
-.. _Toolz: https://github.com/pytoolz/toolz
-.. _vega_datasets: https://github.com/altair-viz/vega_datasets
 .. _Altair source repository: http://github.com/altair-viz/altair
-.. _nteract: https://nteract.io
-.. _vega: https://pypi.python.org/pypi/vega/
diff --git a/doc/getting_started/overview.rst b/doc/getting_started/overview.rst
index 995d02b..929fd86 100644
--- a/doc/getting_started/overview.rst
+++ b/doc/getting_started/overview.rst
@@ -3,22 +3,24 @@
 Overview
 ========
 
-Altair is a declarative statistical visualization library for Python, based on
+Vega-Altair is a declarative statistical visualization library for Python, based on
 Vega_ and Vega-Lite_.
 
-Altair offers a powerful and concise visualization grammar that enables you to build
-a wide range of statistical visualizations quickly. Here is an example of using the
-Altair API to quickly visualize a dataset with
+It offers a powerful and concise grammar that enables you to quickly build
+a wide range of statistical visualizations. Here is an example of using the
+API to visualize a dataset with
 an interactive scatter plot:
 
 .. altair-plot::
 
+    # import altair with an abbreviated alias
     import altair as alt
 
-    # load a simple dataset as a pandas DataFrame
+    # load a sample dataset as a pandas DataFrame
     from vega_datasets import data
     cars = data.cars()
 
+    # make the chart 
     alt.Chart(cars).mark_point().encode(
         x='Horsepower',
         y='Miles_per_Gallon',
@@ -26,10 +28,27 @@ an interactive scatter plot:
     ).interactive()
 
 The key idea is that you are declaring links between *data columns* and *visual encoding
-channels*, such as the x-axis, y-axis, color, etc. The rest of the plot details are
-handled automatically. Building on this declarative plotting idea, a surprising range
-of simple to sophisticated plots and visualizations can be created using a relatively
+channels*, such as the x-axis, y-axis and color. The rest of the plot details are
+handled automatically. Building on this declarative system, a surprising range
+of plots, from simple to sophisticated, can be created using a
 concise grammar.
 
+The project is named after the `brightest star <https://en.wikipedia.org/wiki/Altair>`_ 
+in the constellation Aquila. From Earth's sky Altair appears close to Vega, the star from which our parent project drew its name.
+
+This documentation serves as the main reference for learning about Altair. Additional learning material and tutorials can be found in the :ref:`learning-resources` section. It can also be helpful to browse the `Vega-Lite documentation <https://vega.github.io/vega-lite/docs/>`_.
+
 .. _Vega: http://vega.github.io/vega
 .. _Vega-Lite: http://vega.github.io/vega-lite
+
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Getting Started
+   :hidden:
+
+   self
+   installation
+   starting
+   getting_help
+   project_philosophy
diff --git a/doc/getting_started/project_philosophy.rst b/doc/getting_started/project_philosophy.rst
new file mode 100644
index 0000000..7681df8
--- /dev/null
+++ b/doc/getting_started/project_philosophy.rst
@@ -0,0 +1,67 @@
+Project Philosophy
+==================
+
+Many excellent plotting libraries exist in Python, including:
+
+* `Matplotlib <https://matplotlib.org/>`_
+* `Bokeh <https://bokeh.pydata.org/en/latest/>`_
+* `Seaborn <https://seaborn.pydata.org/>`_
+* `Lightning <http://lightning-viz.org>`_
+* `Plotly <https://plot.ly/>`_
+* `Pandas built-in plotting <https://pandas.pydata.org/pandas-docs/stable/visualization.html>`_
+* `HoloViews <https://holoviews.org>`_
+* `VisPy <https://vispy.org/>`_
+* `pygg <https://www.github.com/sirrice/pygg>`_
+
+Each library does a particular set of things well.
+
+User Challenges
+---------------
+
+However, such a proliferation of options creates great difficulty for users
+as they have to wade through all of these APIs to find which of them is the
+best for the task at hand. None of these libraries are optimized for
+high-level statistical visualization, so users have to assemble their own
+using a mishmash of APIs. For individuals just learning to work with data, this
+forces them to focus on learning APIs rather than exploring their data.
+
+Another challenge is current plotting APIs require the user to write code,
+even for incidental details of a visualization. This results in an unfortunate
+and unnecessary cognitive burden as the visualization type (histogram,
+scatterplot, etc.) can often be inferred using basic information such as the
+columns of interest and the data types of those columns.
+
+For example, if you are interested in the visualization of two numerical
+columns, a scatterplot is almost certainly a good starting point. If you add
+a categorical column to that, you probably want to encode that column using
+colors or facets. If inferring the visualization proves difficult at times, a
+simple user interface can construct a visualization without any coding.
+`Tableau <https://www.tableau.com/>`_ and the `Interactive Data
+Lab's <https://idl.cs.washington.edu/>`_
+`Polestar <https://github.com/vega/polestar>`_ and
+`Voyager <https://github.com/vega/voyager>`_ are excellent examples of such UIs.
+
+Design Approach and Solution
+----------------------------
+
+We believe that these challenges can be addressed without the creation of yet
+another visualization library that has a programmatic API and built-in
+rendering. Vega-Altair's approach to building visualizations uses a layered design
+that leverages the full capabilities of existing visualization libraries:
+
+1. Create a constrained, simple Python API (Vega-Altair) that is purely declarative
+2. Use the API (Vega-Altair) to emit JSON output that follows the Vega-Lite spec
+3. Render that spec using existing visualization libraries
+
+This approach enables users to perform exploratory visualizations with a much
+simpler API initially, pick an appropriate renderer for their usage case, and
+then leverage the full capabilities of that renderer for more advanced plot
+customization.
+
+We realize that a declarative API will necessarily be limited compared to the
+full programmatic APIs of Matplotlib, Bokeh, etc. That is a deliberate design
+choice we feel is needed to simplify the user experience of exploratory
+visualization.
+
+You can find a more detailed comparison between Plotly and Altair in
+`this StackOverflow answer <https://stackoverflow.com/a/66040502>`_.
diff --git a/doc/getting_started/starting.rst b/doc/getting_started/starting.rst
index 4b50aad..61fc801 100644
--- a/doc/getting_started/starting.rst
+++ b/doc/getting_started/starting.rst
@@ -10,10 +10,11 @@ Basic Statistical Visualization
 
 This tutorial will guide you through the basic process of creating
 visualizations in Altair. First, you will need to make sure you have the Altair
-package and its dependencies installed (see :ref:`installation`) and make sure
-you understand how altair plots are displayed (see :ref:`displaying-charts`).
+package and its dependencies installed (see :ref:`installation`).
 This tutorial will assume you are working within a Jupyter notebook user
-interface, so that plots are automatically rendered.
+interface (such as JupyterLab, Colab or VS Code), so that plots are automatically rendered. 
+If you are using another interface, you may want to read about how Altair 
+plots are displayed before proceeding (see :ref:`displaying-charts`).
 
 Here is the outline of this basic tutorial:
 
@@ -192,7 +193,7 @@ column as well:
     y = alt.Y('average(b):Q')
     print(y.to_json())
 
-This short-hand is equivalent to spelling-out the attributes by name:
+This short-hand is equivalent to spelling-out the parameters by name:
 
 .. altair-plot::
     :output: repr
@@ -220,16 +221,16 @@ Customizing your Visualization
 By default, Altair via Vega-Lite makes some choices about default properties
 of the visualization.
 Altair also provides an API to customize the look of the visualization.
-For example, we can specify the axis titles using the ``axis`` attribute
-of channel classes, and we can specify the color of the marking by setting
-the ``color`` keyword of the ``Chart.mark_*`` methods to any valid HTML
+For example, we can specify the axis titles using the :meth:`title` method
+of channel classes, and we can specify the color of the mark by setting
+the ``color`` keyword of the ``Chart.mark_*`` method to any valid HTML
 color string:
 
 .. altair-plot::
 
     alt.Chart(data).mark_bar(color='firebrick').encode(
-        alt.Y('a', title='category'),
-        alt.X('average(b)', title='avg(b) by category')
+        alt.Y('a').title('category'),
+        alt.X('average(b)').title('avg(b) by category')
     )
 
 
diff --git a/doc/index.rst b/doc/index.rst
index f24afbb..f87d66e 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -1,95 +1,69 @@
-Altair: Declarative Visualization in Python
-===========================================
+:html_theme.sidebar_secondary.remove:
+
+Vega-Altair: Declarative Visualization in Python
+================================================
 .. role:: raw-html(raw)
    :format: html
 
-
 .. altair-minigallery::
-   :names: one_dot_per_zipcode, horizon_graph, world_projections, candlestick_chart, falkensee, scatter_linked_brush, layered_heatmap_text, natural_disasters, streamgraph, multiline_tooltip, select_detail, choropleth, interactive_cross_highlight, seattle_weather_interactive, london_tube
-   :size: 15
+   :names: one_dot_per_zipcode, horizon_graph, world_projections, candlestick_chart, falkensee, errorbars_with_ci, scatter_linked_brush, line_with_ci, natural_disasters, bar_rounded, streamgraph, multiline_tooltip, choropleth, select_detail, interactive_cross_highlight, seattle_weather_interactive, london_tube, ridgeline_plot, violin_plot, strip_plot, table_bubble_plot_github, radial_chart, boxplot, mosaic_with_labels
+   :size: 24
 
-Altair is a declarative statistical visualization library for Python, based on
-Vega_ and Vega-Lite_, and the source is available on
-`GitHub <http://github.com/altair-viz/altair>`_.
 
-With Altair, you can spend more time understanding your data and its meaning.
-Altair's API is simple, friendly and consistent and built on top of the
-powerful Vega-Lite_ visualization grammar. This elegant simplicity produces
-beautiful and effective visualizations with a minimal amount of code.
+.. rst-class:: lead
 
-.. toctree::
-   :maxdepth: 1
-   :caption: Getting Started
+   **Vega-Altair** is a declarative visualization library for Python. Its simple, friendly and consistent API, built on top of the powerful Vega-Lite_ grammar, empowers you to spend less time writing code and more time exploring your data.
 
-   getting_started/overview
-   getting_started/installation
-   getting_started/starting
 
-.. toctree::
-   :maxdepth: 1
-   :caption: Gallery
+.. grid:: 1 1 2 2
+   :padding: 0 2 3 5
+   :gutter: 2 2 3 3
+   :class-container: startpage-grid
 
-   gallery/index
+   .. grid-item-card:: Getting Started
+      :link: overview
+      :link-type: ref
+      :link-alt: Getting started
 
-.. toctree::
-   :maxdepth: 1
-   :caption: User Guide
-
-   user_guide/data
-   user_guide/encoding
-   user_guide/marks
-   user_guide/transform/index
-   user_guide/interactions
-   user_guide/configuration
-   user_guide/compound_charts
-   user_guide/scale_resolve
-   user_guide/saving_charts
-   user_guide/customization
-   user_guide/times_and_dates
-   user_guide/faq
-   user_guide/troubleshooting
-   user_guide/internals
-   user_guide/API
-   user_guide/ecosystem
+      In the Getting Started section you can find installation instructions and a high-level overview of the main concepts.
 
-.. toctree::
-   :maxdepth: 1
-   :caption: Case Studies
+   .. grid-item-card:: User Guide
+      :link: user-guide-data
+      :link-type: ref
+      :link-alt: User guide
 
-   case_studies/exploring-weather
+      Check out the User Guides for in-depth information on the key concepts of Vega-Altair.
 
-.. toctree::
-   :maxdepth: 1
-   :caption: Advanced Usage
-
-   user_guide/importing
-   user_guide/display_frontends
-   user_guide/custom_renderers
-   user_guide/data_transformers
+   .. grid-item-card:: Examples
+      :link: example-gallery
+      :link-type: ref
+      :link-alt: Examples
 
-.. toctree::
-   :maxdepth: 1
-   :caption: Release Notes
-   
-   releases/changes
+      The Examples gallery contains a selection of different visualizations which you can create with Vega-Altair.
 
-Bug Reports & Questions
------------------------
+   .. grid-item-card:: API
+      :link: api
+      :link-type: ref
+      :link-alt: api
 
-Altair is BSD-licensed and the source is available on `GitHub`_. If any
-questions or issues come up as you use Altair, please get in touch via
-`Git Issues`_ or our `Google Group`_.
+      The API reference guide contains detailed information on all of Vega-Altair's methods and classes.
 
 
-Indices and tables
-------------------
+*The Vega-Altair open-source project is not affiliated with Altair Engineering, Inc.*
 
-* :ref:`genindex`
-* :ref:`modindex`
+.. toctree::
+   :maxdepth: 1
+   :hidden:
 
+   Getting Started <getting_started/overview>
+   User Guide <user_guide/data>
+   Examples <gallery/index>
+   API <user_guide/api>
+   user_guide/ecosystem
+   releases/changes
 
 .. _GitHub: http://github.com/altair-viz/altair
 .. _Git Issues: http://github.com/altair-viz/altair/issues
-.. _Vega: http://vega.github.io/vega
 .. _Vega-Lite: http://vega.github.io/vega-lite
-.. _Google Group: https://groups.google.com/forum/#!forum/altair-viz
+.. _bugs and feature requests: https://github.com/altair-viz/altair/issues/new/choose
+.. _StackOverflow: https://stackoverflow.com/tags/altair
diff --git a/doc/make.bat b/doc/make.bat
deleted file mode 100644
index 07a08f9..0000000
--- a/doc/make.bat
+++ /dev/null
@@ -1,281 +0,0 @@
-@ECHO OFF
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
-	set SPHINXBUILD=sphinx-build
-)
-set BUILDDIR=_build
-set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
-set I18NSPHINXOPTS=%SPHINXOPTS% .
-if NOT "%PAPER%" == "" (
-	set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
-	set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
-)
-
-if "%1" == "" goto help
-
-if "%1" == "help" (
-	:help
-	echo.Please use `make ^<target^>` where ^<target^> is one of
-	echo.  html       to make standalone HTML files
-	echo.  dirhtml    to make HTML files named index.html in directories
-	echo.  singlehtml to make a single large HTML file
-	echo.  pickle     to make pickle files
-	echo.  json       to make JSON files
-	echo.  htmlhelp   to make HTML files and a HTML help project
-	echo.  qthelp     to make HTML files and a qthelp project
-	echo.  devhelp    to make HTML files and a Devhelp project
-	echo.  epub       to make an epub
-	echo.  epub3      to make an epub3
-	echo.  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter
-	echo.  text       to make text files
-	echo.  man        to make manual pages
-	echo.  texinfo    to make Texinfo files
-	echo.  gettext    to make PO message catalogs
-	echo.  changes    to make an overview over all changed/added/deprecated items
-	echo.  xml        to make Docutils-native XML files
-	echo.  pseudoxml  to make pseudoxml-XML files for display purposes
-	echo.  linkcheck  to check all external links for integrity
-	echo.  doctest    to run all doctests embedded in the documentation if enabled
-	echo.  coverage   to run coverage check of the documentation if enabled
-	echo.  dummy      to check syntax errors of document sources
-	goto end
-)
-
-if "%1" == "clean" (
-	for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
-	del /q /s %BUILDDIR%\*
-	goto end
-)
-
-
-REM Check if sphinx-build is available and fallback to Python version if any
-%SPHINXBUILD% 1>NUL 2>NUL
-if errorlevel 9009 goto sphinx_python
-goto sphinx_ok
-
-:sphinx_python
-
-set SPHINXBUILD=python -m sphinx.__init__
-%SPHINXBUILD% 2> nul
-if errorlevel 9009 (
-	echo.
-	echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
-	echo.installed, then set the SPHINXBUILD environment variable to point
-	echo.to the full path of the 'sphinx-build' executable. Alternatively you
-	echo.may add the Sphinx directory to PATH.
-	echo.
-	echo.If you don't have Sphinx installed, grab it from
-	echo.http://sphinx-doc.org/
-	exit /b 1
-)
-
-:sphinx_ok
-
-
-if "%1" == "html" (
-	%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/html.
-	goto end
-)
-
-if "%1" == "dirhtml" (
-	%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
-	goto end
-)
-
-if "%1" == "singlehtml" (
-	%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
-	goto end
-)
-
-if "%1" == "pickle" (
-	%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can process the pickle files.
-	goto end
-)
-
-if "%1" == "json" (
-	%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can process the JSON files.
-	goto end
-)
-
-if "%1" == "htmlhelp" (
-	%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can run HTML Help Workshop with the ^
-.hhp project file in %BUILDDIR%/htmlhelp.
-	goto end
-)
-
-if "%1" == "qthelp" (
-	%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; now you can run "qcollectiongenerator" with the ^
-.qhcp project file in %BUILDDIR%/qthelp, like this:
-	echo.^> qcollectiongenerator %BUILDDIR%\qthelp\altair.qhcp
-	echo.To view the help file:
-	echo.^> assistant -collectionFile %BUILDDIR%\qthelp\altair.ghc
-	goto end
-)
-
-if "%1" == "devhelp" (
-	%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished.
-	goto end
-)
-
-if "%1" == "epub" (
-	%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The epub file is in %BUILDDIR%/epub.
-	goto end
-)
-
-if "%1" == "epub3" (
-	%SPHINXBUILD% -b epub3 %ALLSPHINXOPTS% %BUILDDIR%/epub3
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The epub3 file is in %BUILDDIR%/epub3.
-	goto end
-)
-
-if "%1" == "latex" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "latexpdf" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	cd %BUILDDIR%/latex
-	make all-pdf
-	cd %~dp0
-	echo.
-	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "latexpdfja" (
-	%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
-	cd %BUILDDIR%/latex
-	make all-pdf-ja
-	cd %~dp0
-	echo.
-	echo.Build finished; the PDF files are in %BUILDDIR%/latex.
-	goto end
-)
-
-if "%1" == "text" (
-	%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The text files are in %BUILDDIR%/text.
-	goto end
-)
-
-if "%1" == "man" (
-	%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The manual pages are in %BUILDDIR%/man.
-	goto end
-)
-
-if "%1" == "texinfo" (
-	%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
-	goto end
-)
-
-if "%1" == "gettext" (
-	%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
-	goto end
-)
-
-if "%1" == "changes" (
-	%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.The overview file is in %BUILDDIR%/changes.
-	goto end
-)
-
-if "%1" == "linkcheck" (
-	%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Link check complete; look for any errors in the above output ^
-or in %BUILDDIR%/linkcheck/output.txt.
-	goto end
-)
-
-if "%1" == "doctest" (
-	%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Testing of doctests in the sources finished, look at the ^
-results in %BUILDDIR%/doctest/output.txt.
-	goto end
-)
-
-if "%1" == "coverage" (
-	%SPHINXBUILD% -b coverage %ALLSPHINXOPTS% %BUILDDIR%/coverage
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Testing of coverage in the sources finished, look at the ^
-results in %BUILDDIR%/coverage/python.txt.
-	goto end
-)
-
-if "%1" == "xml" (
-	%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The XML files are in %BUILDDIR%/xml.
-	goto end
-)
-
-if "%1" == "pseudoxml" (
-	%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
-	goto end
-)
-
-if "%1" == "dummy" (
-	%SPHINXBUILD% -b dummy %ALLSPHINXOPTS% %BUILDDIR%/dummy
-	if errorlevel 1 exit /b 1
-	echo.
-	echo.Build finished. Dummy builder generates no files.
-	goto end
-)
-
-:end
diff --git a/doc/releases/changes.rst b/doc/releases/changes.rst
index c69f85a..7c624b4 100644
--- a/doc/releases/changes.rst
+++ b/doc/releases/changes.rst
@@ -1,15 +1,103 @@
 .. _changes:
 
-Altair Change Log
-=================
+Release Notes
+=============
+
+Version 5.0.1 (released May 26, 2023)
+-------------------------------------
+
+- Remove unwanted files during build to avoid littering site-packages folder (#3057).
+- Deprecate the ``.ref()`` function for selections, instead of removing it (#3063). 
+- Fix bug in reconstructing layered charts with ``Chart.from_json()``/``Chart.from_dict()`` (#3068).
+
+Version 5.0.0 (released May 9, 2023)
+------------------------------------
+
+- Update Vega-Lite from version 4.17.0 to version 5.8.0;
+  see `Vega-Lite Release Notes <https://github.com/vega/vega-lite/releases>`_.
+
+Enhancements
+~~~~~~~~~~~~
+
+- As described in the release notes for `Vega-Lite 5.0.0 <https://github.com/vega/vega-lite/releases/tag/v5.0.0>`_, the primary change in this release of Altair is the introduction of parameters. There are two types of parameters, selection parameters and variable parameters.  Variable parameters are new to Altair, and while selections are not new, much of the old terminology has been deprecated.  See :ref:`gallery_slider_cutoff` for an application of variable parameters (#2528).
+- Grouped bar charts and jitter are now supported using offset channels, see :ref:`gallery_grouped_bar_chart2` and :ref:`gallery_strip_plot_jitter`
+- `vl-convert <https://github.com/vega/vl-convert>`_ is now used as the default backend for saving Altair charts as svg and png files, which simplifies saving chart as it does not require external dependencies like `altair_saver <http://github.com/altair-viz/altair_saver>`_ does (#2701). Currently, `altair_saver <http://github.com/altair-viz/altair_saver>`_ does not support Altair 5 and it is recommended to switch to `vl-convert <https://github.com/vega/vl-convert>`_. See :ref:`saving-png` for more details.
+- Saving charts with HTML inline is now supported without having `altair_saver <http://github.com/altair-viz/altair_saver>`_ installed (#2807).
+- The default chart width was changed from 400 to 300 (#2785).
+- Ordered pandas categorical data are now automatically encoded as sorted ordinal data (#2522)
+- The ``Title`` and ``Impute`` aliases were added for ``TitleParams`` and ``ImputeParams``, respectively (#2732).
+- The documentation page has been revamped, both in terms of appearance and content.
+- More informative autocompletion by removing deprecated methods (#2814) and for editors that rely on type hints (e.g. VS Code) we added support for completion in method chains (#2846) and extended keyword completion to cover additional methods (#2920).
+- Substantially improved error handling. Both in terms of finding the more relevant error (#2842), and in terms of improving the formatting and clarity of the error messages (#2824, #2568, #2979, #3009).
+- Include experimental support for the DataFrame Interchange Protocol (through ``__dataframe__`` attribute). This requires ``pyarrow>=11.0.0`` (#2888).
+- Support data type inference for columns with special characters (#2905).
+- Responsive width support using ``width="container"`` when saving charts to html or displaying them with the default  `html` renderer (#2867).
+
+Grammar Changes
+~~~~~~~~~~~~~~~
+
+- Channel options can now be set via a more convenient method-based syntax in addition to the previous attribute-based syntax. For example, instead of ``alt.X(..., bin=alt.Bin(...))`` it is now recommend to use ``alt.X(...).bin(...)```) (#2795). See :ref:`method-based-attribute-setting` for details.
+- ``selection_single`` and ``selection_multi`` are now deprecated; use ``selection_point`` instead.  Similarly, ``type=point`` should be used instead of ``type=single`` and ``type=multi``.
+- ``add_selection`` is deprecated; use ``add_params`` instead.
+- The ``selection`` keyword argument must in many cases be replaced by ``param`` (e.g., when specifying a filter transform).
+- The ``empty`` keyword argument for a selection parameter should be specified as ``True`` or ``False`` instead of ``all`` or ``none``, respectively.
+- The ``init`` keyword argument for a parameter is deprecated; use ``value`` instead.
+
+Bug Fixes
+~~~~~~~~~
+
+- Displaying a chart not longer changes the shorthand syntax of the stored spec (#2813).
+- Fixed ``disable_debug_mode`` (#2851).
+- Fixed issue where the webdriver was not working with Firefox's geckodriver (#2466).
+- Dynamically determine the jsonschema validator to avoid issues with recent jsonschema versions (#2812).
+
+Backward-Incompatible Changes
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Colons in column names must now be escaped to remove any ambiguity with encoding types. You now need to write ``"column\:name"`` instead of ``"column:name"`` (#2824).
+- Removed the Vega (v5) wrappers and deprecate rendering in Vega mode (save Chart as Vega format is still allowed) (#2829).
+- Removed the Vega-Lite 3 and 4 wrappers (#2847).
+- Removed the deprecated datasets.py (#3010).
+- In regards to the grammar changes listed above, the old terminology will still work in many basic cases.  On the other hand, if that old terminology gets used at a lower level, then it most likely will not work.  For example, in the current version of :ref:`gallery_scatter_with_minimap`, two instances of the key ``param`` are used in dictionaries to specify axis domains.  Those used to be ``selection``, but that usage is not compatible with the current Vega-Lite schema.
+- Removed the ``altair.sphinxext`` module (#2792). The ``altair-plot`` Sphinx directive is now part of the `sphinxext-altair <https://github.com/altair-viz/sphinxext-altair>`_ package.
+
+Maintenance
+~~~~~~~~~~~
+
+- Vega-Altair now uses ``hatch`` for package management.
+- Vega-Altair now uses ``ruff`` for linting.
+
+Version 4.2.2 (released Jan 27, 2023)
+-------------------------------------
+
+Bug Fixes
+~~~~~~~~~
+
+- Fix incompatibility with jsonschema < 4.5 which got introduced in Altair 4.2.1 (#2860).
+
+Version 4.2.1 (released Jan 26, 2023)
+-------------------------------------
+
+Bug Fixes
+~~~~~~~~~
+
+- Disable uri-reference format check in jsonsschema (#2771).
+- Replace ``iteritems`` with ``items`` due to pandas deprecation (#2683).
+
+Maintenance
+~~~~~~~~~~~
+
+- Add deprecation and removal warnings for Vega-Lite v3 wrappers and Vega v5 wrappers (#2843).
 
 Version 4.2.0 (released Dec 29, 2021)
 -------------------------------------
+
 - Update Vega-Lite from version 4.8.1 to version 4.17.0;
   see `Vega-Lite Release Notes <https://github.com/vega/vega-lite/releases>`_.
 
 Enhancements
 ~~~~~~~~~~~~
+
 - Pie charts are now supported through the use of ``mark_arc``. (Examples: eg.
   :ref:`gallery_pie_chart` and :ref:`gallery_radial_chart`.)
 - Support for the ``datum`` encoding specifications from Vega-Lite; see 
@@ -23,17 +111,20 @@ Enhancements
 
 Bug Fixes
 ~~~~~~~~~
+
 - Fix ``to_dict()`` for nested selections (#2120).
 - Fix item access for expressions (#2099).
 
 Version 4.1.0 (released April 1, 2020)
 --------------------------------------
+
 - Minimum Python version is now 3.6
 - Update Vega-Lite to version 4.8.1; many new features and bug fixes from Vega-Lite
   versions 4.1 through 4.8; see `Vega-Lite Release Notes <https://github.com/vega/vega-lite/releases>`_.
 
 Enhancements
 ~~~~~~~~~~~~
+
 - ``strokeDash`` encoding can now be used to control line styles (Example:
   `Multi Series Line Chart <https://altair-viz.github.io/gallery/multi_series_line.html>`_)
 - ``chart.save()`` now relies on `altair_saver <http://github.com/altair-viz/altair_saver>`_
@@ -44,6 +135,7 @@ Enhancements
 
 Bug Fixes
 ~~~~~~~~~
+
 - Support Python 3.8 (#1958)
 - Support multiple views in JupyterLab (#1986)
 - Support numpy types within specifications (#1914)
@@ -51,18 +143,22 @@ Bug Fixes
 
 Maintenance
 ~~~~~~~~~~~
+
 - Altair now uses `black <https://github.com/psf/black>`_ and
   `flake8 <https://gitlab.com/pycqa/flake8>`_ for maintaining code quality & consistency.
 
 Version 4.0.1 (released Jan 14, 2020)
 -------------------------------------
+
 Bug Fixes
 ~~~~~~~~~
+
 - Update Vega-Lite version to 4.0.2
 - Fix issue with duplicate chart divs in HTML renderer (#1888)
 
 Version 4.0.0 (released Dec 10, 2019)
 -------------------------------------
+
 Version 4.0.0 is based on Vega-Lite version 4.0, which you can read about at
 https://github.com/vega/vega-lite/releases/tag/v4.0.0.
 
@@ -88,7 +184,7 @@ Enhancements
 
 - New pivot transform: (see :ref:`user-guide-pivot-transform`)
 
-- Image mark (see :ref:`user-guide-image-mark`)
+- Image mark (see :ref:`user-guide-image-marks`)
 
 - New default ``html`` renderer, directly compatible with Jupyter Notebook and
   JupyterLab without the need for frontend extensions, as well as tools like
diff --git a/doc/requirements.txt b/doc/requirements.txt
deleted file mode 100644
index 11dd9b6..0000000
--- a/doc/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-sphinx
-jinja2
-numpydoc
-pillow
-sphinx_rtd_theme
diff --git a/doc/sync_website.sh b/doc/sync_website.sh
index 55aa073..fcb611e 100644
--- a/doc/sync_website.sh
+++ b/doc/sync_website.sh
@@ -6,9 +6,9 @@ MSG="doc build for commit $GITHASH"
 cd _build
 
 # clone the repo if needed
-if test -d altair-viz.github.io; 
+if test -d altair-viz.github.io;
 then echo "using existing cloned altair directory";
-else git clone git@github.com:altair-viz/altair-viz.github.io.git;
+else git clone https://github.com/altair-viz/altair-viz.github.io.git;
 fi
 
 # sync the website
diff --git a/doc/user_guide/API.rst b/doc/user_guide/api.rst
similarity index 87%
rename from doc/user_guide/API.rst
rename to doc/user_guide/api.rst
index dba0f05..5ed9fbe 100644
--- a/doc/user_guide/API.rst
+++ b/doc/user_guide/api.rst
@@ -1,4 +1,4 @@
-.. _API:
+.. _api:
 
 API Reference
 =============
@@ -59,13 +59,11 @@ Encoding Channels
    Latitude2Datum
    Latitude2Value
    LatitudeDatum
-   LatitudeValue
    Longitude
    Longitude2
    Longitude2Datum
    Longitude2Value
    LongitudeDatum
-   LongitudeValue
    Opacity
    OpacityDatum
    OpacityValue
@@ -118,6 +116,9 @@ Encoding Channels
    XError2
    XError2Value
    XErrorValue
+   XOffset
+   XOffsetDatum
+   XOffsetValue
    XValue
    Y
    Y2
@@ -128,6 +129,9 @@ Encoding Channels
    YError2
    YError2Value
    YErrorValue
+   YOffset
+   YOffsetDatum
+   YOffsetValue
    YValue
 
 API Functions
@@ -143,15 +147,18 @@ API Functions
    binding_radio
    binding_range
    binding_select
+   check_fields_and_encodings
    concat
    condition
    graticule
    hconcat
    layer
+   param
    repeat
    selection
    selection_interval
    selection_multi
+   selection_point
    selection_single
    sequence
    sphere
@@ -184,6 +191,7 @@ Low-Level Schema Wrappers
    AxisConfig
    AxisOrient
    AxisResolveMap
+   BBox
    BarConfig
    BaseTitleNoValueRefs
    Baseline
@@ -191,6 +199,8 @@ Low-Level Schema Wrappers
    BinParams
    BinTransform
    BindCheckbox
+   BindDirect
+   BindInput
    BindRadioSelect
    BindRange
    Binding
@@ -201,7 +211,6 @@ Low-Level Schema Wrappers
    BrushConfig
    CalculateTransform
    Categorical
-   Color
    ColorDef
    ColorName
    ColorScheme
@@ -227,6 +236,16 @@ Low-Level Schema Wrappers
    ConditionalAxisString
    ConditionalMarkPropFieldOrDatumDef
    ConditionalMarkPropFieldOrDatumDefTypeForShape
+   ConditionalParameterMarkPropFieldOrDatumDef
+   ConditionalParameterMarkPropFieldOrDatumDefTypeForShape
+   ConditionalParameterStringFieldDef
+   ConditionalParameterValueDefGradientstringnullExprRef
+   ConditionalParameterValueDefTextExprRef
+   ConditionalParameterValueDefnumber
+   ConditionalParameterValueDefnumberArrayExprRef
+   ConditionalParameterValueDefnumberExprRef
+   ConditionalParameterValueDefstringExprRef
+   ConditionalParameterValueDefstringnullExprRef
    ConditionalPredicateMarkPropFieldOrDatumDef
    ConditionalPredicateMarkPropFieldOrDatumDefTypeForShape
    ConditionalPredicateStringFieldDef
@@ -244,16 +263,6 @@ Low-Level Schema Wrappers
    ConditionalPredicateValueDefnumbernullExprRef
    ConditionalPredicateValueDefstringExprRef
    ConditionalPredicateValueDefstringnullExprRef
-   ConditionalSelectionMarkPropFieldOrDatumDef
-   ConditionalSelectionMarkPropFieldOrDatumDefTypeForShape
-   ConditionalSelectionStringFieldDef
-   ConditionalSelectionValueDefGradientstringnullExprRef
-   ConditionalSelectionValueDefTextExprRef
-   ConditionalSelectionValueDefnumber
-   ConditionalSelectionValueDefnumberArrayExprRef
-   ConditionalSelectionValueDefnumberExprRef
-   ConditionalSelectionValueDefstringExprRef
-   ConditionalSelectionValueDefstringnullExprRef
    ConditionalStringFieldDef
    ConditionalValueDefGradientstringnullExprRef
    ConditionalValueDefTextExprRef
@@ -275,17 +284,16 @@ Low-Level Schema Wrappers
    Day
    DensityTransform
    DerivedStream
+   Dict
    DictInlineDataset
    DictSelectionInit
    DictSelectionInitInterval
-   Dictunknown
    Diverging
    DomainUnionWith
    DsvDataFormat
    Element
    Encoding
    EncodingSortField
-   EncodingSortFieldFieldName
    ErrorBand
    ErrorBandConfig
    ErrorBandDef
@@ -296,16 +304,16 @@ Low-Level Schema Wrappers
    EventStream
    EventType
    Expr
-   ExprOrSignalRef
    ExprRef
    FacetEncodingFieldDef
    FacetFieldDef
-   FacetFieldDefFieldName
    FacetMapping
-   FacetMappingFieldName
    FacetSpec
    FacetedEncoding
    FacetedUnitSpec
+   Feature
+   FeatureCollection
+   FeatureGeometryGeoJsonProperties
    Field
    FieldDefWithoutScale
    FieldEqualPredicate
@@ -326,6 +334,7 @@ Low-Level Schema Wrappers
    FieldOrDatumDefWithConditionStringDatumDefText
    FieldOrDatumDefWithConditionStringFieldDefText
    FieldOrDatumDefWithConditionStringFieldDefstring
+   FieldRange
    FieldRangePredicate
    FieldValidPredicate
    FilterTransform
@@ -335,8 +344,12 @@ Low-Level Schema Wrappers
    FontStyle
    FontWeight
    Generator
+   GenericUnitSpecEncodingAnyMark
    GeoJsonFeature
    GeoJsonFeatureCollection
+   GeoJsonProperties
+   Geometry
+   GeometryCollection
    Gradient
    GradientStop
    GraticuleGenerator
@@ -351,10 +364,9 @@ Low-Level Schema Wrappers
    ImputeTransform
    InlineData
    InlineDataset
-   InputBinding
    Interpolate
-   IntervalSelection
    IntervalSelectionConfig
+   IntervalSelectionConfigWithoutType
    JoinAggregateFieldDef
    JoinAggregateTransform
    JsonDataFormat
@@ -372,9 +384,11 @@ Low-Level Schema Wrappers
    LegendResolveMap
    LegendStreamBinding
    LineConfig
+   LineString
    LinearGradient
    LocalMultiTimeUnit
    LocalSingleTimeUnit
+   Locale
    LoessTransform
    LogicalAndPredicate
    LogicalNotPredicate
@@ -384,7 +398,6 @@ Low-Level Schema Wrappers
    LookupTransform
    Mark
    MarkConfig
-   MarkConfigExprOrSignalRef
    MarkDef
    MarkPropDefGradientstringnull
    MarkPropDefnumber
@@ -393,31 +406,36 @@ Low-Level Schema Wrappers
    MarkType
    MergedStream
    Month
-   MultiSelection
-   MultiSelectionConfig
+   MultiLineString
+   MultiPoint
+   MultiPolygon
    MultiTimeUnit
    NamedData
    NonArgAggregateOp
    NonLayerRepeatSpec
-   NormalizedConcatSpecGenericSpec
-   NormalizedFacetSpec
-   NormalizedHConcatSpecGenericSpec
-   NormalizedSpec
-   NormalizedVConcatSpecGenericSpec
+   NonNormalizedSpec
+   NumberLocale
    NumericArrayMarkPropDef
    NumericMarkPropDef
-   NumericValueDef
+   OffsetDef
    OrderFieldDef
    OrderValueDef
    Orient
    Orientation
    OverlayMarkDef
    Padding
-   Parameter
+   ParameterExtent
+   ParameterName
+   ParameterPredicate
    Parse
    ParseValue
    PivotTransform
+   Point
+   PointSelectionConfig
+   PointSelectionConfigWithoutType
    PolarDef
+   Polygon
+   Position
    Position2Def
    PositionDatumDef
    PositionDatumDefBase
@@ -440,6 +458,7 @@ Low-Level Schema Wrappers
    RangeScheme
    RectConfig
    RegressionTransform
+   RelativeBandSize
    RepeatMapping
    RepeatRef
    RepeatSpec
@@ -455,6 +474,8 @@ Low-Level Schema Wrappers
    ScaleBinParams
    ScaleBins
    ScaleConfig
+   ScaleDatumDef
+   ScaleFieldDef
    ScaleInterpolateEnum
    ScaleInterpolateParams
    ScaleResolveMap
@@ -462,19 +483,14 @@ Low-Level Schema Wrappers
    SchemaBase
    SchemeParams
    SecondaryFieldDef
-   SelectionAnd
-   SelectionComposition
    SelectionConfig
-   SelectionDef
-   SelectionExtent
    SelectionInit
    SelectionInitInterval
    SelectionInitIntervalMapping
    SelectionInitMapping
-   SelectionNot
-   SelectionOr
-   SelectionPredicate
+   SelectionParameter
    SelectionResolution
+   SelectionType
    SequenceGenerator
    SequenceParams
    SequentialMultiHue
@@ -482,8 +498,6 @@ Low-Level Schema Wrappers
    ShapeDef
    SharedEncoding
    SingleDefUnitChannel
-   SingleSelection
-   SingleSelectionConfig
    SingleTimeUnit
    Sort
    SortArray
@@ -498,6 +512,7 @@ Low-Level Schema Wrappers
    StackTransform
    StandardType
    Step
+   StepFor
    Stream
    StringFieldDef
    StringFieldDefWithCondition
@@ -506,7 +521,6 @@ Low-Level Schema Wrappers
    StrokeJoin
    StyleConfigIndex
    SymbolShape
-   Text
    TextBaseline
    TextDef
    TextDirection
@@ -514,6 +528,7 @@ Low-Level Schema Wrappers
    TickCount
    TimeInterval
    TimeIntervalStep
+   TimeLocale
    TimeUnit
    TimeUnitParams
    TimeUnitTransform
@@ -523,14 +538,16 @@ Low-Level Schema Wrappers
    TitleOrient
    TitleParams
    TooltipContent
+   TopLevelConcatSpec
    TopLevelFacetSpec
+   TopLevelHConcatSpec
    TopLevelLayerSpec
-   TopLevelNormalizedConcatSpecGenericSpec
-   TopLevelNormalizedHConcatSpecGenericSpec
-   TopLevelNormalizedVConcatSpecGenericSpec
+   TopLevelParameter
    TopLevelRepeatSpec
+   TopLevelSelectionParameter
    TopLevelSpec
    TopLevelUnitSpec
+   TopLevelVConcatSpec
    TopoDataFormat
    Transform
    Type
@@ -550,14 +567,17 @@ Low-Level Schema Wrappers
    ValueDefWithConditionMarkPropFieldOrDatumDefstringnull
    ValueDefWithConditionStringFieldDefText
    ValueDefnumber
-   ValueDefnumberExprRef
    ValueDefnumberwidthheightExprRef
+   VariableParameter
+   Vector10string
+   Vector12string
    Vector2DateTime
    Vector2Vector2number
    Vector2boolean
    Vector2number
    Vector2string
    Vector3number
+   Vector7string
    VegaLiteSchema
    ViewBackground
    ViewConfig
diff --git a/doc/user_guide/compound_charts.rst b/doc/user_guide/compound_charts.rst
index ecf7119..dfeaba2 100644
--- a/doc/user_guide/compound_charts.rst
+++ b/doc/user_guide/compound_charts.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-compound:
 
-Compound Charts: Layer, HConcat, VConcat, Repeat, Facet
--------------------------------------------------------
+Layered and Multi-View Charts
+-----------------------------
 Along with the basic :class:`Chart` object, Altair provides a number of
 compound plot types that can be used to create stacked, layered, faceted,
 and repeated charts. They are summarized in the following tables:
@@ -34,9 +34,8 @@ same data; for example:
 .. altair-plot::
 
     import altair as alt
-    from altair.expr import datum
-
     from vega_datasets import data
+
     stocks = data.stocks.url
 
     base = alt.Chart(stocks).encode(
@@ -44,7 +43,7 @@ same data; for example:
         y='price:Q',
         color='symbol:N'
     ).transform_filter(
-        datum.symbol == 'GOOG'
+        alt.datum.symbol == 'GOOG'
     )
 
     base.mark_line() + base.mark_point()
@@ -82,9 +81,9 @@ heat-map:
     source = data.movies.url
 
     heatmap = alt.Chart(source).mark_rect().encode(
-        alt.X('IMDB_Rating:Q', bin=True),
-        alt.Y('Rotten_Tomatoes_Rating:Q', bin=True),
-        alt.Color('count()', scale=alt.Scale(scheme='greenblue'))
+        alt.X('IMDB_Rating:Q').bin(),
+        alt.Y('Rotten_Tomatoes_Rating:Q').bin(),
+        alt.Color('count()').scale(scheme='greenblue')
     )
 
     points = alt.Chart(source).mark_circle(
@@ -137,7 +136,7 @@ distribution of its points:
 
     chart2 = alt.Chart(iris).mark_bar().encode(
         x='count()',
-        y=alt.Y('petalWidth:Q', bin=alt.Bin(maxbins=30)),
+        y=alt.Y('petalWidth:Q').bin(maxbins=30),
         color='species:N'
     ).properties(
         height=300,
@@ -179,7 +178,7 @@ with a ``brush`` selection to add interaction:
 
     source = data.sp500.url
 
-    brush = alt.selection(type='interval', encodings=['x'])
+    brush = alt.selection_interval(encodings=['x'])
 
     base = alt.Chart(source).mark_area().encode(
         x = 'date:T',
@@ -189,13 +188,11 @@ with a ``brush`` selection to add interaction:
         height=200
     )
 
-    upper = base.encode(
-        alt.X('date:T', scale=alt.Scale(domain=brush))
-    )
+    upper = base.encode(alt.X('date:T').scale(domain=brush))
 
     lower = base.properties(
         height=60
-    ).add_selection(brush)
+    ).add_params(brush)
 
     alt.vconcat(upper, lower)
 
@@ -282,8 +279,8 @@ using ``alt.repeat('layer')``:
     source = data.movies()
 
     alt.Chart(source).mark_line().encode(
-        x=alt.X("IMDB_Rating", bin=True),
-        y=alt.Y(alt.repeat('layer'), aggregate='mean', title="Mean of US and Worldwide Gross"),
+        x=alt.X("IMDB_Rating").bin(),
+        y=alt.Y(alt.repeat('layer')).aggregate('mean').title("Mean of US and Worldwide Gross"),
         color=alt.ColorDatum(alt.repeat('layer'))
     ).repeat(layer=["US_Gross", "Worldwide_Gross"])
 
@@ -305,8 +302,8 @@ concatenation:
 .. altair-plot::
 
     import altair as alt
-    from altair.expr import datum
     from vega_datasets import data
+
     iris = data.iris.url
 
     base = alt.Chart(iris).mark_point().encode(
@@ -320,7 +317,7 @@ concatenation:
 
     chart = alt.hconcat()
     for species in ['setosa', 'versicolor', 'virginica']:
-        chart |= base.transform_filter(datum.species == species)
+        chart |= base.transform_filter(alt.datum.species == species)
     chart
 
 As with the manual approach to :ref:`repeat-chart`, this is straightforward,
@@ -362,7 +359,7 @@ layered chart with a hover selection:
 
 .. altair-plot::
 
-    hover = alt.selection_single(on='mouseover', nearest=True, empty='none')
+    hover = alt.selection_point(on='mouseover', nearest=True, empty=False)
 
     base = alt.Chart(iris).encode(
         x='petalLength:Q',
@@ -373,7 +370,7 @@ layered chart with a hover selection:
         height=180,
     )
 
-    points = base.mark_point().add_selection(
+    points = base.mark_point().add_params(
         hover
     )
 
diff --git a/doc/user_guide/configuration.rst b/doc/user_guide/configuration.rst
index 57de55f..d737899 100644
--- a/doc/user_guide/configuration.rst
+++ b/doc/user_guide/configuration.rst
@@ -21,6 +21,7 @@ These methods and their arguments will be outlined below:
 - :ref:`config-scale` :meth:`Chart.configure_scale`
 - :ref:`config-range` :meth:`Chart.configure_range`
 - :ref:`config-projection` :meth:`Chart.configure_projection`
+- :ref:`config-composition` :meth:`Chart.configure_concat`, :meth:`Chart.configure_facet`
 - :ref:`config-selection` :meth:`Chart.configure_selection`
 - :ref:`config-title` :meth:`Chart.configure_title`
 - :ref:`config-view` :meth:`Chart.configure_view`
@@ -34,7 +35,7 @@ For more discussion of approaches to chart customization, see
 Chart Configuration
 -------------------
 The :meth:`Chart.configure` method adds a :class:`Config` instance to the chart,
-and has the following attributes:
+and accepts the following parameters:
 
 .. altair-object-table:: altair.Config
 
@@ -43,7 +44,7 @@ and has the following attributes:
 
 Axis Configuration
 ------------------
-Axis configuration defines default settings for axes, and can be set using
+Axis configuration defines default settings for axes and can be set using
 the :meth:`Chart.configure_axis` method.
 Properties defined here are applied to all axes in the figure.
 
@@ -66,6 +67,20 @@ The methods are the following:
 - :meth:`Chart.configure_axisTop`
 - :meth:`Chart.configure_axisX`
 - :meth:`Chart.configure_axisY`
+- :meth:`Chart.configure_axisDiscrete`
+- :meth:`Chart.configure_axisPoint`
+- :meth:`Chart.configure_axisQuantitative`
+- :meth:`Chart.configure_axisTemporal`
+- :meth:`Chart.configure_axisXBand`
+- :meth:`Chart.configure_axisXDiscrete`
+- :meth:`Chart.configure_axisXPoint`
+- :meth:`Chart.configure_axisXQuantitative`
+- :meth:`Chart.configure_axisXTemporal`
+- :meth:`Chart.configure_axisYBand`
+- :meth:`Chart.configure_axisYDiscrete`
+- :meth:`Chart.configure_axisYPoint`
+- :meth:`Chart.configure_axisYQuantitative`
+- :meth:`Chart.configure_axisYTemporal`
 
 They have the following properties:
 
@@ -76,9 +91,9 @@ They have the following properties:
 
 Header Configuration
 --------------------
-The :meth:`Chart.configure_header` method allows configuration of facet headers,
-including the font, color, size, and position of the title and labels.
-Here is an example:
+Header configuration defines default settings for headers including the font, color,
+size, and position of the title and labels and can be set using 
+the :meth:`Chart.configure_header` method. Here is an example:
 
 .. altair-plot::
 
@@ -104,6 +119,15 @@ Here is an example:
         labelFontSize=14
     )
 
+Additional property blocks can target more specific header types. The methods are the following:
+
+- :meth:`Chart.configure_header`
+- :meth:`Chart.configure_headerColumn`
+- :meth:`Chart.configure_headerFacet`
+- :meth:`Chart.configure_headerRow`
+
+They have the following properties:
+
 .. altair-object-table:: altair.HeaderConfig
 
 
@@ -157,10 +181,15 @@ For general configuration of all mark types, use:
 
 For configurations specific to particular mark types, use:
 
+- :meth:`Chart.configure_arc`
 - :meth:`Chart.configure_area`
 - :meth:`Chart.configure_bar`
+- :meth:`Chart.configure_boxplot`
 - :meth:`Chart.configure_circle`
+- :meth:`Chart.configure_errorband`
+- :meth:`Chart.configure_errorbar`
 - :meth:`Chart.configure_geoshape`
+- :meth:`Chart.configure_image`
 - :meth:`Chart.configure_line`
 - :meth:`Chart.configure_point`
 - :meth:`Chart.configure_rect`
@@ -205,16 +234,27 @@ the following properties:
 
 Projection Configuration
 ------------------------
-:meth:`Chart.configure_projection`
+Projections can be configured using :meth:`Chart.configure_projection`,
+which has the following properties:
 
 .. altair-object-table:: altair.ProjectionConfig
 
 
+.. _config-composition:
+
+Concat and Facet Configuration
+------------------------------
+Various aspects of concat and facet charts can be configured using :meth:`Chart.configure_concat`
+and :meth:`Chart.configure_facet`, which have the following properties:
+
+.. altair-object-table:: altair.CompositionConfig
+
 .. _config-selection:
 
 Selection Configuration
 -----------------------
-:meth:`Chart.configure_selection`
+Selections can be configured using :meth:`Chart.configure_selection`, 
+which has the following properties:
 
 .. altair-object-table:: altair.SelectionConfig
 
@@ -286,144 +326,3 @@ Additional properties are summarized in the following table:
 
 .. altair-object-table:: altair.ViewConfig
 
-
-.. _chart-themes:
-
-Altair Themes
--------------
-Altair makes available a theme registry that lets users apply chart configurations
-globally within any Python session. This is done via the ``alt.themes`` object.
-
-The themes registry consists of functions which define a specification dictionary
-that will be added to every created chart.
-For example, the default theme configures the default size of a single chart:
-
-    >>> import altair as alt
-    >>> default = alt.themes.get()
-    >>> default()
-    {'config': {'view': {'continuousWidth': 400, 'continuousHeight': 300}}}
-
-You can see that any chart you create will have this theme applied, and these configurations
-added to its specification:
-
-.. altair-plot::
-    :output: repr
-
-    import altair as alt
-    from vega_datasets import data
-
-    chart = alt.Chart(data.cars.url).mark_point().encode(
-        x='Horsepower:Q',
-        y='Miles_per_Gallon:Q'
-    )
-
-    chart.to_dict()
-
-The rendered chart will then reflect these configurations:
-
-.. altair-plot::
-
-    chart
-
-Changing the Theme
-~~~~~~~~~~~~~~~~~~
-If you would like to enable any other theme for the length of your Python session,
-you can call ``alt.themes.enable(theme_name)``.
-For example, Altair includes a theme in which the chart background is opaque
-rather than transparent:
-
-.. altair-plot::
-    :output: repr
-
-    alt.themes.enable('opaque')
-    chart.to_dict()
-
-.. altair-plot::
-
-    chart
-
-Notice that the background color of the chart is now set to white.
-If you would like no theme applied to your chart, you can use the
-theme named ``'none'``:
-
-.. altair-plot::
-    :output: repr
-
-    alt.themes.enable('none')
-    chart.to_dict()
-
-.. altair-plot::
-
-    chart
-
-Because the view configuration is not set, the chart is smaller
-than the default rendering.
-
-If you would like to use any theme just for a single chart, you can use the
-``with`` statement to enable a temporary theme:
-
-.. altair-plot::
-   :output: none
-
-   with alt.themes.enable('default'):
-       spec = chart.to_json()
-
-Currently Altair does not offer many built-in themes, but we plan to add
-more options in the future.
-
-Defining a Custom Theme
-~~~~~~~~~~~~~~~~~~~~~~~
-The theme registry also allows defining and registering custom themes.
-A theme is simply a function that returns a dictionary of default values
-to be added to the chart specification at rendering time, which is then
-registered and activated.
-
-For example, here we define a theme in which all marks are drawn with black
-fill unless otherwise specified:
-
-.. altair-plot::
-
-    import altair as alt
-    from vega_datasets import data
-
-    # define the theme by returning the dictionary of configurations
-    def black_marks():
-        return {
-            'config': {
-                'view': {
-                    'height': 300,
-                    'width': 400,
-                },
-                'mark': {
-                    'color': 'black',
-                    'fill': 'black'
-                }
-            }
-        }
-
-    # register the custom theme under a chosen name
-    alt.themes.register('black_marks', black_marks)
-
-    # enable the newly registered theme
-    alt.themes.enable('black_marks')
-
-    # draw the chart
-    cars = data.cars.url
-    alt.Chart(cars).mark_point().encode(
-        x='Horsepower:Q',
-        y='Miles_per_Gallon:Q'
-    )
-
-
-If you want to restore the default theme, use:
-
-.. altair-plot::
-   :output: none
-
-   alt.themes.enable('default')
-
-
-For more ideas on themes, see the `Vega Themes`_ repository.
-
-
-.. _Vega Themes: https://github.com/vega/vega-themes/
diff --git a/doc/user_guide/custom_renderers.rst b/doc/user_guide/custom_renderers.rst
index 20570fd..4e34989 100644
--- a/doc/user_guide/custom_renderers.rst
+++ b/doc/user_guide/custom_renderers.rst
@@ -3,14 +3,33 @@
 
 Customizing Renderers
 =====================
-Renderers in Altair are all based on the mimebundle representation accessed by
-the ``_repr_mimebundle_`` method of the top-level Altair objects. When you enable
-a renderer, functionally what that does is to define a new kind of mimebundle
-output.
-
-The ``alt.renderers`` registry allows the user to define and enable new mimetypes
-for the chart.
-As a simple example, imagine we would like to add a ``plaintext`` renderer that
+A renderer, as introduced in :ref:`renderers`, is a function that accepts a Vega-Lite or Vega
+visualization specification as a Python ``dict``, and returns a Python ``dict``
+in Jupyter's `MIME Bundle format
+<https://jupyter-client.readthedocs.io/en/stable/messaging.html#display-data>`_. 
+This dictionary will be returned by a charts ``_repr_mimebundle_`` method.
+
+The keys of the MIME bundle should be MIME types (such as ``image/png``) and the
+values should be the data for that MIME type (text, base64 encoded binary or
+JSON). Altair's default ``html`` renderer returns a cross-platform HTML representation using
+the ``"text/html"`` mimetype; schematically it looks like this::
+
+    def default_renderer(spec):
+        bundle = {'text/html': generate_html(spec)}
+        metadata = {}
+        return bundle, metadata
+
+
+If a renderer needs to do custom display logic that doesn't use the frontend's display
+system, it can also return an empty MIME bundle dict::
+
+    def empty_bundle_renderer(spec):
+        # Custom display logic that uses the spec
+        ...
+        # Return empty MIME bundle
+        return {}
+
+As a simple example of a custom renderer, imagine we would like to add a ``plaintext`` renderer that
 renders a chart description in plain text. We could do it this way::
 
     def plaintext_mimetype(spec):
@@ -18,7 +37,8 @@ renders a chart description in plain text. We could do it this way::
 
     alt.renderers.register('plaintext', plaintext_mimetype)
 
-Now you can enable this mimetype, and then when your chart is displayed you
+The ``alt.renderers`` registry allows the user to define and enable new renderers. 
+Now you can enable this mimetype and then when your chart is displayed you
 will see this description::
 
     alt.renderers.enable('plaintext')
@@ -39,27 +59,3 @@ If you have a frontend that recognizes ``_repr_mimebundle_`` as a means of
 obtaining a MIME type representation of a Python object, then you can define
 a function that will process the chart content in any way before returning
 any mimetype.
-
-The renderers built-in to Altair are the following:
-
-- ``"default"``: default rendering, using the
-  ``'application/vnd.vegalite.v2+json'`` MIME type which is supported
-  by JupyterLab and nteract.
-- ``"html"``: identical to ``"default"``
-- ``"mimetype"``: outputs a vega-lite specific mimetype together with a PNG
-  representation.
-- ``"jupyterlab"``: identical to ``"mimetype"``
-- ``"nteract"``: identical to ``"mimetype"``
-- ``"colab"``: renderer for Google's Colab notebook, using the
-  ``"text/html"`` MIME type.
-- ``"notebook"``: renderer for the classic notebook, provided by the ipyvega_
-  package
-- ``"json"``: renderer that outputs the raw JSON chart specification, using the
-  ``'application/json'`` MIME type.
-- ``"png"``: renderer that renders and converts the chart to PNG, outputting it
-  using the ``'image/png'`` MIME type.
-- ``"svg"``: renderer that renders and converts the chart to an SVG image,
-  outputting it using the ``'image/svg+xml'`` MIME type.
-
-
-.. _ipyvega: https://github.com/vega/ipyvega/tree/vega
diff --git a/doc/user_guide/customization.rst b/doc/user_guide/customization.rst
index b2ac50e..be44055 100644
--- a/doc/user_guide/customization.rst
+++ b/doc/user_guide/customization.rst
@@ -121,6 +121,85 @@ Global configurations should be reserved for creating themes that are applied
 just before the chart is rendered.
 
 
+Adjusting the Title
+-------------------
+By default an Altair chart does not have a title, as seen in this example.
+
+.. altair-plot::
+
+   import altair as alt
+   from vega_datasets import data
+   
+   iowa = data.iowa_electricity.url
+   
+   alt.Chart(iowa).mark_area().encode(
+       x="year:T",
+       y=alt.Y("net_generation:Q").stack("normalize"),
+       color="source:N"
+   )
+
+You can add a simple title by passing the `title` keyword argument with the data.
+
+.. altair-plot::
+
+   alt.Chart(iowa, title="Iowa's green energy boom").mark_area().encode(
+       x="year:T",
+       y=alt.Y("net_generation:Q").stack("normalize"),
+       color="source:N"
+   )
+
+It is also possible to add a subtitle by passing in an `alt.Title` object.
+
+.. altair-plot::
+
+   alt.Chart(
+      iowa,
+      title=alt.Title(
+          "Iowa's green energy boom",
+          subtitle="A growing share of the state's energy has come from renewable sources"
+      )
+   ).mark_area().encode(
+       x="year:T",
+       y=alt.Y("net_generation:Q").stack("normalize"),
+       color="source:N"
+   )
+
+The subtitle can run to two lines by passing a list where each list item is a line (if you don't want to create this list manually as in the example below, you can use the ``wrap`` function from the `textwrap library <https://docs.python.org/3/library/textwrap.html>`_ to split a string into a list of substrings of a certain length).
+
+.. altair-plot::
+
+   alt.Chart(
+      iowa,
+      title=alt.Title(
+          "Iowa's green energy boom",
+          subtitle=["A growing share of the state's energy", "has come from renewable sources"]
+      )
+   ).mark_area().encode(
+       x="year:T",
+       y=alt.Y("net_generation:Q").stack("normalize"),
+       color="source:N"
+   )
+
+The ``Title`` object can also configure a number of other attributes, e.g., the position of the title and subtitle (see see :ref:`user-guide-customization` for details).
+
+.. altair-plot::
+
+   alt.Chart(
+      iowa,
+      title=alt.Title(
+          "Iowa's green energy boom",
+          subtitle=["A growing share of the state's energy", "has come from renewable sources"],
+          anchor='start',
+          orient='bottom',
+          offset=20
+      )
+   ).mark_area().encode(
+       x="year:T",
+       y=alt.Y("net_generation:Q").stack("normalize"),
+       color="source:N"
+   )
+
+
 Adjusting Axis Limits
 ---------------------
 The default axis limit used by Altair is dependent on the type of the data.
@@ -147,9 +226,7 @@ in quantitative axes; if you would like to turn this off, you can add a
 .. altair-plot::
 
     alt.Chart(cars).mark_point().encode(
-        alt.X('Acceleration:Q',
-            scale=alt.Scale(zero=False)
-        ),
+        alt.X('Acceleration:Q').scale(zero=False),
         y='Horsepower:Q'
     )
 
@@ -158,9 +235,7 @@ To specify exact axis limits, you can use the ``domain`` property of the scale:
 .. altair-plot::
 
     alt.Chart(cars).mark_point().encode(
-        alt.X('Acceleration:Q',
-            scale=alt.Scale(domain=(5, 20))
-        ),
+        alt.X('Acceleration:Q').scale(domain=(5, 20)),
         y='Horsepower:Q'
     )
 
@@ -171,9 +246,7 @@ the ``"clip"`` property of the mark to True:
 .. altair-plot::
 
     alt.Chart(cars).mark_point(clip=True).encode(
-        alt.X('Acceleration:Q',
-            scale=alt.Scale(domain=(5, 20))
-        ),
+        alt.X('Acceleration:Q').scale(domain=(5, 20)),
         y='Horsepower:Q'
     )
 
@@ -183,12 +256,7 @@ limit to the edge of the domain:
 .. altair-plot::
 
     alt.Chart(cars).mark_point().encode(
-        alt.X('Acceleration:Q',
-            scale=alt.Scale(
-                domain=(5, 20),
-                clamp=True
-            )
-        ),
+        alt.X('Acceleration:Q').scale(domain=(5, 20), clamp=True),
         y='Horsepower:Q'
     ).interactive()
 
@@ -222,8 +290,8 @@ the y labels as a dollar value:
 .. altair-plot::
 
    alt.Chart(df).mark_circle().encode(
-       x=alt.X('x', axis=alt.Axis(format='%', title='percentage')),
-       y=alt.Y('y', axis=alt.Axis(format='$', title='dollar amount'))
+       alt.X('x').axis(format='%').title('percentage'),
+       alt.Y('y').axis(format='$').title('dollar amount')
    )
 
 Axis labels can also be easily removed:
@@ -231,8 +299,8 @@ Axis labels can also be easily removed:
 .. altair-plot::
 
    alt.Chart(df).mark_circle().encode(
-       x=alt.X('x', axis=alt.Axis(labels=False)),
-       y=alt.Y('y', axis=alt.Axis(labels=False))
+       alt.X('x').axis(labels=False),
+       alt.Y('y').axis(labels=False)
    )
 
 Additional formatting codes are available; for a listing of these see the
@@ -271,7 +339,7 @@ The legend option on all of them expects a :class:`Legend` object as its input,
   alt.Chart(iris).mark_point().encode(
       x='petalWidth',
       y='petalLength',
-      color=alt.Color('species', legend=alt.Legend(title="Species by color"))
+      color=alt.Color('species').title("Species by color")
   )
 
 Another thing you can do is move the legend to another position with the `orient` argument.
@@ -286,7 +354,7 @@ Another thing you can do is move the legend to another position with the `orient
   alt.Chart(iris).mark_point().encode(
       x='petalWidth',
       y='petalLength',
-      color=alt.Color('species', legend=alt.Legend(orient="left")),
+      color=alt.Color('species').legend(orient="left")
   )
 
 You can remove the legend entirely by submitting a null value.
@@ -301,7 +369,7 @@ You can remove the legend entirely by submitting a null value.
   alt.Chart(iris).mark_point().encode(
       x='petalWidth',
       y='petalLength',
-      color=alt.Color('species', legend=None),
+      color=alt.Color('species').legend(None),
   )
 
 Removing the Chart Border
@@ -342,8 +410,8 @@ First remove the grid using the :meth:`Chart.configure_axis` method.
     )
 
 You'll note that while the inside rules are gone, the outside border remains.
-Hide it by setting the `strokeWidth` or the `strokeOpacity` options on
-:meth:`Chart.configure_view` to `0`:
+Hide it by setting ``stroke=None`` inside :meth:`Chart.configure_view`
+(``strokeWidth=0`` and ``strokeOpacity=0`` also works):
 
 .. altair-plot::
 
@@ -359,12 +427,12 @@ Hide it by setting the `strokeWidth` or the `strokeOpacity` options on
     ).configure_axis(
         grid=False
     ).configure_view(
-        strokeWidth=0
+        stroke=None
     )
 
 
 It is also possible to completely remove all borders and axes by
-combining the above option with setting `axis` to `None` during encoding.
+combining the above option with setting ``axis`` to ``None`` during encoding.
 
 .. altair-plot::
 
@@ -374,13 +442,13 @@ combining the above option with setting `axis` to `None` during encoding.
     iris = data.iris()
 
     alt.Chart(iris).mark_point().encode(
-        alt.X('petalWidth', axis=None),
-        alt.Y('petalLength', axis=None),
+        alt.X('petalWidth').axis(None),
+        alt.Y('petalLength').axis(None),
         color='species'
     ).configure_axis(
         grid=False
     ).configure_view(
-        strokeWidth=0
+        stroke=None
     )
 
 
@@ -412,7 +480,7 @@ can be passed to the `scheme` argument of the :class:`Scale` class:
   alt.Chart(iris).mark_point().encode(
       x='petalWidth',
       y='petalLength',
-      color=alt.Color('species', scale=alt.Scale(scheme='dark2'))
+      color=alt.Color('species').scale(scheme='dark2')
   )
 
 Color Domain and Range
@@ -434,7 +502,7 @@ values and colors respectively.
   alt.Chart(iris).mark_point().encode(
       x='petalWidth',
       y='petalLength',
-      color=alt.Color('species', scale=alt.Scale(domain=domain, range=range_))
+      color=alt.Color('species').scale(domain=domain, range=range_)
   )
 
 Raw Color Values
@@ -458,10 +526,10 @@ you can set ``scale=None`` to use those colors directly:
       size=100
   ).encode(
       x='x',
-      color=alt.Color('color', scale=None)
+      color=alt.Color('color').scale(None)
   )
 
-Adjusting the width of Bar Marks
+Adjusting the Width of Bar Marks
 --------------------------------
 The width of the bars in a bar plot are controlled through the ``size`` property in the :meth:`~Chart.mark_bar()`:
 
@@ -553,15 +621,158 @@ If you want your chart size to respond to the width of the HTML page or containe
 it is rendererd, you can set ``width`` or ``height`` to the string ``"container"``:
 
 .. altair-plot::
-
-   alt.Chart(cars).mark_bar().encode(
-       x='Origin',
-       y='count()',
-   ).properties(
-       width='container',
-       height=200
-   )
+    :div_class_: full-width-plot
+
+    alt.Chart(cars).mark_bar().encode(
+        x='Origin',
+        y='count()',
+    ).properties(
+        width='container',
+        height=200
+    )
 
 Note that this will only scale with the container if its parent element has a size determined
 outside the chart itself; For example, the container may be a ``<div>`` element that has style
 ``width: 100%; height: 300px``. 
+
+
+.. _chart-themes:
+
+Chart Themes
+------------
+Altair makes available a theme registry that lets users apply chart configurations
+globally within any Python session. This is done via the ``alt.themes`` object.
+
+The themes registry consists of functions which define a specification dictionary
+that will be added to every created chart.
+For example, the default theme configures the default size of a single chart:
+
+    >>> import altair as alt
+    >>> default = alt.themes.get()
+    >>> default()
+    {'config': {'view': {'continuousWidth': 300, 'continuousHeight': 300}}}
+
+You can see that any chart you create will have this theme applied, and these configurations
+added to its specification:
+
+.. altair-plot::
+    :output: repr
+
+    import altair as alt
+    from vega_datasets import data
+
+    chart = alt.Chart(data.cars.url).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q'
+    )
+
+    chart.to_dict()
+
+The rendered chart will then reflect these configurations:
+
+.. altair-plot::
+
+    chart
+
+Changing the Theme
+~~~~~~~~~~~~~~~~~~
+If you would like to enable any other theme for the length of your Python session,
+you can call ``alt.themes.enable(theme_name)``.
+For example, Altair includes a theme in which the chart background is opaque
+rather than transparent:
+
+.. altair-plot::
+    :output: repr
+
+    alt.themes.enable('opaque')
+    chart.to_dict()
+
+.. altair-plot::
+
+    chart
+
+Notice that the background color of the chart is now set to white.
+If you would like no theme applied to your chart, you can use the
+theme named ``'none'``:
+
+.. altair-plot::
+    :output: repr
+
+    alt.themes.enable('none')
+    chart.to_dict()
+
+.. altair-plot::
+
+    chart
+
+Because the view configuration is not set, the chart is smaller
+than the default rendering.
+
+If you would like to use any theme just for a single chart, you can use the
+``with`` statement to enable a temporary theme:
+
+.. altair-plot::
+   :output: none
+
+   with alt.themes.enable('default'):
+       spec = chart.to_json()
+
+Currently Altair does not offer many built-in themes, but we plan to add
+more options in the future.
+
+Defining a Custom Theme
+~~~~~~~~~~~~~~~~~~~~~~~
+The theme registry also allows defining and registering custom themes.
+A theme is simply a function that returns a dictionary of default values
+to be added to the chart specification at rendering time, which is then
+registered and activated.
+
+For example, here we define a theme in which all marks are drawn with black
+fill unless otherwise specified:
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    # define the theme by returning the dictionary of configurations
+    def black_marks():
+        return {
+            'config': {
+                'view': {
+                    'height': 300,
+                    'width': 300,
+                },
+                'mark': {
+                    'color': 'black',
+                    'fill': 'black'
+                }
+            }
+        }
+
+    # register the custom theme under a chosen name
+    alt.themes.register('black_marks', black_marks)
+
+    # enable the newly registered theme
+    alt.themes.enable('black_marks')
+
+    # draw the chart
+    cars = data.cars.url
+    alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q'
+    )
+
+
+If you want to restore the default theme, use:
+
+.. altair-plot::
+   :output: none
+
+   alt.themes.enable('default')
+
+
+For more ideas on themes, see the `Vega Themes`_ repository.
+
+
+.. _Vega Themes: https://github.com/vega/vega-themes/
diff --git a/doc/user_guide/data.rst b/doc/user_guide/data.rst
index c76a742..d48008d 100644
--- a/doc/user_guide/data.rst
+++ b/doc/user_guide/data.rst
@@ -1,21 +1,32 @@
+.. currentmodule:: altair
+    
 .. _user-guide-data:
 
-Specifying Data in Altair
--------------------------
-
-.. currentmodule:: altair
+Specifying Data
+---------------
 
+The basic data model used by Altair is tabular data,
+similar to a spreadsheet or database table.
+Individual datasets are assumed to contain a collection of records (rows),
+which may contain any number of named data fields (columns).
 Each top-level chart object (i.e. :class:`Chart`, :class:`LayerChart`,
-and :class:`VConcatChart`, :class:`HConcatChart`, :class:`RepeatChart`,
-:class:`FacetChart`) accepts a dataset as its first argument.
-The dataset can be specified in one of the following ways:
+:class:`VConcatChart`, :class:`HConcatChart`, :class:`RepeatChart`,
+and :class:`FacetChart`) accepts a dataset as its first argument.
+
+There are many different ways of specifying a dataset:
 
 - as a `Pandas DataFrame <http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html>`_
+- as a DataFrame that supports the DataFrame Interchange Protocol (contains a ``__dataframe__`` attribute), e.g. polars and pyarrow. This is experimental.
 - as a :class:`Data` or related object (i.e. :class:`UrlData`, :class:`InlineData`, :class:`NamedData`)
 - as a url string pointing to a ``json`` or ``csv`` formatted text file
-- as an object that supports the `__geo_interface__` (eg. `Geopandas GeoDataFrame <http://geopandas.org/data_structures.html#geodataframe>`_, `Shapely Geometries <https://shapely.readthedocs.io/en/latest/manual.html#geometric-objects>`_, `GeoJSON Objects <https://github.com/jazzband/geojson#geojson-objects>`_)
+- as a `geopandas GeoDataFrame <http://geopandas.org/data_structures.html#geodataframe>`_, `Shapely Geometries <https://shapely.readthedocs.io/en/latest/manual.html#geometric-objects>`_, `GeoJSON Objects <https://github.com/jazzband/geojson#geojson-objects>`_ or other objects that support the ``__geo_interface__``
+- as a generated dataset such as numerical sequences or geographic reference elements
 
-For example, here we specify data via a DataFrame:
+When data is specified as a pandas DataFrame, Altair
+uses the data type information provided by pandas to automatically determine
+the data types required in the encoding. For example, here we specify data via a pandas DataFrame
+and Altair automatically detects that the x-column should be visualized on a categorical (nominal) scale
+and that the y-column should be visualized on a quantitative scale:
 
 .. altair-plot::
 
@@ -29,11 +40,10 @@ For example, here we specify data via a DataFrame:
        y='y',
    )
 
-When data is specified as a DataFrame, the encoding is quite simple, as Altair
-uses the data type information provided by Pandas to automatically determine
-the data types required in the encoding.
-
-By comparison, here we create the same chart using a :class:`Data` object,
+By comparison,
+all other ways of specifying the data (including non-pandas DataFrames)
+requires encoding types to be declared explicitly.
+Here we create the same chart as above using a :class:`Data` object,
 with the data specified as a JSON-style list of records:
 
 .. altair-plot::
@@ -46,13 +56,13 @@ with the data specified as a JSON-style list of records:
                            {'x': 'D', 'y': 7},
                            {'x': 'E', 'y': 2}])
    alt.Chart(data).mark_bar().encode(
-       x='x:O',  # specify ordinal data
+       x='x:N',  # specify nominal data
        y='y:Q',  # specify quantitative data
    )
 
-notice the extra markup required in the encoding; because Altair cannot infer
+Notice the extra markup required in the encoding; because Altair cannot infer
 the types within a :class:`Data` object, we must specify them manually
-(here we use :ref:`shorthand-description` to specify *ordinal* (``O``) for ``x``
+(here we use :ref:`shorthand-description` to specify *nominal* (``N``) for ``x``
 and *quantitative* (``Q``) for ``y``; see :ref:`encoding-data-types`).
 
 Similarly, we must also specify the data type when referencing data by URL:
@@ -68,13 +78,16 @@ Similarly, we must also specify the data type when referencing data by URL:
         y='Miles_per_Gallon:Q'
     )
 
-We will further discuss encodings and associated types in :ref:`user-guide-encoding`, next.
+Encodings and their associated types are further discussed in :ref:`user-guide-encoding`.
+Below we go into more detail about the different ways of specifying data in an Altair chart.
 
+Pandas DataFrame
+~~~~~~~~~~~~~~~~
 
 .. _data-in-index:
 
 Including Index Data
-~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^
 By design Altair only accesses dataframe columns, not dataframe indices.
 At times, relevant data appears in the index. For example:
 
@@ -107,7 +120,7 @@ More information is available in the
 .. _data-long-vs-wide:
 
 Long-form vs. Wide-form Data
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 There are two common conventions for storing data in a dataframe, sometimes called
 *long-form* and *wide-form*. Both are sensible patterns for storing data in
 a tabular format; briefly, the difference is this:
@@ -180,8 +193,8 @@ step within the chart itself. We will detail to two approaches below.
 
 .. _data-converting-long-form:
 
-Converting Between Long-form and Wide-form: Pandas
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Converting with Pandas
+""""""""""""""""""""""
 This sort of data manipulation can be done as a preprocessing step using Pandas_,
 and is discussed in detail in the `Reshaping and Pivot Tables`_ section of the
 Pandas documentation.
@@ -209,8 +222,8 @@ to wide-form, the ``pivot`` method of dataframes is useful.
 
 For more information on the ``pivot`` method, see the `Pandas pivot documentation`_.
 
-Converting Between Long-form and Wide-form: Fold Transform
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Converting with Fold Transform
+""""""""""""""""""""""""""""""
 
 If you would like to avoid data preprocessing, you can reshape your data using Altair's
 Fold Transform (see :ref:`user-guide-fold-transform` for a full discussion).
@@ -299,119 +312,290 @@ created using Altair's :func:`sphere` generator function. Here is an example:
 .. _Pandas melt documentation: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.melt.html#pandas.DataFrame.melt
 .. _Reshaping and Pivot Tables: https://pandas.pydata.org/pandas-docs/stable/reshaping.html
 
-.. _data-geo-interface:
 
-Geospatial Data
-~~~~~~~~~~~~~~~
-Working with geographical data in Altair is possible if the object contains a
-`__geo_interface__` attribute. This attribute represents the geo_interface which is a
-Python protocol for Geospatial Data. The protocol follows a GeoJSON-like structure to
-store geo-spatial vector data.
+Spatial Data
+~~~~~~~~~~~~
 
-To make working with Geospatial Data as similar as working with long-form structured data
-the geo_interface is serialized in order to:
-- make it be correctly interpreted by Altair
-- provide users a similar experience as when working with tabular data such as Pandas.
+In this section, we explain different methods for reading spatial data into Altair.
+To learn more about how to work with this data after you have read it in,
+please see the :ref:`user-guide-geoshape-marks` mark page.
 
-Altair can interpret a spatial bounded entity (a Feature) or a list of Features
-(FeatureCollection). In order for correct interpretation it is made sure that all records
-contain a single geometry (one of Point, LineString, Polygon, MultiPoint,
-MultiLineString, MultiPolygon, and GeometryCollection) and is stored as a Feature entity.
 
-The most basic Feature is an entity that only contains a Geometry object. For example
-a Polygon:
+.. _spatial-data-gdf:
 
-.. code:: python
+GeoPandas GeoDataFrame
+^^^^^^^^^^^^^^^^^^^^^^
 
-    {
-        "type": "Feature",
-        "geometry": {
-            "coordinates": [[
-                [0, 0],
-                [0, 2],
-                [2, 2],
-                [2, 0],
-                [0, 0]
-            ]],
-            "type": "Polygon"
-        }
-    }
-
-Often, the Feature contains also additional metadata next to the Geometry object.
-The `__geo_interface__` provides two approaches to store metadata.
-- Metadata stored as a dictionary within the key `properties` (so called properties
-member). This properties member must exist in a valid Feature entity.
-- Metada may be stored directly as foreign members on the top-level of the Feature.
-There is no normative processing model for usage of this declaration.
-
-Altair serializes the metadata from the properties in combination with the declared
-geometry as Feature entities. The result of this approach is that the keys `type`
-and `geometry` in the properties member will be overwritten if used.
-
-So a `__geo_interface__` that is registered as such
+It is convenient to use GeoPandas as the source for your spatial data.
+GeoPandas can read many types of spatial data and Altair works well with GeoDataFrames.
+Here we define four polygon geometries into a
+GeoDataFrame and visualize these using the ``mark_geoshape``.
 
-.. code:: python
+.. altair-plot::
+   :output: repr
 
-    {
-        "type": "Feature",
-        "id": "f1",
-        "geometry": {...},
-        "properties": {
-            "id": 1,
-            "foo": "xx",
-            "bah": "yy",
-            "type": "zz"
-        },
-        "title": "Example Feature"
-    }
-
-Is serialized as such:
+   from shapely import geometry
+   import geopandas as gpd
+   import altair as alt
+
+   data_geoms = [
+       {"color": "#F3C14F", "geometry": geometry.Polygon([[1.45, 3.75], [1.45, 0], [0, 0], [1.45, 3.75]])},
+       {"color": "#4098D7", "geometry": geometry.Polygon([[1.45, 0], [1.45, 3.75], [2.57, 3.75], [2.57, 0], [2.33, 0], [1.45, 0]])},
+       {"color": "#66B4E2", "geometry": geometry.Polygon([[2.33, 0], [2.33, 2.5], [3.47, 2.5], [3.47, 0], [3.2, 0], [2.57, 0], [2.33, 0]])},
+       {"color": "#A9CDE0", "geometry": geometry.Polygon([[3.2, 0], [3.2, 1.25], [4.32, 1.25], [4.32, 0], [3.47, 0], [3.2, 0]])},
+   ]
+
+   gdf_geoms = gpd.GeoDataFrame(data_geoms)
+   gdf_geoms
+
+
+Since the spatial data in our example is not geographic,
+we use ``project`` configuration ``type="identity", reflectY=True`` to draw the
+geometries without applying a geographic projection. By using ``alt.Color(...).scale(None)`` we
+disable the automatic color assignment in Altair
+and instead directly use the provided Hex color codes.
+
+.. altair-plot::
+
+   alt.Chart(gdf_geoms, title="Vega-Altair").mark_geoshape().encode(
+       alt.Color("color:N").scale(None)
+   ).project(type="identity", reflectY=True)
+
+
+.. _spatial-data-inline-geojson:
+
+Inline GeoJSON Object
+^^^^^^^^^^^^^^^^^^^^^
+
+If your source data is a GeoJSON file and you do not want to load it
+into a GeoPandas GeoDataFrame you can provide it as a dictionary to the Altair ``Data`` class. A
+GeoJSON file normally consists of a ``FeatureCollection`` with a list of
+``features`` where the information for each geometry is specified within a
+``properties`` dictionary. In the following example a GeoJSON-like data
+object is specified into a ``Data`` class using the ``property``
+value of the ``key`` that contain the nested list (here named
+``features``).
+
+.. altair-plot::
+   :output: repr
+
+   obj_geojson = {
+       "type": "FeatureCollection",
+       "features":[
+           {"type": "Feature", "properties": {"location": "left"}, "geometry": {"type": "Polygon", "coordinates": [[[1.45, 3.75], [1.45, 0], [0, 0], [1.45, 3.75]]]}},
+           {"type": "Feature", "properties": {"location": "middle-left"}, "geometry": {"type": "Polygon", "coordinates": [[[1.45, 0], [1.45, 3.75], [2.57, 3.75], [2.57, 0], [2.33, 0], [1.45, 0]]]}},
+           {"type": "Feature", "properties": {"location": "middle-right"}, "geometry": {"type": "Polygon", "coordinates": [[[2.33, 0], [2.33, 2.5], [3.47, 2.5], [3.47, 0], [3.2, 0], [2.57, 0], [2.33, 0]]]}},
+           {"type": "Feature", "properties": {"location": "right"}, "geometry": {"type": "Polygon", "coordinates": [[[3.2, 0], [3.2, 1.25], [4.32, 1.25], [4.32, 0], [3.47, 0], [3.2, 0]]]}}
+       ]
+   }
+   data_obj_geojson = alt.Data(values=obj_geojson, format=alt.DataFormat(property="features"))
+   data_obj_geojson
+
+The label for each objects location is stored within the ``properties`` dictionary. To access these values
+you can specify a nested variable name (here ``properties.location``) within the color
+channel encoding. Here we change the coloring encoding to be based on this location label,
+and apply a ``magma`` color scheme instead of the default one.
+The ``:O`` suffix indicates that we want Altair to treat these values as ordinal,
+and you can read more about it in the :ref:`encoding-data-types` page.
+for the ordinal structured data.
+
+.. altair-plot::
+
+   alt.Chart(data_obj_geojson, title="Vega-Altair - ordinal scale").mark_geoshape().encode(
+       alt.Color("properties.location:O").scale(scheme='magma')
+   ).project(type="identity", reflectY=True)
 
-.. code:: python
 
-    {
-        "type": "Feature",
-        "geometry": {...},
-        "foo": "xx",
-        "bah": "yy",
-        "id": 1
-    }
+.. _spatial-data-remote-geojson:
 
-The nested `"type": "zz"` in the properties member is overwritten by `"type":"Feature"`
-and only the metadata stored in the properties member is serialized. Meaning that
-foreign members and the commonly used identifier are not serialized.
+GeoJSON File by URL
+^^^^^^^^^^^^^^^^^^^
+
+Altair can load GeoJSON resources directly from a web URL. Here we use
+an example from geojson.xyz. As is explained in :ref:`spatial-data-inline-geojson`,
+we specify ``features`` as
+the value for the ``property`` parameter in the ``alt.DataFormat()`` object
+and prepend the attribute we want to plot (``continent``)
+with the name of the nested dictionary where the
+information of each geometry is stored (``properties``).
+
+.. altair-plot::
+   :output: repr
 
-.. _data-geopandas-vs-pandas:
+   url_geojson = "https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_110m_admin_0_countries.geojson"
+   data_url_geojson = alt.Data(url=url_geojson, format=alt.DataFormat(property="features"))
+   data_url_geojson
+
+.. altair-plot::
+
+    alt.Chart(data_url_geojson).mark_geoshape().encode(color='properties.continent:N')
+
+
+.. _spatial-data-inline-topojson:
+
+Inline TopoJSON Object
+^^^^^^^^^^^^^^^^^^^^^^
+
+TopoJSON is an extension of GeoJSON, where the geometry of the features
+are referred to from a top-level object named arcs. Each shared arc is
+only stored once to reduce the size of the data. A TopoJSON file object can contain
+multiple objects (eg. boundary border and province border). When
+defining a TopoJSON object for Altair we specify the ``topojson``
+data format type and the name of the object we like to visualize using the
+``feature`` parameter. Here the name of this object key is ``MY_DATA``,
+but this differs in each dataset.
+
+.. altair-plot::
+   :output: repr
+
+   obj_topojson = {
+       "arcs": [
+           [[1.0, 1.0], [0.0, 1.0], [0.0, 0.0], [1.0, 0.0]],
+           [[1.0, 0.0], [2.0, 0.0], [2.0, 1.0], [1.0, 1.0]],
+           [[1.0, 1.0], [1.0, 0.0]],
+       ],
+       "objects": {
+           "MY_DATA": {
+               "geometries": [
+                   {"arcs": [[-3, 0]], "properties": {"name": "abc"}, "type": "Polygon"},
+                   {"arcs": [[1, 2]], "properties": {"name": "def"}, "type": "Polygon"},
+               ],
+               "type": "GeometryCollection",
+           }
+       },
+       "type": "Topology",
+   }
+   data_obj_topojson = alt.Data(
+       values=obj_topojson, format=alt.DataFormat(feature="MY_DATA", type="topojson")
+   )
+   data_obj_topojson
+
+.. altair-plot::
+
+   alt.Chart(data_obj_topojson).mark_geoshape(
+   ).encode(
+       color="properties.name:N"
+   ).project(
+       type='identity', reflectY=True
+   )
+
+
+.. _spatial-data-remote-topojson:
+
+TopoJSON File by URL
+^^^^^^^^^^^^^^^^^^^^
+
+Altair can load TopoJSON resources directly from a web URL. As
+explained in :ref:`spatial-data-inline-topojson`, we have to use the
+``feature`` parameter to specify the object name (here ``boroughs``) and
+define the type of data as ``topjoson`` in the ``alt.DataFormat()`` object.
+
+.. altair-plot::
+   :output: repr
+
+   from vega_datasets import data
+
+   url_topojson = data.londonBoroughs.url
+
+   data_url_topojson = alt.Data(
+       url=url_topojson, format=alt.DataFormat(feature="boroughs", type="topojson")
+   )
+
+   data_url_topojson
+
+Note: There also exist a shorthand to extract the objects from a
+topojson file if this file is accessible by URL:
+``alt.topo_feature(url=url_topojson, feature="boroughs")``
+
+We color encode the Boroughs by there names as they are stored as an
+unique identifier (``id``). We use a ``symbolLimit`` of 33 in two
+columns to display all entries in the legend
+and change the color scheme to have more distinct colors.
+We also add a tooltip which shows the name of the borough
+as we hover over it with the mouse.
+
+.. altair-plot::
+
+   alt.Chart(data_url_topojson, title="London-Boroughs").mark_geoshape(
+       tooltip=True
+   ).encode(
+       alt.Color("id:N").scale(scheme='tableau20').legend(columns=2, symbolLimit=33)
+   )
+
+Similar to the ``feature`` option, there also exists the ``mesh``
+parameter. This parameter extracts a named TopoJSON object set.
+Unlike the feature option, the corresponding geo data is returned as
+a single, unified mesh instance, not as individual GeoJSON features.
+Extracting a mesh is useful for more efficiently drawing borders
+or other geographic elements that you do not need to associate with
+specific regions such as individual countries, states or counties.
+
+Here below we draw the same Boroughs of London, but now as mesh only.
+
+Note: you have to explicitly define ``filled=False`` to draw multi(lines)
+without fill color.
+
+.. altair-plot::
+
+   from vega_datasets import data
+
+   url_topojson = data.londonBoroughs.url
+
+   data_url_topojson_mesh = alt.Data(
+       url=url_topojson, format=alt.DataFormat(mesh="boroughs", type="topojson")
+   )
+
+   alt.Chart(data_url_topojson_mesh, title="Border London-Boroughs").mark_geoshape(
+       filled=False
+   )
+
+.. _spatial-data-nested-geojson:
+
+Nested GeoJSON Objects
+^^^^^^^^^^^^^^^^^^^^^^
+
+GeoJSON data can also be nested within another dataset. In this case it
+is possible to use the ``shape`` encoding channel in combination with the
+``:G`` suffix to visualize the nested features as GeoJSON objects.
+In the following example the GeoJSON object are nested within ``geo``
+in the list of dictionaries:
+
+.. altair-plot::
+
+   nested_features = [
+       {"color": "#F3C14F", "geo": {"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[1.45, 3.75], [1.45, 0], [0, 0], [1.45, 3.75]]]}}},
+       {"color": "#4098D7", "geo": {"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[1.45, 0], [1.45, 3.75], [2.57, 3.75], [2.57, 0], [2.33, 0], [1.45, 0]]]}}},
+       {"color": "#66B4E2", "geo": {"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[2.33, 0], [2.33, 2.5], [3.47, 2.5], [3.47, 0], [3.2, 0], [2.57, 0], [2.33, 0]]]}}},
+       {"color": "#A9CDE0", "geo": {"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[3.2, 0], [3.2, 1.25], [4.32, 1.25], [4.32, 0], [3.47, 0], [3.2, 0]]]}}},
+   ]
+   data_nested_features = alt.Data(values=nested_features)
+
+   alt.Chart(data_nested_features, title="Vega-Altair").mark_geoshape().encode(
+       shape="geo:G",
+       color=alt.Color("color:N").scale(None)
+   ).project(type="identity", reflectY=True)
 
-GeoPandas vs Pandas
-~~~~~~~~~~~~~~~~~~~
-A `GeoDataFrame` is a `DataFrame` including a special column with spatial geometries.
-The column-name containing the spatial geometries defaults to `geometry`. To directly
-use a `GeoDataFrame` with Altair means in practice that only the column-name `type`
-should be avoided.
 
 .. _data-projections:
 
 Projections
-~~~~~~~~~~~
-Altair works best when the Geospatial Data adopts the World Geodetic System 1984 as
+^^^^^^^^^^^
+For geographic data it is best to use the World Geodetic System 1984 as
 its geographic coordinate reference system with units in decimal degrees.
-
 Try to avoid putting projected data into Altair, but reproject your spatial data to
 EPSG:4326 first.
-
 If your data comes in a different projection (eg. with units in meters) and you don't
 have the option to reproject the data, try using the project configuration
-`(type: 'identity', reflectY': True)`. It draws the geometries in a cartesian grid
-without applying a projection.
+``(type: 'identity', reflectY': True)``. It draws the geometries without applying a projection.
+
 
 .. _data-winding-order:
 
-Winding order
-~~~~~~~~~~~~~
+Winding Order
+^^^^^^^^^^^^^
 LineString, Polygon and MultiPolygon geometries contain coordinates in an order: lines
 go in a certain direction, and polygon rings do too. The GeoJSON-like structure of the
-__geo_interface__ recommends the right-hand rule winding order for Polygon and
+``__geo_interface__`` recommends the right-hand rule winding order for Polygon and
 MultiPolygons. Meaning that the exterior rings should be counterclockwise and interior
 rings are clockwise. While it recommends the right-hand rule winding order, it does not
 reject geometries that do not use the right-hand rule.
@@ -419,16 +603,39 @@ reject geometries that do not use the right-hand rule.
 Altair does NOT follow the right-hand rule for geometries, but uses the left-hand rule.
 Meaning that exterior rings should be clockwise and interior rings should be
 counterclockwise.
-
 If you face a problem regarding winding order, try to force the left-hand rule on your
 data before usage in Altair using GeoPandas for example as such:
 
 .. code:: python
 
-    from shapely.ops import orient # version >=1.7a2
+    from shapely.ops import orient
     gdf.geometry = gdf.geometry.apply(orient, args=(-1,))
 
-
-.. _Protocol geo_interface: https://gist.github.com/sgillies/2217756
-.. _Packages supporting the geo_interface: https://github.com/mlaloux/Python-geo_interface-applications
-.. _The GeoJSON format: https://tools.ietf.org/html/rfc7946#section-3.1.9
+.. toctree::
+   :maxdepth: 1
+   :caption: User Guide
+   :hidden:
+
+   self
+   encodings/index
+   marks/index
+   transform/index
+   interactions
+   compound_charts
+   scale_resolve
+   times_and_dates
+   customization
+   configuration
+   saving_charts
+
+
+.. toctree::
+   :maxdepth: 1
+   :caption: Advanced Usage
+   :hidden:
+
+   internals
+   display_frontends
+   custom_renderers
+   data_transformers
+   large_datasets
diff --git a/doc/user_guide/data_transformers.rst b/doc/user_guide/data_transformers.rst
index 83c485e..44a5699 100644
--- a/doc/user_guide/data_transformers.rst
+++ b/doc/user_guide/data_transformers.rst
@@ -1,6 +1,6 @@
 .. _data-transformers:
 
-Data transformers
+Data Transformers
 =================
 
 Before a Vega-Lite or Vega specification can be passed to a renderer, it typically
@@ -95,7 +95,7 @@ individual layer. This duplication of data is the reason that dataset
 consolidation is set to ``True`` by default.
 
 
-Built-in data transformers
+Built-in Data Transformers
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Altair includes a default set of data transformers with the following signatures.
@@ -129,7 +129,7 @@ Multiple data transformers can be piped together using ``pipe``::
     from toolz.curried import pipe
     pipe(data, limit_rows(10000), to_values)
 
-Managing data transformers
+Managing Data Transformers
 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Altair maintains a registry of data transformers, which includes a default
@@ -174,7 +174,7 @@ be registered and enabled as::
     alt.data_transformers.enable('s3')
 
 
-Storing JSON data in a separate directory
+Storing JSON Data in a Separate Directory
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 When creating many charts with ``alt.data_transformers.enable('json')`` the
diff --git a/doc/user_guide/display_frontends.rst b/doc/user_guide/display_frontends.rst
index 4d0173e..1ffab9e 100644
--- a/doc/user_guide/display_frontends.rst
+++ b/doc/user_guide/display_frontends.rst
@@ -24,15 +24,15 @@ Altair's Renderer Framework
 Because different display systems have different requirements and constraints, Altair provides
 an API to switch between various *renderers* to tune Altair's chart representation.
 These can be chosen with the renderer registry in ``alt.renderers``.
-Some of the built-in renderers are:
+The most used built-in renderers are:
 
-``alt.renderers.enable('html')``
+``alt.renderers.enable("html")``
   *(the default)* Output an HTML representation of the chart. The HTML renderer works
-  in JupyterLab_, `Jupyter Notebook`_, `Zeppelin`_, and many related notebook frontends,
+  in JupyterLab_, `Jupyter Notebook`_, `Zeppelin`_, `VSCode-Python`_ and many related notebook frontends,
   as well as Jupyter ecosystem tools like nbviewer_ and nbconvert_ HTML output.
   It requires a web connection in order to load relevant Javascript libraries.
 
-``alt.renderers.enable('mimetype')``
+``alt.renderers.enable("mimetype")``
   *(default prior to Altair 4.0):* Output a vega-lite specific mimetype that can be
   interpreted by appropriate frontend extensions to display charts. This also outputs
   a PNG representation of the plot, which is useful to view plots offline or on
@@ -40,9 +40,21 @@ Some of the built-in renderers are:
   newer versions of JupyterLab_, nteract_, and `VSCode-Python`_, but does not work
   with the `Jupyter Notebook`_, or with tools like nbviewer_ and nbconvert_.
 
-Other renderers can be installed by third-party packages via Python's entrypoints_ system;
-see :ref:`renderer-api`.
+In addition, Altair includes the following renderers:
 
+- ``"default"``, ``"colab"``, ``"kaggle"``, ``"zeppelin"``: identical to ``"html"``
+- ``"jupyterlab"``, ``"nteract"``: identical to ``"mimetype"``
+- ``"png"``: renderer that renders and converts the chart to PNG, outputting it
+  using the ``"image/png"`` MIME type.
+- ``"svg"``: renderer that renders and converts the chart to an SVG image,
+  outputting it using the ``"image/svg+xml"`` MIME type.
+- ``"json"``: renderer that outputs the raw JSON chart specification, using the
+  ``"application/json"`` MIME type.
+
+You can use ``alt.renderers.names()`` to return all registered renderers as a Python list.
+
+Other renderers can be installed by third-party packages via Python's entrypoints system or you can create your own,
+see :ref:`customizing-renderers`.
 
 .. _display-jupyterlab:
 
@@ -64,14 +76,14 @@ Altair 4 this can be installed with:
     $ jupyter labextension install @jupyterlab/vega5-extension
 
 In JupyterLab version 2.0 or newer, this extension is installed by default, though the
-version available in the jupyterlab release often takes a few months to catch up with
+version available in the JupyterLab release often takes a few months to catch up with
 new Altair releases.
 
 
 .. _display-notebook:
 
-Displaying in the Jupyter Notebook
-----------------------------------
+Displaying in Jupyter Notebook
+------------------------------
 The classic Jupyter Notebook will work with Altair's default renderer with
 a live web connection: no render enable step is required.
 
@@ -79,8 +91,8 @@ Optionally, for offline rendering in Jupyter Notebook, you can use the notebook
 
     # Optional in Jupyter Notebook: requires an up-to-date vega nbextension.
     alt.renderers.enable('notebook')
-    
-This renderer is provided by the `ipyvega`_ notebook extension. which can be
+ 
+This renderer is provided by the `ipyvega`_ notebook extension, which can be
 installed and enabled either using pip:
 
 .. code-block:: bash
@@ -106,7 +118,7 @@ Displaying in nteract
 ---------------------
 nteract_ cannot display HTML outputs natively, and so Altair's default ``html`` renderer
 will not work. However, nteract natively includes vega and vega-lite mimetype-based rendering.
-To use Altair in nteract, ensure you are using a version that supports the vega-lite v4
+To use Altair in nteract, ensure you are using a version that supports the Vega-Lite v5
 mimetype, and use::
 
     alt.renderers.enable('mimetype')
@@ -116,11 +128,12 @@ mimetype, and use::
 
 Displaying in VSCode
 --------------------
-`VSCode-Python`_ includes a vega-lite renderer to display charts in-app via the
-vega-lite mimetype output. You can enable it by running::
+`VSCode-Python`_ works with Altair's default renderer with a live web connection: no render enable step is required.
 
-    alt.renderers.enable('mimetype')
+Optionally, for offline rendering, you can use the mimetype renderer::
 
+    # Optional in VS Code
+    alt.renderers.enable('mimetype')
 
 .. _display-general:
 
@@ -187,85 +200,447 @@ the chart is closed.
 
 Manual ``save()`` and display
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-If you would prefer, you can manually save your chart as html and open it with
-a web browser. Once you have created your chart, run::
+If you would prefer, you can save your chart to a file (html, png, etc.) first and then display it.
+See :ref:`user-guide-saving` for more information.
+
+.. _display-troubleshooting:
+
+Troubleshooting
+---------------
+Altair has a number of moving parts: it creates data structures in Python, those
+structures are passed to front-end renderers, and the renderers run JavaScript
+code to generate the output. This complexity means that it's possible to get
+into strange states where things don't immediately work as expected.
+
+This section summarizes some of the most common problems and their solutions.
+
+ 
+.. _troubleshooting-general:
+
+General Troubleshooting
+~~~~~~~~~~~~~~~~~~~~~~~
+
+Chart does not display at all
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+If you are expecting a chart output and see nothing at all, it means that the
+Javascript rendering libraries are not being invoked.
+This can happen for several reasons:
+
+1. You have an old browser that doesn't support JavaScript's `ECMAScript 6`_:
+   in this case, charts may not display properly or at all. For example, Altair
+   charts will not render in any version of Internet Explorer.
+   If this is the case, you will likely see syntax errors in your browser's
+   `Javascript Console`_.
+
+2. Your browser is unable to load the javascript libraries. This may be due to
+   a local firewall, an adblocker, or because your browser is offline. Check your
+   browser's `Javascript Console`_  to see if there are errors.
+
+3. You may be failing to trigger the notebook's display mechanism (see below).
+
+If you are working in a notebook environment, the chart is only displayed if the
+**last line of the cell evaluates to a chart object**
+
+By analogy, consider the output of simple Python operations::
+
+    >>> x = 4  # no output here
+    >>> x      # output here, because x is evaluated
+    4
+    >>> x * 2  # output here, because the expression is evaluated
+    8
+
+If the last thing you type consists of an assignment operation, there will be no
+output displayed. This turns out to be true of Altair charts as well:
+
+.. altair-plot::
+    :output: none
+
+    import altair as alt
+    from vega_datasets import data
+    cars = data.cars.url
+
+    chart = alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N',
+    )
+
+The last statement is an assignment, so there is no output and the chart is not
+shown. If you have a chart assigned to a variable, you need to end the cell with
+an evaluation of that variable:
+
+.. altair-plot::
+
+    chart = alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N',
+    )
+
+    chart
+
+Alternatively, you can evaluate a chart directly, and not assign it to a variable,
+in which case the object definition itself is the final statement and will be
+displayed as an output:
+
+.. altair-plot::
+
+    alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N',
+    )
+
+Plot displays, but the content is empty
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Sometimes charts may appear, but the content is empty; for example:
+
+.. altair-plot::
+
+    import altair as alt
+
+    alt.Chart('nonexistent_file.csv').mark_line().encode(
+        x='x:Q',
+        y='y:Q',
+    )
+
+If this is the case, it generally means one of two things:
+
+1. your data is specified by a URL that is invalid or inaccessible
+2. your encodings do not match the columns in your data source
+
+In the above example, ``nonexistent_file.csv`` doesn't exist, and so the chart
+does not render (associated warnings will be visible in the `Javascript Console`_).
+
+Some other specific situations that may cause this:
+
+You have an adblocker active
+  Charts that reference data by URL can sometimes trigger false positives in your
+  browser's adblocker. Check your browser's `Javascript Console`_ for errors, and
+  try disabling your adblocker.
+
+You are loading data cross-domain
+  If you save a chart to HTML and open it using a ``file://`` url in your browser,
+  most browsers will not allow the javascript to load datasets from an ``http://``
+  domain. This is a security feature in your browser that cannot be disabled.
+  To view such charts locally, a good approach is to use a simple local HTTP server
+  like the one provided by Python::
+  
+      $ python -m http.server
+  
+Your encodings do not match your data
+  A similar blank chart results if you refer to a field that does not exist
+  in the data, either because of a typo in your field name, or because the
+  column contains special characters (see below).
+
+Here is an example of a mis-specified field name leading to a blank chart:
+
+.. altair-plot::
+
+   import pandas as pd
+
+   data = pd.DataFrame({'x': [1, 2, 3],
+                        'y': [3, 1, 4]})
+
+   alt.Chart(data).mark_point().encode(
+       x='x:Q',
+       y='y:Q',
+       color='color:Q'  # <-- this field does not exist in the data!
+     )
+  
+Altair does not check whether fields are valid, because there are many avenues
+by which a field can be specified within the full schema, and it is too difficult
+to account for all corner cases. Improving the user experience in this is a
+priority; see https://github.com/vega/vega-lite/issues/3576.
+
+Encodings with special characters
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+The Vega-Lite grammar on which Altair is based allows for encoding names to use
+special characters to access nested properties (See Vega-Lite's Field_ documentation).
+
+This can lead to errors in Altair when trying to use such columns in your chart.
+For example, the following chart is invalid:
+
+.. altair-plot::
+
+   import pandas as pd
+   data = pd.DataFrame({'x.value': [1, 2, 3]})
+
+   alt.Chart(data).mark_point().encode(
+       x='x.value:Q',
+   )
+
+To plot this data directly, you must escape the period in the field name:
+
+.. altair-plot::
+
+   import pandas as pd
+   data = pd.DataFrame({'x.value': [1, 2, 3]})
+
+   alt.Chart(data).mark_point().encode(
+       x=r'x\.value:Q',
+   )
+
+In general, it is better to avoid special characters like ``"."``, ``"["``, and ``"]"``
+in your data sources where possible.
+
+.. _troubleshooting-jupyterlab:
+
+Troubleshooting in JupyterLab
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  
+.. _jupyterlab-vega-lite-4-object:
+
+VegaLite 4 Object
+^^^^^^^^^^^^^^^^^
+*If you are using the Jupyter notebook rather than JupyterLab, then refer to*
+:ref:`notebook-vega-lite-4-object`
+
+If you are using JupyterLab (not Jupyter notebook) and see the following output::
+
+    <VegaLite 4 object>
+
+This means that you have enabled the ``mimetype`` renderer, but that your JupyterLab
+frontend does not support the VegaLite 4 mimetype.
+
+The easiest solution is to use the default renderer::
+
+    alt.renderers.enable('default')
+
+and rerun the cell with the chart.
+
+If you would like to use the mimetype rendering with the JupyterLab frontend extension,
+then make certain the extension is installed and enabled:
+
+    $ jupyter labextension install @jupyterlab/vega5-extension
+
+and then restart your jupyter frontend.
+  
+.. _jupyterlab-vega-lite-3-object:
+
+VegaLite 3 Object
+^^^^^^^^^^^^^^^^^
+*If you are using the Jupyter notebook rather than JupyterLab, then refer to*
+:ref:`notebook-vega-lite-3-object`
+
+If you are using JupyterLab (not Jupyter notebook) and see the following output::
+
+    <VegaLite 3 object>
+
+This most likely means that you are using too old a version of JupyterLab.
+Altair 3.0 or later works best with JupyterLab version 1.0 or later;
+check the version with::
+
+   $ jupyter lab --version
+   1.2.0
+
+If you have an older jupyterlab version, then use ``pip install -U jupyterlab``
+or ``conda update jupyterlab`` to update JupyterLab, depending on how you
+first installed it.
+
+JavaScript output is disabled in JupyterLab
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If you are using JupyterLab and see the following output::
+
+    JavaScript output is disabled in JupyterLab
+
+it can mean one of two things is wrong
+
+1. You are using an old version of Altair. JupyterLab only works with Altair
+   version 2.0 or newer; you can check the altair version by executing the
+   following in a notebook code cell::
+
+       import altair as alt
+       alt.__version__
+
+   If the version is older than 2.0, then exit JupyterLab and follow the
+   installation instructions at :ref:`display-jupyterlab`.
+
+2. You have enabled the wrong renderer. JupyterLab works with the default
+   renderer, but if you have used ``alt.renderers.enable()`` to enable
+   another renderer, charts will no longer render correctly in JupyterLab.
+   You can check which renderer is active by running::
+
+       import altair as alt
+       print(alt.renderers.active)
+
+   JupyterLab rendering will work only if the active renderer is ``"default"``
+   or ``"jupyterlab"``. You can re-enable the default renderer by running::
+
+       import altair as alt
+       alt.renderers.enable('default')
+
+   (Note that the default renderer is enabled, well, by default, and so this
+   is only necessary if you've somewhere changed the renderer explicitly).
+
+.. _jupyterlab-textual-chart-representation:
+
+Textual Chart Representation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+*If you are using the Notebook rather than the JupyterLab, then refer to*
+:ref:`notebook-textual-chart-representation`
+
+If you are using JupyterLab and see a textual representation of the Chart object
+similar to this::
+
+    Chart({
+      data: 'https://vega.github.io/vega-datasets/data/cars.json',
+      encoding: FacetedEncoding({
+        x: X({
+          shorthand: 'Horsepower'
+        })
+      }),
+      mark: 'point'
+    })
+
+it probably means that you are using an older Jupyter kernel.
+You can confirm this by running::
+
+   import IPython; IPython.__version__
+   # 6.2.1
+
+Altair will not display correctly if using a kernel with IPython version 4.X or older.
+
+The easiest way to address this is to change your kernel: choose "Kernel"->"Change Kernel"
+and then use the first kernel that appears.
+
+.. _jupyterlab-notebook-backend:
+
+Javascript Error: require is not defined
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+If you are using JupyterLab and see the error::
+
+    Javascript Error: require is not defined
+
+This likely means that you have enabled the notebook renderer, which is not
+supported in JupyterLab: that is, you have somewhere run
+``alt.renderers.enable('notebook')``.
+JupyterLab supports Altair's default renderer, which you can re-enable using::
+
+    alt.renderers.enable('default')
+
+
+.. _troubleshooting-notebook:
+
+Troubleshooting in Notebooks
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. _notebook-vega-lite-4-object:
+
+Notebook: VegaLite 4 object
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+*If you are using JupyterLab rather than the Jupyter notebook, then refer to*
+:ref:`jupyterlab-vega-lite-3-object`
+
+If you are using Jupyter Notebook (not JupyterLab) and see the following output::
+
+    <VegaLite 4 object>
+
+This means that you have enabled the ``mimetype`` renderer.
+
+The easiest solution is to use the default renderer::
+
+    alt.renderers.enable('default')
+
+and rerun the cell with the chart.
+
+
+.. _notebook-vega-lite-3-object:
+
+Notebook: VegaLite 3 object
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+*If you are using JupyterLab rather than the Jupyter notebook, then refer to*
+:ref:`jupyterlab-vega-lite-3-object`
+
+If you are using the notebook (not JupyterLab) and see the the following output::
+
+    <Vegalite 3 object>
+
+it means that either:
+
+1. You have forgotten to enable the notebook renderer. As mentioned
+   in :ref:`display-notebook`, you need to install version 2.0 or newer
+   of the ``vega`` package and Jupyter extension, and then enable it using::
+
+       import altair as alt
+       alt.renderers.enable('notebook')
+
+   in order to render charts in the classic notebook.
+
+   If the above code gives an error::
 
-    chart.save('filename.html')
+       NoSuchEntryPoint: No 'notebook' entry point found in group 'altair.vegalite.v2.renderer'
 
-and use a web browser to open this file.
+   This means that you have not installed the vega package. If you see this error,
+   please make sure to follow the standard installation instructions at
+   :ref:`display-notebook`.
 
-.. _renderer-api:
+2. You have too old a version of Jupyter notebook. Run::
 
-Renderer API
-============
+       $ jupyter notebook --version
 
-If you want to enable Altair rendering with behavior not provided by the built-in
-renderers, you can use the renderer API to create that custom behavior.
-In Altair, a renderer is any function that accepts a Vega-Lite or Vega
-visualization specification as a Python ``dict``, and returns a Python ``dict``
-in Jupyter's `MIME Bundle format
-<https://jupyter-client.readthedocs.io/en/stable/messaging.html#display-data>`_.
-The keys of the MIME bundle should be MIME types (such as ``image/png``) and the
-values should be the data for that MIME type (text, base64 encoded binary or
-JSON). The type signature of a renderer is thus::
+   and make certain you have version 5.3 or newer. If not, then update the notebook
+   using either ``pip install -U jupyter notebook`` or ``conda update jupyter notebook``
+   depending on how you first installed the packages.
 
-    def renderer(spec: dict) -> dict:
-        ...
+If you have done the above steps and charts still do not render, it likely means
+that you are using a different *Kernel* within your notebook. Switch to the kernel
+named *Python 2* if you are using Python 2, or *Python 3* if you are using Python 3.
 
-Altair's default ``html`` rendeer returns a cross-platform HTML representation using
-the ``"text/html"`` mimetype; schematically it looks like this::
+.. _notebook-textual-chart-representation:
 
-    def default_renderer(spec):
-        bundle = {'text/html': generate_html(spec)}
-        metadata = {}
-        return bundle, metadata
+Notebook: Textual Chart Representation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+*If you are using the Notebook rather than the JupyterLab, then refer to*
+:ref:`jupyterlab-textual-chart-representation`
 
-Propertly-configured Jupyter frontends know how to interpret and display charts using
-custom vega-specific mimetypes; for example:
+*If you are not using a Jupyter notebook environment, then refer to*
+:ref:`troubleshooting-non-notebook`.
 
-* Vega-Lite 4.x: ``application/vnd.vegalite.v4+json``
-* Vega 5.x: ``application/vnd.vega.v5+json``
+If you are using Jupyter notebook and see a textual representation of the Chart
+object similar to this::
 
-Altair's ``mimetype`` renderer uses this mechanism to return the spec directly::
+    Chart({
+      data: 'https://vega.github.io/vega-datasets/data/cars.json',
+      encoding: FacetedEncoding({
+        x: X({
+          shorthand: 'Horsepower'
+        })
+      }),
+      mark: 'point'
+    })
 
-    def default_renderer(spec):
-        bundle = {}
-        metadata = {}
-        bundle['text/plain'] = '<VegaLite 4 object>`
-        bundle['application/vnd.vegalite.v4+json'] = spec
-        return bundle, metadata
+it probably means that you are using an older Jupyter kernel.
+You can confirm this by running::
 
-If a renderer needs to do custom display logic that doesn't use Jupyter's display
-system, it can return an empty MIME bundle dict::
+   import IPython; IPython.__version__
+   # 6.2.1
 
-    def non_jupyter_renderer(spec):
-        # Custom display logic that uses the spec
-        ...
-        # Return empty MIME bundle
-        return {}
+Altair will not display correctly if using a kernel with IPython version 4.X or older.
 
-Altair offers an API to list the known renderers, register new ones and enable
-a given one. To return the registered renderers as a Python list::
+The easiest way to address this is to change your kernel:
+choose "Kernel"->"Change Kernel" and then select "Python 2" or "Python 3",
+depending on what version of Python you used when installing Altair.
 
-    >>> import altair as alt
-    >>> alt.renderers.names()
-    ['colab', 'default', 'html', 'json', 'jupyterlab', 'kaggle', 'mimetype',
-    'nteract', 'png', 'svg', 'zeppelin']
 
-To enable the JSON renderer, which results in a collapsible JSON tree view
-in JupyterLab/nteract::
+.. _troubleshooting-non-notebook:
 
-    >>> alt.renderers.enable('json')
+Troubleshooting outside of Jupyter
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you are using Altair outside of a Jupyter notebook environment (such as a
+Python or IPython terminal) charts will be displayed as a textual
+representation. Rendering of Altair charts requires executing Javascript code,
+which your Python terminal cannot do natively.
 
-To register and enable a new renderer::
+For recommendations on how to use Altair outside of notebook environments,
+see :ref:`display-general`.
 
-    >>> alt.renderers.register('custom_renderer', custom_renderer)
-    >>> alt.renderers.enable('custom_renderer')
 
-Renderers can also be registered using the `entrypoints`_ API of Python packages.
-For an example, see `ipyvega`_.
+.. _`ECMAScript 6`: https://www.w3schools.com/js/js_es6.asp
+.. _`Javascript Console`: https://webmasters.stackexchange.com/questions/8525/how-do-i-open-the-javascript-console-in-different-browsers
+.. _Field: https://vega.github.io/vega-lite/docs/field.html
 
-.. _entrypoints: https://github.com/takluyver/entrypoints
 .. _ipyvega: https://github.com/vega/ipyvega/
 .. _JupyterLab: http://jupyterlab.readthedocs.io/en/stable/
 .. _nteract: https://nteract.io
@@ -278,4 +653,4 @@ For an example, see `ipyvega`_.
 .. _Vega-Lite: http://vega.github.io/vega-lite
 .. _Vega: https://vega.github.io/vega/
 .. _VSCode-Python: https://code.visualstudio.com/docs/python/python-tutorial
-.. _Zeppelin: https://zeppelin.apache.org/
\ No newline at end of file
+.. _Zeppelin: https://zeppelin.apache.org/
diff --git a/doc/user_guide/ecosystem.rst b/doc/user_guide/ecosystem.rst
index 0ebdd52..2999adf 100644
--- a/doc/user_guide/ecosystem.rst
+++ b/doc/user_guide/ecosystem.rst
@@ -1,69 +1,162 @@
 .. _ecosystem:
 
-Altair Ecosystem
-================
+Resources
+=========
 
-This is a list of projects related to or built on top of Altair. We hope to make it easier to find these projects by listing them here. If you know of a project that should be added, please let us know.
+We hope to make it easier to find learning resources and projects related to Altair by listing them here. If you know of a project that should be added, please let us know by opening an `Issue on GitHub <https://github.com/altair-viz/altair/issues>`_.
 
-altair_recipes_
----------------
+.. _learning-resources:
+
+Learning Material
+-----------------
+
+This is a list of learning material that complements the official documentation and can help you learn more about how to use Altair.
 
-altair-recipes provides a collection of ready-made statistical graphics for vega. See the `docs <https://altair-recipes.readthedocs.io/en/latest/>`__.
+`Visualization Curriculum`_
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+A data visualization curriculum from the UW data group that developed Vega-Lite.
 
 .. List of links.
-.. _altair_recipes: https://github.com/piccolbo/altair_recipes
+.. _`Visualization Curriculum`: https://uwdata.github.io/visualization-curriculum
 
-gpdvega_
---------
+`Jupyter Notebook Tutorials`_
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-gpdvega is a bridge between GeoPandas_, a geospatial extension of Pandas_, and Altair which allows to seamlessly chart geospatial data using altair. See the `docs <https://iliatimofeev.github.io/gpdvega/>`__.
+Jupyter Notebook tutorials and examples from the Altair authors.
 
 .. List of links.
-.. _gpdvega: https://github.com/iliatimofeev/gpdvega
-.. _GeoPandas: http://geopandas.org/
-.. _Pandas: https://pandas.pydata.org/
+.. _`Jupyter Notebook Tutorials`: https://github.com/altair-viz/altair_notebooks
 
-nx_altair_
-----------
+`Pycon Tutorial`_
+~~~~~~~~~~~~~~~~~
 
-nx_altair is a library for drawing NetworkX_ graphs using Altair. It offers a similar draw API as NetworkX but returns Altair Charts instead. This allows users to apply Altair's rich interactive API to networks graphs. See the `docs <https://github.com/Zsailer/nx_altair/blob/master/examples/nx_altair-tutorial.ipynb>`__.
+Altair tutorial given at PyCon 2018 by the Altair author Jake VanderPlas.
 
 .. List of links.
-.. _nx_altair: https://github.com/Zsailer/nx_altair
-.. _NetworkX: https://networkx.github.io/
+.. _`Pycon tutorial`: https://altair-viz.github.io/altair-tutorial
 
-pdvega_
--------
+`Data Visualization Course`_
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-pdvega is a library that allows you to quickly create interactive Vega-Lite_ plots from Pandas_ dataframes, using an API that is nearly identical to Pandas' built-in visualization tools, and designed for easy use within the Jupyter_ notebook. See the `docs <https://altair-viz.github.io/pdvega/>`__.
+This course covers how to create common statistical visualizations, tell stories with data, create geographical visualizations, and bring plots to life by adding interactive elements. Created at the University of British Columbia and can either be audited or taken as part of the `Key Capabilities for Data Science`_ certificate program.
 
+.. List of links.
+.. _`Data Visualization Course`: https://viz-learn.mds.ubc.ca
+.. _`Key Capabilities for Data Science`: https://extendedlearning.ubc.ca/programs/key-capabilities-data-science
+
+`Brief Introduction Videos`_
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Calmcode provides a few videos that give a brief overview of the Altair library.
 
 .. List of links.
-.. _pdvega: https://github.com/altair-viz/pdvega
-.. _Vega-Lite: https://vega.github.io/vega-lite/
-.. _Jupyter: http://jupyter.org/
+.. _`Brief Introduction Videos`: https://calmcode.io/altair/introduction.html
 
-`Altair in R`_
---------------
-Altair in R provides an R interface to the Altair Python package. See the `docs <https://vegawidget.github.io/altair/>`__.
+
+.. _altair-ecosystem:
+
+Related Projects
+----------------
+
+This is a list of projects which are directly related to Altair. There are many other packages that can be used in tandem with Altair, e.g. `dashboard packages which you can read more about in the answers to this StackOverflow question`_.
 
 .. List of links.
-.. _`Altair in R`: https://github.com/vegawidget/altair
+.. _`dashboard packages which you can read more about in the answers to this StackOverflow question`: https://stackoverflow.com/questions/49833866/making-dashboards-using-altair
+
+Vega-Lite_
+~~~~~~~~~~
+
+The higher-level visualization grammar that Altair implements in Python.
+
+.. List of links.
+.. _Vega-Lite: https://vega.github.io/vega-lite
+
+vl-convert_
+~~~~~~~~~~~
+
+Python library for converting Altair/Vega-Lite chart specifications into static images (SVG or PNG) or Vega chart specifications without any external dependencies.
+
+.. List of links.
+.. _vl-convert: https://github.com/vega/vl-convert
+
+VegaFusion_
+~~~~~~~~~~~
+
+VegaFusion provides server-side scaling for Altair charts, which can accelerate interactive charts, extract transformed data, and perform data-intensive aggregations on the server and prune unused columns from the source dataset yielding smaller size visualizations.
+
+.. List of links.
+.. _VegaFusion: https://vegafusion.io/
+
+altair_saver_
+~~~~~~~~~~~~~
+
+Enables saving charts to a variety of output types.
+
+.. List of links.
+.. _altair_saver: https://github.com/altair-viz/altair_saver
+
+altair_data_server_
+~~~~~~~~~~~~~~~~~~~
 
-starborn_
----------
+Data transformer plugin that transparently serves data for charts.
 
-Starborn is a Python visualization library based on Vega and Altair that aims to be API-compatible with Seaborn_. Like Seaborn, it provides a high-level interface for drawing attractive statistical graphics. Thanks to the underlying libraries, it can also offer interactivity with in-browser panning and zooming. See the `docs <https://github.com/PythonCharmers/starborn/blob/master/doc/starborn_examples.ipynb>`__.
+.. List of links.
+.. _altair_data_server: https://github.com/altair-viz/altair_data_server
 
+altair_pandas_
+~~~~~~~~~~~~~~
+
+Altair backend for the pandas plotting API.
 
 .. List of links.
-.. _starborn: https://github.com/PythonCharmers/starborn
-.. _Seaborn: https://seaborn.pydata.org/index.html
+.. _altair_pandas: https://github.com/altair-viz/altair_pandas
+
+vega_datasets_
+~~~~~~~~~~~~~~
+
+Offline access to the Vega datasets used in the Altair documentation.
+
+.. List of links.
+.. _vega_datasets: https://github.com/altair-viz/vega_datasets
+
+altair_recipes_
+~~~~~~~~~~~~~~~
+
+altair_recipes provides a collection of ready-made statistical graphics for Altair. See the `docs <https://altair-recipes.readthedocs.io/en/latest/>`__.
+
+.. List of links.
+.. _altair_recipes: https://github.com/piccolbo/altair_recipes
+
+nx_altair_
+~~~~~~~~~~
+
+nx_altair is a library for drawing NetworkX_ graphs using Altair. It offers a similar draw API as NetworkX but returns Altair Charts instead. This allows users to apply Altair's rich interactive API to networks graphs. See the `docs <https://github.com/Zsailer/nx_altair/blob/master/examples/nx_altair-tutorial.ipynb>`__.
+
+.. List of links.
+.. _nx_altair: https://github.com/Zsailer/nx_altair
+.. _NetworkX: https://networkx.github.io/
+
+`Altair Ally`_
+~~~~~~~~~~~~~~
+
+Altair Ally is a companion package to Altair, which provides a few shortcuts to create common plots for exploratory data analysis, particularly those involving visualization of an entire dataframe.
+
+.. List of links.
+.. _`Altair Ally`: https://joelostblom.github.io/altair_ally
 
 gif_
-----
+~~~~
 
 gif is the extension for Altair and matplotlib animations. The library provides a simple, high-level decorator interface to create frames in a regular for-loop that can be stitched together on save. See the `docs <https://github.com/maxhumber/gif>`__.
 
 .. List of links.
 .. _gif: https://github.com/maxhumber/gif
+
+`Altair in R`_
+~~~~~~~~~~~~~~
+
+Altair in R provides an R interface to the Altair Python package. See the `docs <https://vegawidget.github.io/altair/>`__.
+
+.. List of links.
+.. _`Altair in R`: https://github.com/vegawidget/altair
diff --git a/doc/user_guide/encodings/channel_options.rst b/doc/user_guide/encodings/channel_options.rst
new file mode 100644
index 0000000..0d55f2e
--- /dev/null
+++ b/doc/user_guide/encodings/channel_options.rst
@@ -0,0 +1,114 @@
+.. currentmodule:: altair
+
+.. _user-guide-encoding-channel-options:
+
+Channel Options
+---------------
+
+Some encoding channels allow for additional options to be expressed.
+These can control things like axis properties, scale properties, headers and
+titles, binning parameters, aggregation, sorting, and many more.
+
+The section titles below refer to the channels introduced in :ref:`user-guide-encoding-channels`
+and show the accepted options for these channels.
+
+
+X and Y
+~~~~~~~
+
+The :class:`X` and :class:`Y` encodings accept the following options:
+
+.. altair-object-table:: altair.PositionFieldDef
+
+Color, Fill, and Stroke
+~~~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`Color`, :class:`Fill`, and :class:`Stroke`  encodings accept the following options:
+
+.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull
+
+Shape
+~~~~~
+
+The :class:`Shape` encoding accepts the following options:
+
+.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull
+
+Order
+~~~~~
+
+The :class:`Order` encoding accepts the following options:
+
+.. altair-object-table:: altair.OrderFieldDef
+
+Angle, FillOpacity, Opacity, Size, StrokeOpacity, and StrokeWidth
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`Angle`, :class:`FillOpacity`, :class:`Opacity`, :class:`Size`, :class:`StrokeOpacity`,
+and :class:`StrokeWidth` encodings accept the following options:
+
+.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefnumber
+
+StrokeDash
+~~~~~~~~~~
+
+The :class:`StrokeDash` encoding accepts the following options:
+
+.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray
+
+Row and Column
+~~~~~~~~~~~~~~
+
+The :class:`Row` and :class:`Column`, and :class:`Facet` encodings accept the following options:
+
+.. altair-object-table:: altair.RowColumnEncodingFieldDef
+
+Facet
+~~~~~
+
+The :class:`Facet` encoding accepts the following options:
+
+.. altair-object-table:: altair.FacetEncodingFieldDef
+
+Text
+~~~~
+
+The :class:`Text` encoding accepts the following options:
+
+.. altair-object-table:: altair.FieldOrDatumDefWithConditionStringFieldDefText
+
+Href, Tooltip, Url
+~~~~~~~~~~~~~~~~~~
+
+The :class:`Href`, :class:`Tooltip`, and :class:`Url` encodings accept the following options:
+
+.. altair-object-table:: altair.StringFieldDefWithCondition
+
+Detail
+~~~~~~
+
+The :class:`Detail` encoding accepts the following options:
+
+.. altair-object-table:: altair.FieldDefWithoutScale
+
+Latitude and Longitude
+~~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`Latitude` and :class:`Longitude` encodings accept the following options:
+
+.. altair-object-table:: altair.LatLongFieldDef
+
+Radius and Theta
+~~~~~~~~~~~~~~~~
+
+The :class:`Radius` and :class:`Theta` encodings accept the following options:
+
+.. altair-object-table:: altair.PositionFieldDefBase
+
+Latitude2, Longitude2, Radius2, Theta2, X2, Y2, XError, YError, XError2, and YError2
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The :class:`Latitude2`, :class:`Longitude2`, :class:`Radius2`, :class:`Theta2`, :class:`X2`, :class:`Y2`, :class:`XError`, :class:`YError`, :class:`XError2`, and :class:`YError2` encodings accept the following options:
+
+.. altair-object-table:: altair.SecondaryFieldDef
+
diff --git a/doc/user_guide/encodings/channels.rst b/doc/user_guide/encodings/channels.rst
new file mode 100644
index 0000000..9a056a2
--- /dev/null
+++ b/doc/user_guide/encodings/channels.rst
@@ -0,0 +1,193 @@
+.. currentmodule:: altair
+
+.. _user-guide-encoding-channels:
+
+Channels
+--------
+
+Altair provides a number of encoding channels that can be useful in different
+circumstances. The following sections summarize them:
+
+Position
+~~~~~~~~
+
+==========  ===================  =================================  ===================================
+Channel     Altair Class         Description                        Example
+==========  ===================  =================================  ===================================
+x           :class:`X`           The x-axis value                   :ref:`gallery_scatter_tooltips`
+y           :class:`Y`           The y-axis value                   :ref:`gallery_scatter_tooltips`
+x2          :class:`X2`          Second x value for ranges          :ref:`gallery_gantt_chart`
+y2          :class:`Y2`          Second y value for ranges          :ref:`gallery_candlestick_chart`
+longitude   :class:`Longitude`   Longitude for geo charts           :ref:`gallery_point_map`
+latitude    :class:`Latitude`    Latitude for geo charts            :ref:`gallery_point_map`
+longitude2  :class:`Longitude2`  Second longitude value for ranges  :ref:`gallery_airport_connections`
+latitude2   :class:`Latitude2`   Second latitude value for ranges   :ref:`gallery_airport_connections`
+xError      :class:`XError`      The x-axis error value             N/A
+yError      :class:`YError`      The y-axis error value             N/A
+xError2     :class:`XError2`     The second x-axis error value      N/A
+yError2     :class:`YError2`     The second y-axis error value      N/A
+xOffset     :class:`XOffset`     Offset to the x position           :ref:`gallery_grouped_bar_chart2`
+yOffset     :class:`YOffset`     Offset to the y position           :ref:`gallery_strip_plot_jitter`
+theta       :class:`Theta`       The start arc angle                :ref:`gallery_radial_chart`
+theta2      :class:`Theta2`      The end arc angle (radian)         :ref:`gallery_pacman_chart`
+==========  ===================  =================================  ===================================
+
+Mark Property
+~~~~~~~~~~~~~
+
+=============  ======================  ==============================  =========================================
+Channel        Altair Class            Description                     Example
+=============  ======================  ==============================  =========================================
+angle          :class:`Angle`          The angle of the mark           :ref:`gallery_wind_vector_map`
+color          :class:`Color`          The color of the mark           :ref:`gallery_simple_heatmap`
+fill           :class:`Fill`           The fill for the mark           :ref:`gallery_ridgeline_plot`
+fillopacity    :class:`FillOpacity`    The opacity of the mark's fill  N/A
+opacity        :class:`Opacity`        The opacity of the mark         :ref:`gallery_horizon_graph`
+radius         :class:`Radius`         The radius or the mark          :ref:`gallery_radial_chart`
+shape          :class:`Shape`          The shape of the mark           :ref:`gallery_us_incomebrackets_by_state_facet`
+size           :class:`Size`           The size of the mark            :ref:`gallery_table_bubble_plot_github`
+stroke         :class:`Stroke`         The stroke of the mark          N/A
+strokeDash     :class:`StrokeDash`     The stroke dash style           :ref:`gallery_multi_series_line`
+strokeOpacity  :class:`StrokeOpacity`  The opacity of the line         N/A
+strokeWidth    :class:`StrokeWidth`    The width of the line           N/A
+=============  ======================  ==============================  =========================================
+
+Text and Tooltip
+^^^^^^^^^^^^^^^^
+
+=======  ================  ========================  =========================================
+Channel  Altair Class      Description               Example
+=======  ================  ========================  =========================================
+text     :class:`Text`     Text to use for the mark  :ref:`gallery_scatter_with_labels`
+tooltip  :class:`Tooltip`  The tooltip value         :ref:`gallery_scatter_tooltips`
+=======  ================  ========================  =========================================
+
+.. _hyperlink-channel:
+
+Hyperlink
+~~~~~~~~~
+
+=======  ================  ========================  =========================================
+Channel  Altair Class      Description               Example
+=======  ================  ========================  =========================================
+href     :class:`Href`     Hyperlink for  points     :ref:`gallery_scatter_href`
+=======  ================  ========================  =========================================
+
+Detail
+~~~~~~
+
+Grouping data is an important operation in data visualization. For line and area marks,
+mapping an unaggregated data field to any
+non-position channel will group the lines and stacked areas by that field.
+For aggregated plots, all unaggregated fields encoded are used as grouping fields
+in the aggregation (similar to fields in ``GROUP BY`` in SQL).
+
+The ``detail`` channel specifies an additional grouping field (or fields) for grouping
+data without mapping the field(s) to any visual properties.
+
+=======  ================  ===============================  =========================================
+Channel  Altair Class      Description                      Example
+=======  ================  ===============================  =========================================
+detail   :class:`Detail`   Additional property to group by  :ref:`gallery_ranged_dot_plot`
+=======  ================  ===============================  =========================================
+
+For example here is a line chart showing stock prices of 5 tech companies over time.
+We map the ``symbol`` variable to ``detail`` to use them to group lines.
+
+.. altair-plot::
+    
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+    alt.Chart(source).mark_line().encode(
+        x="date:T",
+        y="price:Q",
+        detail="symbol:N"
+    )
+
+
+Order
+~~~~~
+
+The ``order`` option and :class:`Order` channel can sort how marks are drawn on the chart.
+
+For stacked marks, this controls the order of components of the stack. Here, the elements of each bar are sorted alphabetically by the name of the nominal data in the color channel.
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    barley = data.barley()
+
+    alt.Chart(barley).mark_bar().encode(
+        x='variety:N',
+        y='sum(yield):Q',
+        color='site:N',
+        order=alt.Order("site").sort("ascending")
+    )
+
+The order can be reversed by changing the sort option to `descending`.
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    barley = data.barley()
+
+    alt.Chart(barley).mark_bar().encode(
+        x='variety:N',
+        y='sum(yield):Q',
+        color='site:N',
+        order=alt.Order("site").sort("descending")
+    )
+
+The same approach works for other mark types, like stacked areas charts.
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    barley = data.barley()
+
+    alt.Chart(barley).mark_area().encode(
+        x='variety:N',
+        y='sum(yield):Q',
+        color='site:N',
+        order=alt.Order("site").sort("ascending")
+    )
+
+Note that unlike the ``sort`` parameter to positional encoding channels,
+the :class:`Order` channel cannot take a list of values to sort by
+and is not automatically sorted when an ordered pandas categorical column is passed.
+If we want to sort stacked segments in a custom order, we can `follow the approach in this issue comment <https://github.com/altair-viz/altair/issues/245#issuecomment-748443434>`_, although there might be edge cases where this is not fully supported. This workaround also makes the order of the segments align with the order that the colors shows up in a legend that uses custom sorting for the color domain.
+
+For line marks, the :class:`Order` channel encodes the order in which data points are connected. This can be useful for creating a scatter plot that draws lines between the dots using a different field than the x and y axes.
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    driving = data.driving()
+
+    alt.Chart(driving).mark_line(point=True).encode(
+        alt.X('miles').scale(zero=False),
+        alt.Y('gas').scale(zero=False),
+        order='year'
+    )
+
+Facet
+~~~~~
+For more information, see :ref:`facet-chart`.
+
+=======  ================  ===============================================  =============================================
+Channel  Altair Class      Description                                      Example
+=======  ================  ===============================================  =============================================
+column   :class:`Column`   The column of a faceted plot                     :ref:`gallery_trellis_scatter_plot`
+row      :class:`Row`      The row of a faceted plot                        :ref:`gallery_beckers_barley_trellis_plot`
+facet    :class:`Facet`    The row and/or column of a general faceted plot  :ref:`gallery_us_population_over_time_facet`
+=======  ================  ===============================================  =============================================
diff --git a/doc/user_guide/encoding.rst b/doc/user_guide/encodings/index.rst
similarity index 51%
rename from doc/user_guide/encoding.rst
rename to doc/user_guide/encodings/index.rst
index d3a94c0..4de8616 100644
--- a/doc/user_guide/encoding.rst
+++ b/doc/user_guide/encodings/index.rst
@@ -12,13 +12,15 @@ as an **encoding**, and is most often expressed through the :meth:`Chart.encode`
 method.
 
 For example, here we will visualize the cars dataset using four of the available
-encodings: ``x`` (the x-axis value), ``y`` (the y-axis value),
+**encoding channels** (see :ref:`user-guide-encoding-channels` for details): ``x`` (the x-axis value), ``y`` (the y-axis value),
 ``color`` (the color of the marker), and ``shape`` (the shape of the point marker):
 
 .. altair-plot::
 
    import altair as alt
    from vega_datasets import data
+
+
    cars = data.cars()
 
    alt.Chart(cars).mark_point().encode(
@@ -28,101 +30,83 @@ encodings: ``x`` (the x-axis value), ``y`` (the y-axis value),
        shape='Origin'
    )
 
-For data specified as a DataFrame, Altair can automatically determine the
-correct data type for each encoding, and creates appropriate scales and
-legends to represent the data.
+Channel Options
+~~~~~~~~~~~~~~~
+
+Each encoding channel accepts a number of **channel options** (see :ref:`user-guide-encoding-channel-options` for details) which can be used to further configure
+the chart.
+Altair 5.0 introduced a method-based syntax for setting channel options as a more convenient alternative to the traditional attribute-based syntax described in :ref:`attribute-based-attribute-setting` (but you can still use the attribute-based syntax if you prefer).
+
+.. note::
 
-.. _encoding-channels:
-
-Encoding Channels
-~~~~~~~~~~~~~~~~~
-
-Altair provides a number of encoding channels that can be useful in different
-circumstances; the following table summarizes them:
-
-Position Channels:
-
-==========  ===================  =================================  ===================================
-Channel     Altair Class         Description                        Example
-==========  ===================  =================================  ===================================
-x           :class:`X`           The x-axis value                   :ref:`gallery_scatter_tooltips`
-y           :class:`Y`           The y-axis value                   :ref:`gallery_scatter_tooltips`
-x2          :class:`X2`          Second x value for ranges          :ref:`gallery_gantt_chart`
-y2          :class:`Y2`          Second y value for ranges          :ref:`gallery_candlestick_chart`
-longitude   :class:`Longitude`   Longitude for geo charts           :ref:`gallery_airports`
-latitude    :class:`Latitude`    Latitude for geo charts            :ref:`gallery_airports`
-longitude2  :class:`Longitude2`  Second longitude value for ranges  :ref:`gallery_airport_connections`
-latitude2   :class:`Latitude2`   Second latitude value for ranges   :ref:`gallery_airport_connections`
-xError      :class:`XError`      The x-axis error value             N/A
-yError      :class:`YError`      The y-axis error value             N/A
-xError2     :class:`XError2`     The second x-axis error value      N/A
-yError2     :class:`YError2`     The second y-axis error value      N/A
-theta       :class:`Theta`       The start arc angle                :ref:`gallery_radial_chart`
-theta2      :class:`Theta2`      The end arc angle (radian)         :ref:`gallery_pacman_chart`
-==========  ===================  =================================  ===================================
-
-Mark Property Channels:
-
-=============  ======================  ==============================  =========================================
-Channel        Altair Class            Description                     Example
-=============  ======================  ==============================  =========================================
-angle          :class:`Angle`          The angle of the mark           :ref:`gallery_wind_vector_map`
-color          :class:`Color`          The color of the mark           :ref:`gallery_simple_heatmap`
-fill           :class:`Fill`           The fill for the mark           :ref:`gallery_ridgeline_plot`
-fillopacity    :class:`FillOpacity`    The opacity of the mark's fill  N/A
-opacity        :class:`Opacity`        The opacity of the mark         :ref:`gallery_horizon_graph`
-radius         :class:`Radius`         The radius or the mark          :ref:`gallery_radial_chart`
-shape          :class:`Shape`          The shape of the mark           :ref:`gallery_us_incomebrackets_by_state_facet`
-size           :class:`Size`           The size of the mark            :ref:`gallery_table_bubble_plot_github`
-stroke         :class:`Stroke`         The stroke of the mark          N/A
-strokeDash     :class:`StrokeDash`     The stroke dash style           :ref:`gallery_multi_series_line`
-strokeOpacity  :class:`StrokeOpacity`  The opacity of the line         N/A
-strokeWidth    :class:`StrokeWidth`    The width of the line           N/A
-=============  ======================  ==============================  =========================================
-
-Text and Tooltip Channels:
-
-=======  ================  ========================  =========================================
-Channel  Altair Class      Description               Example
-=======  ================  ========================  =========================================
-text     :class:`Text`     Text to use for the mark  :ref:`gallery_scatter_with_labels`
-key      :class:`Key`      --                        N/A
-tooltip  :class:`Tooltip`  The tooltip value         :ref:`gallery_scatter_tooltips`
-=======  ================  ========================  =========================================
-
-Hyperlink Channel:
-
-=======  ================  ========================  =========================================
-Channel  Altair Class      Description               Example
-=======  ================  ========================  =========================================
-href     :class:`Href`     Hyperlink for  points     :ref:`gallery_scatter_href`
-=======  ================  ========================  =========================================
-
-Level of Detail Channel:
-
-=======  ================  ===============================  =========================================
-Channel  Altair Class      Description                      Example
-=======  ================  ===============================  =========================================
-detail   :class:`Detail`   Additional property to group by  :ref:`gallery_ranged_dot_plot`
-=======  ================  ===============================  =========================================
-
-Order Channel:
-
-=======  ================  =============================  =====================================
-Channel  Altair Class      Description                    Example
-=======  ================  =============================  =====================================
-order    :class:`Order`    Sets the order of the marks    :ref:`gallery_connected_scatterplot`
-=======  ================  =============================  =====================================
-
-Facet Channels:
-
-=======  ================  ===============================================  =============================================
-Channel  Altair Class      Description                                      Example
-=======  ================  ===============================================  =============================================
-column   :class:`Column`   The column of a faceted plot                     :ref:`gallery_trellis_scatter_plot`
-row      :class:`Row`      The row of a faceted plot                        :ref:`gallery_beckers_barley_trellis_plot`
-facet    :class:`Facet`    The row and/or column of a general faceted plot  :ref:`gallery_us_population_over_time_facet`
-=======  ================  ===============================================  =============================================
+    With the release of Altair 5,
+    the documentation was updated to prefer the method-based syntax.
+    The gallery examples still include the attribute-based syntax
+    in addition to the method-based syntax.
+
+.. _method-based-attribute-setting:
+
+Method-Based Syntax
+^^^^^^^^^^^^^^^^^^^
+
+The method-based syntax replaces *keyword arguments* with *methods*.
+For example, an ``axis`` option of the ``x`` channel encoding would traditionally be set using the ``axis`` keyword argument: ``x=alt.X('Horsepower', axis=alt.Axis(tickMinStep=50))``. To define the same :class:`X` object using the method-based syntax, we can instead use the more succinct ``x=alt.X('Horsepower').axis(tickMinStep=50)``.
+
+The same technique works with all encoding channels and all channel options.  For example, notice how we make the analogous change with respect to the ``title`` option of the ``y`` channel. The following produces the same chart as the previous example.
+
+.. altair-plot::
+    alt.Chart(cars).mark_point().encode(
+        alt.X('Horsepower').axis(tickMinStep=50),
+        alt.Y('Miles_per_Gallon').title('Miles per Gallon'),
+        color='Origin',
+        shape='Origin'
+    )
+
+These option-setter methods can also be chained together, as in the following, in which we set the ``axis``, ``bin``, and ``scale`` options of the ``x`` channel by using the corresponding methods (``axis``, ``bin``, and ``scale``).  We can break the ``x`` definition over multiple lines to improve readability.  (This is valid syntax because of the enclosing parentheses from ``encode``.)
+
+.. altair-plot::
+    alt.Chart(cars).mark_point().encode(
+        alt.X('Horsepower')
+            .axis(ticks=False)
+            .bin(maxbins=10)
+            .scale(domain=(30,300), reverse=True),
+        alt.Y('Miles_per_Gallon').title('Miles per Gallon'),
+        color='Origin',
+        shape='Origin'
+    )
+
+
+.. _attribute-based-attribute-setting:
+
+Attribute-Based Syntax
+^^^^^^^^^^^^^^^^^^^^^^
+
+The two examples from the section above
+would look as follows with the traditional attribute-based syntax:
+
+.. altair-plot::
+    alt.Chart(cars).mark_point().encode(
+        alt.X('Horsepower', axis=alt.Axis(tickMinStep=50)),
+        alt.Y('Miles_per_Gallon', title="Miles per Gallon"),
+        color='Origin',
+        shape='Origin'
+    )
+
+For specs making extensive use of channel options,
+the attribute-based syntax can become quite verbose:
+
+.. altair-plot::
+    alt.Chart(cars).mark_point().encode(
+        alt.X(
+            'Horsepower',
+            axis=alt.Axis(ticks=False),
+            bin=alt.Bin(maxbins=10),
+            scale=alt.Scale(domain=(30,300), reverse=True)
+        ),
+        alt.Y('Miles_per_Gallon', title='Miles per Gallon'),
+        color='Origin',
+        shape='Origin'
+    )
 
 .. _encoding-data-types:
 
@@ -141,6 +125,10 @@ temporal      ``T``           a time or date value
 geojson       ``G``           a geographic shape
 ============  ==============  ================================================
 
+For data specified as a DataFrame, Altair can automatically determine the
+correct data type for each encoding, and creates appropriate scales and
+legends to represent the data.
+
 If types are not specified for data input as a DataFrame, Altair defaults to
 ``quantitative`` for any numeric data, ``temporal`` for date/time data, and
 ``nominal`` for string data, but be aware that these defaults are by no means
@@ -171,8 +159,7 @@ identical plots:
 The shorthand form, ``x="name:Q"``, is useful for its lack of boilerplate
 when doing quick data explorations. The long-form,
 ``alt.X('name', type='quantitative')``, is useful when doing more fine-tuned
-adjustments to the encoding, such as binning, axis and scale properties,
-or more.
+adjustments to the encoding using channel options such as binning, axis, and scale.
 
 Specifying the correct type for your data is important, as it affects the
 way Altair represents your encoding in the resulting plot.
@@ -219,7 +206,7 @@ that contains integers specifying a year:
     pop = data.population.url
 
     base = alt.Chart(pop).mark_bar().encode(
-        alt.Y('mean(people):Q', title='total population')
+        alt.Y('mean(people):Q').title('total population')
     ).properties(
         width=200,
         height=200
@@ -241,75 +228,77 @@ data: a visual encoding that is suitable for categorical data may not be
 suitable for quantitative data, and vice versa.
 
 
-.. _encoding-channel-options:
-
-Encoding Channel Options
-~~~~~~~~~~~~~~~~~~~~~~~~
-Each encoding channel allows for a number of additional options to be expressed;
-these can control things like axis properties, scale properties, headers and
-titles, binning parameters, aggregation, sorting, and many more.
-
-The particular options that are available vary by encoding type; the various
-options are listed below.
-
-
-The :class:`X` and :class:`Y` encodings accept the following options:
-
-.. altair-object-table:: altair.PositionFieldDef
-
-The :class:`Color`, :class:`Fill`, and :class:`Stroke`  encodings accept the following options:
-
-.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefGradientstringnull
-
-The :class:`Shape` encoding accepts the following options:
-
-.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefTypeForShapestringnull
-
-The :class:`Angle`, :class:`FillOpacity`, :class:`Opacity`, :class:`Size`, :class:`StrokeOpacity`,
-and :class:`StrokeWidth` encodings accept the following options:
-
-.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefnumber
-
-The :class:`Row` and :class:`Column`, and :class:`Facet` encodings accept the following options:
-
-.. altair-object-table:: altair.RowColumnEncodingFieldDef
-
-The :class:`Facet` encoding accepts the following options:
-
-.. altair-object-table:: altair.FacetEncodingFieldDef
-
-The :class:`Text` encoding accepts the following options:
-
-.. altair-object-table:: altair.FieldOrDatumDefWithConditionStringFieldDefText
-
-The :class:`Description`, :class:`Href`, :class:`Tooltip`, and :class:`Url` encodings accept the following options:
-
-.. altair-object-table:: altair.StringFieldDefWithCondition
-
-The :class:`Detail` and :class:`Key` encodings accept the following options:
-
-.. altair-object-table:: altair.FieldDefWithoutScale
+.. _shorthand-description:
 
-The :class:`Latitude` and :class:`Longitude` encodings accept the following options:
+Encoding Shorthands
+~~~~~~~~~~~~~~~~~~~
 
-.. altair-object-table:: altair.LatLongFieldDef
+For convenience, Altair allows the specification of the variable name along
+with the aggregate and type within a simple shorthand string syntax.
+This makes use of the type shorthand codes listed in :ref:`encoding-data-types`
+as well as the aggregate names listed in :ref:`encoding-aggregates`.
+The following table shows examples of the shorthand specification alongside
+the long-form equivalent:
 
-The :class:`Latitude2`, :class:`Longitude2`, :class:`Radius2`, :class:`Theta2`, :class:`X2`, :class:`Y2`, :class:`XError`, :class:`YError`,
-:class:`XError2`, and :class:`YError2` encodings accept the following options:
+===================  =======================================================
+Shorthand            Equivalent long-form
+===================  =======================================================
+``x='name'``         ``alt.X('name')``
+``x='name:Q'``       ``alt.X('name', type='quantitative')``
+``x='sum(name)'``    ``alt.X('name', aggregate='sum')``
+``x='sum(name):Q'``  ``alt.X('name', aggregate='sum', type='quantitative')``
+``x='count():Q'``    ``alt.X(aggregate='count', type='quantitative')``
+===================  =======================================================
 
-.. altair-object-table:: altair.SecondaryFieldDef
+Escaping special characters in column names
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Seeing that Altair uses ``:`` as a special character
+to indicate the encoding data type,
+you might wonder what happens
+when the column name in your data includes a colon.
+When this is the case
+you will need to either rename the column or escape the colon.
+This is also true for other special characters
+such as ``.`` and ``[]`` which are used to access nested attributes
+in some data structures.
+
+The recommended thing to do when you have special characters in a column name
+is to rename your columns.
+For example, in Pandas you could replace ``:`` with ``_``
+via ``df.rename(columns = lambda x: x.replace(':', '_'))``.
+If you don't want to rename your columns
+you will need to escape the special characters using a backslash:
 
-The :class:`Order` encoding accepts the following options:
+.. altair-plot::
 
-.. altair-object-table:: altair.OrderFieldDef
+    import pandas as pd
 
-The :class:`Radius` and :class:`Theta` encodings accept the following options:
+    source = pd.DataFrame({
+        'col:colon': [1, 2, 3],
+        'col.period': ['A', 'B', 'C'],
+        'col[brackets]': range(3),
+    })
 
-.. altair-object-table:: altair.PositionFieldDefBase
+    alt.Chart(source).mark_bar().encode(
+        x='col\:colon',
+        # Remove the backslash in the title
+        y=alt.Y('col\.period').title('col.period'),
+        # Specify the data type
+        color='col\[brackets\]:N',
+    )
 
-The :class:`StrokeDash` encoding accepts the following options:
+As can be seen above,
+indicating the data type is optional
+just as for columns without escaped characters.
+Note that the axes titles include the backslashes by default
+and you will need to manually set the title strings to remove them.
+If you are using the long form syntax for encodings,
+you do not need to escape colons as the type is explicit,
+e.g. ``alt.X(field='col:colon', type='quantitative')``
+(but periods and brackets still need to be escaped
+in the long form syntax unless they are used to index nested data structures).
 
-.. altair-object-table:: altair.FieldOrDatumDefWithConditionMarkPropFieldDefnumberArray
 
 .. _encoding-aggregates:
 
@@ -331,7 +320,7 @@ In Altair, such an operation looks like this:
 .. altair-plot::
 
    alt.Chart(cars).mark_bar().encode(
-       alt.X('Horsepower', bin=True),
+       alt.X('Horsepower').bin(),
        y='count()'
        # could also use alt.Y(aggregate='count', type='quantitative')
    )
@@ -348,8 +337,8 @@ a "Bubble Plot"):
 .. altair-plot::
 
    alt.Chart(cars).mark_point().encode(
-       alt.X('Horsepower', bin=True),
-       alt.Y('Miles_per_Gallon', bin=True),
+       alt.X('Horsepower').bin(),
+       alt.Y('Miles_per_Gallon').bin(),
        size='count()',
    )
 
@@ -360,20 +349,23 @@ represents the mean of a third quantity, such as acceleration:
 .. altair-plot::
 
    alt.Chart(cars).mark_circle().encode(
-       alt.X('Horsepower', bin=True),
-       alt.Y('Miles_per_Gallon', bin=True),
+       alt.X('Horsepower').bin(),
+       alt.Y('Miles_per_Gallon').bin(),
        size='count()',
-       color='average(Acceleration):Q'
+       color='mean(Acceleration):Q'
    )
 
-In addition to ``count`` and ``average``, there are a large number of available
-aggregation functions built into Altair; they are listed in the following table:
+Aggregation Functions
+^^^^^^^^^^^^^^^^^^^^^
+
+In addition to ``count`` and ``mean``, there are a large number of available
+aggregation functions built into Altair:
 
 =========  ===========================================================================  =====================================
 Aggregate  Description                                                                  Example
 =========  ===========================================================================  =====================================
 argmin     An input data object containing the minimum field value.                     N/A
-argmax     An input data object containing the maximum field value.                     N/A
+argmax     An input data object containing the maximum field value.                     :ref:`gallery_line_chart_with_custom_legend`
 average    The mean (average) field value. Identical to mean.                           :ref:`gallery_layer_line_color_rule`
 count      The total count of data objects in the group.                                :ref:`gallery_simple_heatmap`
 distinct   The count of distinct field values.                                          N/A
@@ -391,121 +383,32 @@ stdev      The sample standard deviation of field values.
 stdevp     The population standard deviation of field values.                           N/A
 sum        The sum of field values.                                                     :ref:`gallery_streamgraph`
 valid      The count of field values that are not null or undefined.                    N/A
-values     ??                                                                           N/A
+values     A list of data objects in the group.                                         N/A
 variance   The sample variance of field values.                                         N/A
 variancep  The population variance of field values.                                     N/A
 =========  ===========================================================================  =====================================
 
 
-.. _shorthand-description:
-
-Encoding Shorthands
-~~~~~~~~~~~~~~~~~~~
-
-For convenience, Altair allows the specification of the variable name along
-with the aggregate and type within a simple shorthand string syntax.
-This makes use of the type shorthand codes listed in :ref:`encoding-data-types`
-as well as the aggregate names listed in :ref:`encoding-aggregates`.
-The following table shows examples of the shorthand specification alongside
-the long-form equivalent:
-
-===================  =======================================================
-Shorthand            Equivalent long-form
-===================  =======================================================
-``x='name'``         ``alt.X('name')``
-``x='name:Q'``       ``alt.X('name', type='quantitative')``
-``x='sum(name)'``    ``alt.X('name', aggregate='sum')``
-``x='sum(name):Q'``  ``alt.X('name', aggregate='sum', type='quantitative')``
-``x='count():Q'``    ``alt.X(aggregate='count', type='quantitative')``
-===================  =======================================================
-
-
-.. _ordering-channels:
+Sort Option
+~~~~~~~~~~~
 
-Ordering marks
-~~~~~~~~~~~~~~
-
-The `order` option and :class:`Order` channel can sort how marks are drawn on the chart.
-
-For stacked marks, this controls the order of components of the stack. Here, the elements of each bar are sorted alphabetically by the name of the nominal data in the color channel.
-
-.. altair-plot::
-
-    import altair as alt
-    from vega_datasets import data
-
-    barley = data.barley()
-
-    alt.Chart(barley).mark_bar().encode(
-        x='variety:N',
-        y='sum(yield):Q',
-        color='site:N',
-        order=alt.Order("site", sort="ascending")
-    )
-
-The order can be reversed by changing the sort option to `descending`.
-
-.. altair-plot::
-
-    import altair as alt
-    from vega_datasets import data
-
-    barley = data.barley()
-
-    alt.Chart(barley).mark_bar().encode(
-        x='variety:N',
-        y='sum(yield):Q',
-        color='site:N',
-        order=alt.Order("site", sort="descending")
-    )
-
-The same approach works for other mark types, like stacked areas charts.
-
-.. altair-plot::
-
-    import altair as alt
-    from vega_datasets import data
-
-    barley = data.barley()
-
-    alt.Chart(barley).mark_area().encode(
-        x='variety:N',
-        y='sum(yield):Q',
-        color='site:N',
-        order=alt.Order("site", sort="ascending")
-    )
-
-For line marks, the `order` channel encodes the order in which data points are connected. This can be useful for creating a scatterplot that draws lines between the dots using a different field than the x and y axes.
-
-.. altair-plot::
-
-    import altair as alt
-    from vega_datasets import data
-
-    driving = data.driving()
-
-    alt.Chart(driving).mark_line(point=True).encode(
-        alt.X('miles', scale=alt.Scale(zero=False)),
-        alt.Y('gas', scale=alt.Scale(zero=False)),
-        order='year'
-    )
-
-Sorting
-~~~~~~~
-
-Specific channels can take a  :class:`sort` property which determines the
-order of the scale being used for the channel. There are a number of different
-sort options available:
+Some channels accept a  :class:`sort` option which determines the
+order of the scale being used for the channel.
+By default the scale is sorted in ascending alphabetical order,
+unless an `ordered pandas categorical column <https://pandas.pydata.org/docs/user_guide/categorical.html?highlight=categorical#sorting-and-order>`_ is passed (without an explicit type specification)
+in which case Altair will use the column's inherent order to sort the scale.
+There are a number of different
+options available to change the sort order:
 
 - ``sort='ascending'`` (Default) will sort the field's value in ascending order.
-  for string data, this uses standard alphabetical order.
+  For string data, this uses standard alphabetical order.
 - ``sort='descending'`` will sort the field's value in descending order
-- passing the name of an encoding channel to ``sort``, such as ``"x"`` or ``"y"``, allows for 
-  sorting by that channel. An optional minus prefix can be used for a descending 
+- Passing the name of an encoding channel to ``sort``, such as ``"x"`` or ``"y"``, allows for
+  sorting by that channel. An optional minus prefix can be used for a descending
   sort. For example ``sort='-x'`` would sort by the x channel in descending order.
-- passing a list to ``sort`` allows you to explicitly set the order in which
+- Passing a list to ``sort`` allows you to explicitly set the order in which
   you would like the encoding to appear
-- passing a :class:`EncodingSortField` class to ``sort`` allows you to sort
+- Passing a :class:`EncodingSortField` class to ``sort`` allows you to sort
   an axis by the value of some other field in the dataset.
 
 Here is an example of applying these five different sort approaches on the
@@ -520,57 +423,58 @@ x-axis, using the barley dataset:
 
     base = alt.Chart(barley).mark_bar().encode(
         y='mean(yield):Q',
-        color=alt.Color('mean(yield):Q', legend=None)
+        color=alt.Color('mean(yield):Q').legend(None)
     ).properties(width=100, height=100)
 
     # Sort x in ascending order
     ascending = base.encode(
-        alt.X(field='site', type='nominal', sort='ascending')
+        alt.X('site:N').sort('ascending')
     ).properties(
         title='Ascending'
     )
 
     # Sort x in descending order
     descending = base.encode(
-        alt.X(field='site', type='nominal', sort='descending')
+        alt.X('site:N').sort('descending')
     ).properties(
         title='Descending'
     )
 
     # Sort x in an explicitly-specified order
     explicit = base.encode(
-        alt.X(field='site', type='nominal',
-              sort=['Duluth', 'Grand Rapids', 'Morris',
-                    'University Farm', 'Waseca', 'Crookston'])
+        alt.X('site:N').sort(
+            ['Duluth', 'Grand Rapids', 'Morris', 'University Farm', 'Waseca', 'Crookston']
+        )
     ).properties(
         title='Explicit'
     )
 
     # Sort according to encoding channel
     sortchannel = base.encode(
-        alt.X(field='site', type='nominal',
-              sort='y')
+        alt.X('site:N').sort('y')
     ).properties(
         title='By Channel'
     )
 
     # Sort according to another field
     sortfield = base.encode(
-        alt.X(field='site', type='nominal',
-              sort=alt.EncodingSortField(field='yield', op='mean'))
+        alt.X('site:N').sort(field='yield', op='mean')
     ).properties(
         title='By Yield'
     )
 
     alt.concat(
-        ascending, descending, explicit,
-        sortchannel, sortfield,
+        ascending,
+        descending,
+        explicit,
+        sortchannel,
+        sortfield,
         columns=3
     )
 
-The last two charts are the same because the default aggregation 
-(see :ref:`encoding-aggregates`) is ``mean``. To highlight the 
-difference between sorting via channel and sorting via field consider the 
+The last two charts are the same because the default aggregation
+(see :ref:`encoding-aggregates`) is ``mean``. To highlight the
+difference between sorting via channel and sorting via field consider the
 following example where we don't aggregate the data:
 
 .. altair-plot::
@@ -582,25 +486,23 @@ following example where we don't aggregate the data:
     base = alt.Chart(barley).mark_point().encode(
         y='yield:Q',
     ).properties(width=200)
-    
+
     # Sort according to encoding channel
     sortchannel = base.encode(
-        alt.X(field='site', type='nominal',
-              sort='y')
+        alt.X('site:N').sort('y')
     ).properties(
         title='By Channel'
     )
 
     # Sort according to another field
     sortfield = base.encode(
-        alt.X(field='site', type='nominal',
-              sort=alt.EncodingSortField(field='yield', op='min'))
+        alt.X('site:N').sort(field='yield', op='max')
     ).properties(
         title='By Min Yield'
     )
     sortchannel | sortfield
 
-By passing a :class:`EncodingSortField` class to ``sort`` we have more control over 
+By passing a :class:`EncodingSortField` class to ``sort`` we have more control over
 the sorting process.
 
 
@@ -614,13 +516,124 @@ While the above examples show sorting of axes by specifying ``sort`` in the
 .. altair-plot::
 
     alt.Chart(barley).mark_rect().encode(
-        alt.X('mean(yield):Q', sort='ascending'),
-        alt.Y('site:N', sort='descending'),
-        alt.Color('site:N',
-            sort=['Morris', 'Duluth', 'Grand Rapids',
-                  'University Farm', 'Waseca', 'Crookston']
-        )
+        alt.X('mean(yield):Q').sort('ascending'),
+        alt.Y('site:N').sort('descending'),
+        alt.Color('site:N').sort([
+            'Morris', 'Duluth', 'Grand Rapids', 'University Farm', 'Waseca', 'Crookston'
+        ])
     )
 
 Here the y-axis is sorted reverse-alphabetically, while the color legend is
 sorted in the specified order, beginning with ``'Morris'``.
+
+Datum and Value
+~~~~~~~~~~~~~~~
+
+So far we always mapped an encoding channel to a column in our dataset. However, sometimes
+it is also useful to map to a single constant value. In Altair, you can do this with
+
+* ``datum``, which encodes a constant domain value via a scale using the same units as the underlying data
+* ``value``, which encodes a constant visual value, using absolute units such as an exact position in pixels, the name or RGB value of a color, the name of shape,  etc
+
+``datum`` is particularly useful for annotating a specific data value. 
+For example, you can use it with a rule mark to highlight a 
+threshold value (e.g., 300 dollars stock price).
+
+.. altair-plot::
+    
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+    base = alt.Chart(source)
+    lines = base.mark_line().encode(
+        x="date:T",
+        y="price:Q",
+        color="symbol:N"
+    )
+    rule = base.mark_rule(strokeDash=[2, 2]).encode(
+        y=alt.datum(300)
+    )
+
+    lines + rule
+
+If we instead used ``alt.value`` in this example, we would position the rule 300 pixels from the top of the chart border rather than at the 300 dollars position. Since the default charts height is 300 pixels, this will show the dotted line just on top of the x-axis -line:
+
+.. altair-plot::
+
+    rule = base.mark_rule(strokeDash=[2, 2]).encode(
+        y=alt.value(300)
+    )
+
+    lines + rule
+
+If we want to use ``datum``  to highlight a certain year on the x-axis,
+we can't simply type in the year as an integer,
+but instead need to use ``datum`` together with :class:`DateTime`.
+Here we also set the color for the rule to the same one as the line for the symbol ``MSFT``
+with ``alt.datum("MSFT")``.
+
+.. altair-plot::
+    
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+    base = alt.Chart(source)
+    lines = base.mark_line().encode(
+        x="date:T",
+        y="price:Q",
+        color="symbol:N"
+    )
+    rule = base.mark_rule(strokeDash=[2, 2]).encode(
+        x=alt.datum(alt.DateTime(year=2006)),
+        color=alt.datum("MSFT")
+    )
+
+    lines + rule
+
+
+Similar to when mapping to a data column, when using ``datum`` different encoding channels 
+may support ``band``, ``scale``, ``axis``, ``legend``, ``format``, or ``condition`` properties.
+However, data transforms (e.g. ``aggregate``, ``bin``, ``timeUnit``, ``sort``) cannot be applied.
+
+Expanding on the example above, if you would want to color the ``rule`` mark regardless of 
+the color scale used for the lines, you can use ``value``, e.g. ``alt.value("red")``:
+
+.. altair-plot::
+    
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+    base = alt.Chart(source)
+    lines = base.mark_line().encode(
+        x="date:T",
+        y="price:Q",
+        color="symbol:N"
+    )
+    rule = base.mark_rule(strokeDash=[2, 2]).encode(
+        x=alt.datum(alt.DateTime(year=2006)),
+        color=alt.value("red")
+    )
+
+    lines + rule
+
+One caution is that ``alt.datum`` and ``alt.value`` do not possess the (newly introduced as of Altair 5.0) method-based syntax to set channel options described in :ref:`method-based-attribute-setting`. For example, if you are using ``alt.datum`` for the ``y`` channel encoding and you wish to use an option setter method (e.g., ``scale``), then you can use :class:`YDatum` instead.  Here is a simple example.
+
+.. altair-plot::
+    
+    import altair as alt
+
+    alt.Chart().mark_bar().encode(
+        y=alt.YDatum(220).scale(domain=(0,500)),
+        color=alt.value("darkkhaki")
+    )
+
+If you were to instead use ``y=alt.datum(220).scale(domain=(0,500))``, an ``AttributeError`` would be raised, due to the fact that ``alt.datum(220)`` simply returns a Python dictionary and does not possess a ``scale`` attribute.  If you insisted on producing the preceding example using ``alt.datum``, one option would be to use ``y=alt.datum(220, scale={"domain": (0,500)})``.  Nevertheless, the ``alt.YDatum`` approach is strongly preferred to this "by-hand" approach of supplying a dictionary to ``scale``.  As one benefit, tab-completions are available using the ``alt.YDatum`` approach.  For example, typing ``alt.YDatum(220).scale(do`` and hitting ``tab`` in an environment such as JupyterLab will offer ``domain``, ``domainMax``, ``domainMid``, and ``domainMin`` as possible completions.
+
+.. toctree::
+   :hidden:
+
+   channels
+   channel_options
diff --git a/doc/user_guide/faq.rst b/doc/user_guide/faq.rst
deleted file mode 100644
index 4b52ce8..0000000
--- a/doc/user_guide/faq.rst
+++ /dev/null
@@ -1,212 +0,0 @@
-.. currentmodule:: altair
-
-.. _frequently-asked-questions:
-
-Frequently Asked Questions
-==========================
-
-.. _faq-other-ides:
-
-Does Altair work with IPython Terminal/PyCharm/Spyder/<my favorite IDE>
------------------------------------------------------------------------
-Altair can be used to create chart specifications with any frontend that
-executes Python code, but in order to *render* those charts requires connecting
-altair to an environment capable of executing the javascript code that
-turns the JSON specification into a visual chart.
-
-There are extensions included in JupyterLab, Jupyter Notebook, Colab,
-Kaggle kernels, VSCode, Hydrogen, and nteract that know how to automatically
-perform this rendering (see :ref:`installation` for details).
-
-For other frontends that don't have vega-lite rendering built-in, it is
-possible to work with Altair charts using the build-in :meth:`Chart.show`
-or :meth:`Chart.save` methods.
-For more information on these, see :ref:`display-general`.
-
-.. _faq-no-display:
-
-I tried to make a plot but it doesn't show up
----------------------------------------------
-There are two basic reasons that a chart might not show up:
-
-1. You have not installed and/or enabled the appropriate renderer for your
-   frontend, which means charts cannot be displayed.
-2. You have inadvertently created an invalid chart, and there is a javascript
-   error preventing it from being displayed.
-
-For details on how to trouble-shoot these kinds of display issues on various
-front-ends, see :ref:`display-troubleshooting`.
-
-.. _altair-faq-large-notebook:
-
-Why does Altair lead to such extremely large notebooks?
--------------------------------------------------------
-By design, Altair does not produce plots consisting of pixels, but plots
-consisting of data plus a visualization specification. As discussed in
-:ref:`user-guide-data`, this data can be specified in one of several ways,
-either via a pandas DataFrame, a file or URL, or a JSON data object.
-When you specify the data as a pandas DataFrame, this data is converted to
-JSON and included in its entirety in the plot spec.
-
-For example, here is a simple chart made from a dataframe with three rows
-of data:
-
-.. altair-plot::
-    :output: none
-
-    import altair as alt
-    import pandas as pd
-    data = pd.DataFrame({'x': [1, 2, 3], 'y': [2, 1, 2]})
-
-    chart = alt.Chart(data).mark_line().encode(
-         x='x',
-         y='y'
-    )
-
-    from pprint import pprint
-    pprint(chart.to_dict())
-
-.. code-block:: none
-
-    {'$schema': 'https://vega.github.io/schema/vega-lite/v2.4.1.json',
-     'config': {'view': {'height': 300, 'width': 400}},
-     'data': {'values': [{'x': 1, 'y': 2}, {'x': 2, 'y': 1}, {'x': 3, 'y': 2}]},
-     'encoding': {'x': {'field': 'x', 'type': 'quantitative'},
-                  'y': {'field': 'y', 'type': 'quantitative'}},
-     'mark': 'line'}
-
-The resulting specification includes a representation of the data converted
-to JSON format, and this specification is embedded in the notebook or web page
-where it can be used by Vega-Lite to render the plot.
-As the size of the data grows, this explicit data storage can lead to some
-very large specifications, and by extension, some very large notebooks or
-web pages.
-
-The best way around this is to store the data in an external file, and
-pass it to the chart by URL. You can do this manually if you wish:
-
-.. altair-plot::
-   :output: none
-
-   url = 'data.json'
-   data.to_json(url, orient='records')
-
-   chart = alt.Chart(url).mark_line().encode(
-       x='x:Q',
-       y='y:Q'
-   )
-   pprint(chart.to_dict())
-
-
-.. code-block:: none
-
-    {'$schema': 'https://vega.github.io/schema/vega-lite/v2.4.1.json',
-     'config': {'view': {'height': 300, 'width': 400}},
-     'data': {'url': 'data.json'},
-     'encoding': {'x': {'field': 'x', 'type': 'quantitative'},
-                  'y': {'field': 'y', 'type': 'quantitative'}},
-     'mark': 'line'}
-
-For other strategies for effectively working with large datasets in Altair, see
-:ref:`altair-faq-max-rows`
-
-With this type of approach, the data is now stored as an external file
-rather than being embedded in the notebook,
-leading to much more compact plot specifications.
-The disadvantage, of course, is a loss of portability: if the notebook is
-ever moved, the data file must accompany it or the plot may not display.
-
-
-.. _altair-faq-max-rows:
-
-MaxRowsError: How can I plot Large Datasets?
---------------------------------------------
-If you try to create a plot that will directly embed a dataset with more than
-5000 rows, you will see a ``MaxRowsError``:
-
-.. altair-plot::
-   :output: none
-
-   data = pd.DataFrame({'x': range(10000)})
-   alt.Chart(data).mark_line()
-
-.. code-block:: none
-
-    MaxRowsError: The number of rows in your dataset is greater than the maximum
-                  allowed (5000). For information on how to plot larger datasets
-                  in Altair, see the documentation.
-
-This is not because Altair cannot handle larger datasets, but it is because it
-is important for the user to think carefully about how large datasets are handled.
-As noted above in :ref:`altair-faq-large-notebook`, it is quite easy to end up with
-very large notebooks if you make many visualizations of a large dataset, and this
-error is a way of preventing that.
-
-You can get around it in a few ways:
-
-Disabling MaxRowsError
-~~~~~~~~~~~~~~~~~~~~~~
-If you are certain you would like to embed your dataset within the visualization
-specification, you can disable the ``MaxRows`` check with the following::
-
-    alt.data_transformers.disable_max_rows()
-
-If you choose this route, please be careful: if you are making multiple plots
-with the dataset in a particular notebook, the notebook will grow very large
-and performance may suffer.
-
-Passing Data by URL
-~~~~~~~~~~~~~~~~~~~
-A better solution when working with large datasets is to not embed the data
-in the notebook, but rather store it separately and pass it to the chart by URL.
-This not only addresses the issue of large notebooks, but also leads to better
-interactivity performance with large datasets.
-
-Vega Datasets
-^^^^^^^^^^^^^
-If you are working with one of the vega datasets, you can pass the data by URL
-using the ``url`` attribute:
-
-.. code-block:: python
-
-   from vega_datasets import data
-   source = data.cars.url
-
-   alt.Chart(source).mark_point() # etc.
-
-Local Filesystem
-^^^^^^^^^^^^^^^^
-You may also save data to a local filesystem and reference the data by
-file path. Altair has a ``JSON`` data transformer that will do this
-transparently when enabled::
-
-    alt.data_transformers.enable('json')
-
-With this data transformer enabled, each time you make a plot the data will be
-serialized to disk and referenced by URL, rather than being embedded in the
-notebook output.
-You may also manually save the data to file and reference it that way
-(see :ref:`altair-faq-large-notebook`).
-
-There is a similar CSV data transformer, but it must be used more carefully
-because CSV does not preserve data types as JSON does.
-
-Note that the filesystem approach may not work on some cloud-based Jupyter
-notebook services.
-
-Local Data Server
-^^^^^^^^^^^^^^^^^
-It is also possible to serve your data from a local threaded server to avoid writing
-datasets to disk. The `altair_data_server <https://github.com/altair-viz/altair_data_server>`_
-package makes this easy. First install the package:
-
-.. code-block:: none
-
-   pip install altair_data_server
-
-And then enable the data transformer::
-
-    import altair as alt
-    alt.data_transformers.enable('data_server')
-
-Note that this approach may not work on some cloud-based Jupyter notebook services.
diff --git a/doc/user_guide/importing.rst b/doc/user_guide/importing.rst
deleted file mode 100644
index beaa3ba..0000000
--- a/doc/user_guide/importing.rst
+++ /dev/null
@@ -1,36 +0,0 @@
-.. _importing:
-
-Importing Vega & Vega-Lite Versions
-===================================
-
-The main Altair API is based on version 2.X of `Vega-Lite`_. The core of the API,
-found in the ``altair.vegalite.v2.schema`` module, is programmatically generated
-from the Vega-Lite schema.
-
-Altair additionally provides wrappers for several other schemas:
-
-- Vega-Lite 1.X in ``altair.vegalite.v1``
-- Vega 2.X in ``altair.vega.v2``
-- Vega 3.X in ``altair.vega.v3``
-
-So, for example, if you would like to create Altair plots targeting Vega-Lite
-version 1, you can use::
-
-    import altair.vegalite.v1 as alt
-
-and then proceed to use the Altair version 1 API.
-
-.. note::
-
-  We strongly recommend all users transition to Vega-Lite 4.x and Vega 5.x.
-  These versions support many new features, are more stable, and Altair 4
-  works best with them.
-
-Because Altair has focused primarily on the vega-lite API, the vega wrappers are
-far less developed than the vega-lite wrappers, though it is possible to
-create Vega plots using a very low-level Python interface that mirrors the
-schema itself.
-
-
-.. _Vega-Lite: http://vega.github.io/vega-lite/
-.. _Vega: http://vega.github.io/vega/
diff --git a/doc/user_guide/interactions.rst b/doc/user_guide/interactions.rst
index eecff9c..e36fede 100644
--- a/doc/user_guide/interactions.rst
+++ b/doc/user_guide/interactions.rst
@@ -2,33 +2,125 @@
 
 .. _user-guide-interactions:
 
-Bindings, Selections, Conditions: Making Charts Interactive
-===========================================================
+Interactive Charts
+==================
 
 One of the unique features of Altair, inherited from Vega-Lite, is a
-declarative grammar of not just visualization, but *interaction*. There are three
-core concepts of this grammar:
+declarative grammar of not just visualization, but also *interaction*.
+This is both convenient and powerful,
+as we will see in this section.
+There are three core concepts of this grammar:
 
-- the :func:`selection` object which captures interactions from the mouse or through other inputs to effect the chart. Inputs can either be events like mouse clicks or drags. Inputs can also be elements like a drop-down, radio button or slider. Selections can be used alone but if you want to change any element of your chart you will need to connect them to a *condition*. 
-- the :func:`condition` function takes the selection input and changes an element of the chart based on that input. 
-- the ``bind`` property of a selection which establishes a two-way binding between the selection and an input element of your chart. 
+- Parameters are the basic building blocks in the grammar of interaction.
+  They can either be simple variables or more complex selections
+  that map user input (e.g., mouse clicks and drags) to data queries.
+- Conditions and filters can respond to changes in parameter values
+  and update chart elements based on that input.
+- Widgets and other chart input elements can bind to parameters
+  so that charts can be manipulated via drop-down menus, radio buttons, sliders, legends, etc.
 
-Interactive charts can use one or more of these elements to create rich interactivity between the viewer and the data. 
+Parameters
+~~~~~~~~~~
 
+Parameters are the building blocks of interaction in Altair.
+There are two types of parameters: *variables* and *selections*. We introduce these concepts through a series of examples.
 
-Selections: Building Blocks of Interactions
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. note::
 
+   This material was changed considerably with the release of Altair 5.
 
-Selections in Altair come in a few flavors, and they can be *bound* to
-particular charts or sub-charts in your visualization, then referenced
-in other parts of the visualization.
+.. _basic variable:
 
-Example: Linked-Brush Scatter-Plot
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Variables: Reusing Values
+^^^^^^^^^^^^^^^^^^^^^^^^^
 
-As a motivation, let's create a simple chart and then add some selections
-to it. Here is a simple scatter-plot created from the ``cars`` dataset:
+Variable parameters allow for a value to be defined once
+and then reused throughout the rest of the chart.
+Here is a simple scatter-plot created from the ``cars`` dataset:
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    cars = data.cars.url
+
+    alt.Chart(cars).mark_circle().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N'
+    )
+
+Variable parameters are created using the :func:`param` function.
+Here,
+we create a parameter with a default value of 0.1 using the ``value`` property:
+
+.. altair-plot::
+    :output: none
+
+    op_var = alt.param(value=0.1)
+
+In order to use this variable in the chart specification, we explicitly add it to the chart using the :meth:`add_params` method, and we can then reference the variable within the chart specification.  Here we set the opacity using our ``op_var`` parameter.
+
+.. altair-plot::
+
+    op_var = alt.param(value=0.1)
+
+    alt.Chart(cars).mark_circle(opacity=op_var).encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N'
+    ).add_params(
+        op_var
+    )
+
+It's reasonable to ask whether all this effort is necessary. Here is a more natural way to accomplish the same thing that avoids the use of both :func:`param` and ``add_params``.
+
+.. altair-plot::
+
+    op_var2 = 0.1
+
+    alt.Chart(cars).mark_circle(opacity=op_var2).encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N'
+    )
+
+The benefit of using :func:`param` doesn't become apparent until we incorporate an additional component. In the following example we use the ``bind`` property of the parameter, so that the parameter becomes bound to an input element. In this example, that input element is a slider widget.
+
+.. altair-plot::
+
+    slider = alt.binding_range(min=0, max=1, step=0.05, name='opacity:')
+    op_var = alt.param(value=0.1, bind=slider)
+
+    alt.Chart(cars).mark_circle(opacity=op_var).encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N'
+    ).add_params(
+        op_var
+    )
+
+Now we can dynamically change the opacity of the points in our chart using the slider. You will learn much more about binding parameters to input elements such as widgets in the section :ref:`binding-parameters`.
+
+.. note::
+
+    A noteworthy aspect of Altair's interactivity is that these effects are controlled entirely within the web browser. This means that you can save charts as HTML files and share them with your colleagues who can access the interactivity via their browser without the need to install Python.
+
+Selections: Capturing Chart Interactions
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Selection parameters define data queries
+that are driven by interactive manipulation of the chart
+by the user (e.g., via mouse clicks or drags).
+There are two types of selections:
+:func:`selection_interval` and :func:`selection_point`.
+
+Here we will create a simple chart and then add an selection interval to it.
+We could create a selection interval via ``param(select="interval")``,
+but it is more convenient to use the shorter ``selection_interval``.
+
+Here is a simple scatter-plot created from the ``cars`` dataset:
 
 .. altair-plot::
 
@@ -38,41 +130,48 @@ to it. Here is a simple scatter-plot created from the ``cars`` dataset:
     cars = data.cars.url
 
     alt.Chart(cars).mark_point().encode(
-        x='Miles_per_Gallon:Q',
-        y='Horsepower:Q',
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
         color='Origin:N'
     )
 
 First we'll create an interval selection using the :func:`selection_interval`
-function:
+function (an interval selection is also referred to as a "brush"):
 
 .. altair-plot::
     :output: none
 
-    brush = alt.selection_interval()  # selection of type "interval"
+    brush = alt.selection_interval()
 
-We can now bind this brush to our chart by setting the ``selection``
-property:
+We can now add this selection interval to our chart via ``add_params``:
 
 .. altair-plot::
 
     alt.Chart(cars).mark_point().encode(
-        x='Miles_per_Gallon:Q',
-        y='Horsepower:Q',
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
         color='Origin:N'
-    ).add_selection(
+    ).add_params(
         brush
     )
 
 The result above is a chart that allows you to click and drag to create
 a selection region, and to move this region once the region is created.
 
-Conditions: Making the chart respond
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+So far this example is very similar to what we did in the :ref:`variable example <basic variable>`:
+we created a selection parameter using ``brush = alt.selection_interval()``,
+and we attached that parameter to the chart using ``add_params``.
+One difference is that here we have not defined how the chart should respond to the selection; you will learn this in the next section.
 
-This is neat, but the selection doesn't actually *do* anything yet.
-To use this selection, we need to reference it in some way within
-the chart. Here, we will use the :func:`condition` function to create
+Conditions & Filters
+~~~~~~~~~~~~~~~~~~~~
+
+Conditional Encodings
+^^^^^^^^^^^^^^^^^^^^^
+
+The example above is neat, but the selection interval doesn't actually *do* anything yet.
+To make the chart respond to this selection, we need to reference the selection in within
+the chart specification. Here, we will use the :func:`condition` function to create
 a conditional color encoding: we'll tie the color to the ``"Origin"``
 column for points in the selection, and set the color to ``"lightgray"``
 for points outside the selection:
@@ -80,36 +179,44 @@ for points outside the selection:
 .. altair-plot::
 
     alt.Chart(cars).mark_point().encode(
-        x='Miles_per_Gallon:Q',
-        y='Horsepower:Q',
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
         color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
-    ).add_selection(
+    ).add_params(
         brush
     )
 
-As you can see, with this simple change, the color of the points responds
-to the selection.
+As you can see, the color of the points now changes depending on whether they are inside or outside the selection.
+Above we are using the selection parameter ``brush`` as a *predicate*
+(something that evaluates as `True` or `False`).
+This is controlled by the line ``color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))``.
+Data points which fall within the selection evaluate as ``True``,
+and data points which fall outside the selection evaluate to ``False``.
+The ``'Origin:N'`` specifies how to color the points which fall within the selection,
+and the ``alt.value('lightgray')`` specifies that the outside points should be given a constant color value;
+you can remember this as ``alt.condition(<condition>, <if_true>, <if_false>)``.
 
 This approach becomes even more powerful when the selection behavior is
 tied across multiple views of the data within a compound chart.
 For example, here we create a ``chart`` object using the same code as
 above, and horizontally concatenate two versions of this chart: one
-with the x-encoding tied to ``"Acceleration"``, and one with the x-encoding
-tied to ``"Miles_per_Gallon"``
+with the x-encoding tied to ``"Horsepower"``, and one with the x-encoding
+tied to ``"Acceleration"``
 
 .. altair-plot::
 
     chart = alt.Chart(cars).mark_point().encode(
-        y='Horsepower:Q',
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
         color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
     ).properties(
         width=250,
         height=250
-    ).add_selection(
+    ).add_params(
         brush
     )
 
-    chart.encode(x='Acceleration:Q') | chart.encode(x='Miles_per_Gallon:Q')
+    chart | chart.encode(x='Acceleration:Q')
 
 Because both copies of the chart reference the same selection object, the
 renderer ties the selections together across panels, leading to a dynamic
@@ -126,22 +233,64 @@ We can modify the brush definition, and leave the rest of the code unchanged:
     brush = alt.selection_interval(encodings=['x'])
 
     chart = alt.Chart(cars).mark_point().encode(
-        y='Horsepower:Q',
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
         color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
     ).properties(
         width=250,
         height=250
-    ).add_selection(
+    ).add_params(
+        brush
+    )
+
+    chart | chart.encode(x='Acceleration:Q')
+
+Filtering Data
+^^^^^^^^^^^^^^
+
+Using a selection parameter to filter data works in much the same way
+as using it within ``condition``,
+For example, in ``transform_filter(brush)``,
+we are again using the selection parameter ``brush`` as a predicate.
+Data points which evaluate to ``True`` (i.e., data points which lie within the selection) are kept,
+and data points which evaluate to ``False`` are filtered out.
+
+It is not possible to both select and filter in the same chart,
+so typically this functionality will be used when at least two sub-charts are present.
+In the following example,
+we attach the selection parameter to the upper chart,
+and then filter data in the lower chart based on the selection in the upper chart.
+You can explore how the counts change in the bar chart
+depending on the size and position of the selection in the scatter plot.
+
+.. altair-plot::
+
+    brush = alt.selection_interval()
+
+    points = alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N'
+    ).add_params(
+        brush
+    )
+
+    bars = alt.Chart(cars).mark_bar().encode(
+        x='count()',
+        y='Origin:N',
+        color='Origin:N'
+    ).transform_filter(
         brush
     )
 
-    chart.encode(x='Acceleration:Q') | chart.encode(x='Miles_per_Gallon:Q')
+    points & bars
 
-Selection Types: Interval, Single, Multi
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-With this interesting example under our belt, let's take a more systematic
-look at some of the types of selections available in Altair.
+Selection Types
+~~~~~~~~~~~~~~~
+
+Now that we have seen the basics of how we can use a selection to interact with a chart,
+let's take a more systematic look at some of the types of selection parameters available in Altair.
 For simplicity, we'll use a common chart in all the following examples; a
 simple heat-map based on the ``cars`` dataset.
 For convenience, let's write a quick Python function that will take a selection
@@ -161,7 +310,7 @@ selection:
         ).properties(
             width=300,
             height=180
-        ).add_selection(
+        ).add_params(
             selector
         )
 
@@ -186,86 +335,128 @@ empty selection contains none of the points:
 
 .. altair-plot::
 
-   interval_x = alt.selection_interval(encodings=['x'], empty='none')
+   interval_x = alt.selection_interval(encodings=['x'], empty=False)
    make_example(interval_x)
 
-A special case of an interval selection is when the interval is bound to the
-chart scales; this is how Altair plots can be made interactive:
+Point Selections
+^^^^^^^^^^^^^^^^
+A *point* selection allows you to select chart elements one at a time
+via mouse actions. By default, points are selected on click:
 
 .. altair-plot::
 
-    scales = alt.selection_interval(bind='scales')
+    point = alt.selection_point()
+    make_example(point)
 
-    alt.Chart(cars).mark_point().encode(
-        x='Horsepower:Q',
-        y='Miles_per_Gallon:Q',
-        color='Origin:N'
-    ).add_selection(
-        scales
-    )
+By changing some arguments, we can select points on mouseover rather than on
+click. We can also set the ``nearest`` flag to ``True`` so that the nearest
+point is highlighted:
 
-Because this is such a common pattern, Altair provides the :meth:`Chart.interactive`
-method which creates such a selection more concisely.
+.. altair-plot::
 
+    point_nearest = alt.selection_point(on='mouseover', nearest=True)
+    make_example(point_nearest)
 
-Single Selections
-^^^^^^^^^^^^^^^^^
-A *single* selection allows you to select a single chart element at a time using
-mouse actions. By default, points are selected on click:
+Point selections also allow for multiple chart objects to be selected.
+By default, chart elements can be added to and removed from the selection
+by clicking on them while holding the *shift* key, you can try in the two charts above.
 
-.. altair-plot::
+Selection Targets
+~~~~~~~~~~~~~~~~~
 
-    single = alt.selection_single()
-    make_example(single)
+For any but the simplest selections, the user needs to think about exactly
+what is targeted by the selection, and this can be controlled with either the
+``fields`` or ``encodings`` arguments. These control what data properties are
+used to determine which points are part of the selection.
 
-By changing some arguments, we can select points on mouseover rather than on
-click. We can also set the ``nearest`` flag to ``True`` so that the nearest
-point is highlighted:
+For example, here we create a small chart that acts as an interactive legend,
+by targeting the Origin field using ``fields=['Origin']``. Clicking on points
+in the upper-right plot (the legend) will propagate a selection for all points
+with a matching ``Origin``.
 
 .. altair-plot::
 
-    single_nearest = alt.selection_single(on='mouseover', nearest=True)
-    make_example(single_nearest)
+    selection = alt.selection_point(fields=['Origin'])
+    color = alt.condition(
+        selection,
+        alt.Color('Origin:N').legend(None),
+        alt.value('lightgray')
+    )
 
-Multiple Selections
-^^^^^^^^^^^^^^^^^^^
-A *multi* selection is similar to a *single* selection, but it allows for
-multiple chart objects to be selected at once.
-By default, chart elements can be added to and removed from the selection
-by clicking on them while holding the *shift* key:
+    scatter = alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color=color,
+        tooltip='Name:N'
+    )
 
-.. altair-plot::
+    legend = alt.Chart(cars).mark_point().encode(
+        alt.Y('Origin:N').axis(orient='right'),
+        color=color
+    ).add_params(
+        selection
+    )
 
-    multi = alt.selection_multi()
-    make_example(multi)
+    scatter | legend
 
-In addition to the options seen in :func:`selection_single`, the multi selection
-accepts the ``toggle`` parameter, which controls whether points can be removed
-from the selection once they are added.
+The above could be equivalently replace ``fields=['Origin']`` with
+``encodings=['color']``, because in this case the chart maps ``color`` to
+``'Origin'``. Also note that there is a shortcut to create interactive legends in Altair
+described in the section :ref:`legend-binding`.
 
-For example, here is a plot where you can "paint" the chart objects by hovering
-over them with your mouse:
+Similarly, we can specify multiple fields and/or encodings that must be
+matched in order for a datum to be included in a selection.
+For example, we could modify the above chart to create a two-dimensional
+clickable legend that will select points by both Origin and number of
+cylinders:
 
 .. altair-plot::
 
-    multi_mouseover = alt.selection_multi(on='mouseover', toggle=False, empty='none')
-    make_example(multi_mouseover)
+    selection = alt.selection_point(fields=['Origin', 'Cylinders'])
+    color = alt.condition(
+        selection,
+        alt.Color('Origin:N').legend(None),
+        alt.value('lightgray')
+    )
 
-Composing Multiple Selections
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    scatter = alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color=color,
+        tooltip='Name:N'
+    )
 
-Altair also supports combining multiple selections using the ``&``, ``|``
+    legend = alt.Chart(cars).mark_rect().encode(
+        alt.Y('Origin:N').axis(orient='right'),
+        x='Cylinders:O',
+        color=color
+    ).add_params(
+        selection
+    )
+
+    scatter | legend
+
+By fine-tuning the behavior of selections in this way, they can be used to
+create a wide variety of linked interactive chart types.
+
+
+Parameter Composition
+~~~~~~~~~~~~~~~~~~~~~
+
+Altair also supports combining multiple parameters using the ``&``, ``|``
 and ``~`` for respectively ``AND``, ``OR`` and ``NOT`` logical composition
 operands.
 
-In the following example there are two people who can make an interval
-selection in the chart. The person Alex makes a selection box when the
+Returning to our heatmap examples,
+we can construct a scenario where there are two people who can make an interval
+selection in the same chart. The person Alex makes a selection box when the
 alt-key (macOS: option-key) is selected and Morgan can make a selection
 box when the shift-key is selected.
-We use the alt.Brushconfig() to give the selection box of Morgan a different
+We use the ``Brushconfig`` to give the selection box of Morgan a different
 style.
 Now, we color the rectangles when they fall within Alex's or Morgan's
-selection.
+selection
+(note that you need to create both selections before seeing the effect).
 
 .. altair-plot::
 
@@ -283,7 +474,7 @@ selection.
         x='Cylinders:O',
         y='Origin:O',
         color=alt.condition(alex | morgan, 'count()', alt.ColorValue("grey"))
-    ).add_selection(
+    ).add_params(
         alex, morgan
     ).properties(
         width=300,
@@ -298,148 +489,354 @@ With these operators, selections can be combined in arbitrary ways:
 - ``alex | ~morgan``: to select the rectangles that fall within Alex's
   selection or outside the selection of Morgan
 
+.. _binding-parameters:
 
-Selection Targets: Fields and Encodings
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-For any but the simplest selections, the user needs to think about exactly
-what is targeted by the selection, and this can be controlled with either the
-``fields`` or ``encodings`` arguments. These control what data properties are
-used to determine which points are part of the selection.
+Bindings & Widgets
+~~~~~~~~~~~~~~~~~~
 
-For example, here we create a small chart that acts as an interactive legend,
-by targeting the Origin field using ``fields=['Origin']``. Clicking on points
-in the upper-right plot (the legend) will propagate a selection for all points
-with a matching ``Origin``.
+With an understanding of the parameter types and conditions, you can now bind parameters to chart elements (e.g. legends) and widgets (e.g. drop-downs and sliders). This is done using the ``bind`` option inside ``param`` and ``selection``. As specified by `the Vega-lite binding docs <https://vega.github.io/vega-lite/docs/bind.html#input-element-binding>`_, there are three types of bindings available:
+
+1. Point and interval selections can be used for data-driven interactive elements, such as highlighting and filtering based on values in the data.
+2. Sliders and checkboxes can be used for logic-driven interactive elements, such as highlighting and filtering based on the absolute values in these widgets.
+3. Interval selections can be bound to a scale, such as zooming in on a map.
+
+The following table summarizes the input elements that are supported in Vega-Lite:
+
+========================= ===========================================================================  ===============================================
+Input Element             Description                                                                   Example
+========================= ===========================================================================  ===============================================
+:class:`binding_checkbox` Renders as checkboxes allowing for multiple selections of items.                    :ref:`gallery_multiple_interactions`
+:class:`binding_radio`    Radio buttons that force only a single selection                                    :ref:`gallery_multiple_interactions`
+:class:`binding_select`   Drop down box for selecting a single item from a list                               :ref:`gallery_multiple_interactions`
+:class:`binding_range`    Shown as a slider to allow for selection along a scale.                             :ref:`gallery_us_population_over_time`
+:class:`binding`          General method that supports many HTML input elements
+========================= ===========================================================================  ===============================================
+
+Widget Binding
+^^^^^^^^^^^^^^
+
+Widgets are HTML input elements, such as drop-downs, sliders, radio buttons, and search boxes.
+There are a three strategies for how variable and selection parameters
+can be used together with widgets:
+data-driven lookups, data-driven comparisons, and logic-driven comparisons.
+
+Data-Driven Lookups
+-------------------
+
+Data-driven lookups use the active value(s) of the widget
+together with a ``selection`` parameter
+to look up points with matching values in the chart's dataset.
+For example,
+we can establish a binding between an input widget and a point selection
+to filter the data as in the example below
+where a drop-down is used to highlight cars of a specific ``Origin``:
 
 .. altair-plot::
 
-    selection = alt.selection_multi(fields=['Origin'])
-    color = alt.condition(selection,
-                          alt.Color('Origin:N', legend=None),
-                          alt.value('lightgray'))
+    input_dropdown = alt.binding_select(options=['Europe','Japan','USA'], name='Region ')
+    selection = alt.selection_point(fields=['Origin'], bind=input_dropdown)
+    color = alt.condition(
+        selection,
+        alt.Color('Origin:N').legend(None),
+        alt.value('lightgray')
+    )
 
-    scatter = alt.Chart(cars).mark_point().encode(
+    alt.Chart(cars).mark_point().encode(
         x='Horsepower:Q',
         y='Miles_per_Gallon:Q',
         color=color,
-        tooltip='Name:N'
-    )
-
-    legend = alt.Chart(cars).mark_point().encode(
-        y=alt.Y('Origin:N', axis=alt.Axis(orient='right')),
-        color=color
-    ).add_selection(
+    ).add_params(
         selection
     )
 
-    scatter | legend
+Note that although it looks like a value is selected in the dropdown from the start,
+we need to set `value=` to actually start out with an initial selection in the chart.
+We did this previously with variable parameters
+and selection parameters follow the same pattern as you will see further down
+in the :ref:`encoding-channel-binding` section.
 
-The above could be equivalently replace ``fields=['Origin']`` with
-``encodings=['color']``, because in this case the chart maps ``color`` to
-``'Origin'``.
+As you can see above,
+we are still using ``conditions`` to make the chart respond to the selection,
+just as we did without widgets.
+Bindings and input elements can also be used to filter data
+allowing the user to see just the selected points as in the example below.
+In this example, we also add an empty selection
+to illustrate how to revert to showing all points
+after a selection has been made in a radio button or drop-down
+(which cannot be deselected).
 
-Similarly, we can specify multiple fields and/or encodings that must be
-matched in order for a datum to be included in a selection.
-For example, we could modify the above chart to create a two-dimensional
-clickable legend that will select points by both Origin and number of
-cylinders:
 
 .. altair-plot::
-   
-    selection = alt.selection_multi(fields=['Origin', 'Cylinders'])
-    color = alt.condition(selection,
-                          alt.Color('Origin:N', legend=None),
-                          alt.value('lightgray'))
 
-    scatter = alt.Chart(cars).mark_point().encode(
+    # Make radio button less cramped by adding a space after each label
+    # The spacing will only show up in your IDE, not on this doc page
+    options = ['Europe', 'Japan', 'USA']
+    labels = [option + ' ' for option in options]
+
+    input_dropdown = alt.binding_radio(
+        # Add the empty selection which shows all when clicked
+        options=options + [None],
+        labels=labels + ['All'],
+        name='Region: '
+    )
+    selection = alt.selection_point(
+        fields=['Origin'],
+        bind=input_dropdown,
+    )
+
+    alt.Chart(cars).mark_point().encode(
         x='Horsepower:Q',
         y='Miles_per_Gallon:Q',
-        color=color,
-        tooltip='Name:N'
+        # We need to set a constant domain to preserve the colors
+        # when only one region is shown at a time
+        color=alt.Color('Origin:N').scale(domain=options),
+    ).add_params(
+        selection
+    ).transform_filter(
+        selection
     )
 
-    legend = alt.Chart(cars).mark_rect().encode(
-        y=alt.Y('Origin:N', axis=alt.Axis(orient='right')),
-        x='Cylinders:O',
-        color=color
-    ).add_selection(
-        selection
+In addition to the widgets listed in the table above,
+Altair has access to `any html widget <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input>`_
+via the more general ``binding`` function.
+In the example below,
+we use a search input to filter points that match the search string exactly.
+You can hover over the points to see the car names
+and try typing one into the search box, e.g. ``vw pickup``
+to see the point highlighted
+(you need to type out the full name).
+
+.. altair-plot::
+
+    search_input = alt.selection_point(
+        fields=['Name'],
+        empty=False,  # Start with no points selected
+        bind=alt.binding(
+            input='search',
+            placeholder="Car model",
+            name='Search ',
+        )
+    )
+    alt.Chart(data.cars.url).mark_point(size=60).encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        tooltip='Name:N',
+        opacity=alt.condition(
+            search_input,
+            alt.value(1),
+            alt.value(0.05)
+        )
+    ).add_params(
+        search_input
     )
 
-    scatter | legend
+It is not always useful to require an exact match to the search syntax,
+and when we will be learning about :ref:`expressions`,
+we will see how we can match partial strings via a regex instead.
+
+Data-Driven Comparisons
+-----------------------
+
+So far we have seen the use of selections
+to lookup points with precisely matching values in our data.
+This is often useful,
+but sometimes we might want to make a more complex comparison
+than an exact match.
+For example,
+we might want to create a condition
+we select the points in the data that are above or below a threshold value,
+which is specified via a slider.
+For this workflow it is recommended to use variable parameters via ``param``
+and as you can see below,
+we use the special syntax ``datum.xval``
+to reference the column to compare against.
+Prefixing the column name with ``datum``
+tells Altair that we want to compare to a column in the dataframe,
+rather than to a Python variable called ``xval``,
+which would have been the case if we just wrote ``xval < selector``.
 
-By fine-tuning the behavior of selections in this way, they can be used to
-create a wide variety of linked interactive chart types.
+.. altair-plot::
 
-Binding: Adding Data Driven Inputs
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-With an understanding of the selection types and conditions, you can now add data-driven input elements to the charts using the ``bind`` option. As specified by `Vega-lite binding <https://vega.github.io/vega-lite/docs/bind.html#input-element-binding>`_, selections can be bound two-ways:
+    import numpy as np
+    import pandas as pd
 
-1. Single selections can be bound directly to an input element, *for example, a radio button.*
-2. Interval selections which can be bound to scale, *for example, zooming in on a map.*
 
-Input Element Binding
-^^^^^^^^^^^^^^^^^^^^^
-With single selections, an input element can be added to the chart to establish a binding between the input and the selection. 
+    rand = np.random.RandomState(42)
+    df = pd.DataFrame({
+        'xval': range(100),
+        'yval': rand.randn(100).cumsum()
+    })
 
-For instance, using our example from above a dropdown can be used to highlight cars from a specific ``origin`` :
+    slider = alt.binding_range(min=0, max=100, step=1, name='Cutoff ')
+    selector = alt.param(name='SelectorName', value=50, bind=slider)
+
+    alt.Chart(df).mark_point().encode(
+       x='xval',
+       y='yval',
+       color=alt.condition(
+           alt.datum.xval < selector,
+           # 'datum.xval < SelectorName',  # An equivalent alternative
+           alt.value('red'),
+           alt.value('blue')
+       )
+    ).add_params(
+       selector
+    )
+
+In this particular case we could actually have used a selection parameter
+since selection values can be accessed directly and used in expressions that affect the
+chart. For example, here we create a slider to choose a cutoff value, and color
+points based on whether they are smaller or larger than the value:
 
 .. altair-plot::
 
-    input_dropdown = alt.binding_select(options=['Europe','Japan','USA'], name='Country')
-    selection = alt.selection_single(fields=['Origin'], bind=input_dropdown)
-    color = alt.condition(selection,
-                        alt.Color('Origin:N', legend=None),
-                        alt.value('lightgray'))
+    slider = alt.binding_range(min=0, max=100, step=1, name='Cutoff ')
+    selector = alt.selection_point(
+        name="SelectorName",
+        fields=['cutoff'],
+        bind=slider,
+        value=[{'cutoff': 50}]
+    )
+
+    alt.Chart(df).mark_point().encode(
+        x='xval',
+        y='yval',
+        color=alt.condition(
+            alt.datum.xval < selector.cutoff,
+            # 'datum.xval < SelectorName.cutoff',  # An equivalent alternative
+            alt.value('red'),
+            alt.value('blue')
+        )
+    ).add_params(
+        selector
+    )
+
+While it can be useful to know
+how to access selection values
+in expression strings,
+using the parameters syntax introduced in Altair 5
+often provides a more convenient syntax
+for simple interactions like this one
+since they can also be accessed in expression strings
+as we saw above.
+Similarly,
+it is often possible to use equality statements
+such as ``alt.datum.xval == selector`` to lookup exact values
+but it is often more convenient to switch to a selection parameter
+and specify a field/encoding.
+
+Logic-Driven Comparisons
+------------------------
+
+A logic comparison is a type of comparison
+that is based on logical rules and conditions,
+rather than on the actual data values themselves.
+For example, for a checkbox widget
+we want to check if the state of the checkbox is True or False
+and execute some action depending on whether it is checked or not.
+When we are using a checkbox as a toggle like this,
+we need to use `param` instead of `selection_point`,
+since we don't want to check if there are True/False values in our data,
+just if the value of the check box is True (checked) or False (unchecked):
+
+.. altair-plot::
+
+    bind_checkbox = alt.binding_checkbox(name='Scale point size by "Acceleration": ')
+    param_checkbox = alt.param(bind=bind_checkbox)
 
     alt.Chart(cars).mark_point().encode(
         x='Horsepower:Q',
         y='Miles_per_Gallon:Q',
-        color=color,
-        tooltip='Name:N'
-    ).add_selection(
-        selection
+        size=alt.condition(
+            param_checkbox,
+            'Acceleration:Q',
+            alt.value(25)
+        )
+    ).add_params(
+        param_checkbox
+    )
+
+Another example of creating a widget binding that is independent of the data,
+involves an interesting use case for the more general ``binding`` function.
+In the next example,
+this function introduces a color picker
+where the user can choose the colors of the chart interactively:
+
+.. altair-plot::
+
+    color_usa = alt.param(value="#317bb4", bind=alt.binding(input='color', name='USA '))
+    color_europe = alt.param(value="#ffb54d", bind=alt.binding(input='color', name='Europe '))
+    color_japan = alt.param(value="#adadad", bind=alt.binding(input='color', name='Japan '))
+
+    alt.Chart(data.cars.url).mark_circle().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color=alt.Color(
+            'Origin:N',
+            scale=alt.Scale(
+                domain=['USA', 'Europe', 'Japan'],
+                range=[color_usa, color_europe, color_japan]
+            )
+        )
+    ).add_params(
+        color_usa, color_europe, color_japan
     )
 
+.. _encoding-channel-binding:
 
-    
+Encoding Channel Binding
+^^^^^^^^^^^^^^^^^^^^^^^^
 
-The above example shows all three elements at work. The :input_dropdown: is :bind: to the :selection: which is called from the :condition: encoded through the data. 
+There is no direct way to map an encoding channel to a widget in order to dynamically display different charts based on different column choices, such as ``y=column_param``. The underlying reason this is not possible is that in Vega-Lite, the ``field`` property does not accept a parameter as value; see the `field Vega-Lite documentation <https://vega.github.io/vega-lite/docs/field.html>`_. You can follow the discussion in this issue https://github.com/vega/vega-lite/issues/7365, and in the meantime, you can use parameters for a convenient workaround which let's you achieve the same functionality and change the plotted columns based on a widget selection (the x-axis title cannot be changed dynamically, but a text mark could be used instead if desired):
 
-The following are the input elements supported in vega-lite: 
+.. altair-plot::
 
+    dropdown = alt.binding_select(
+        options=['Horsepower', 'Displacement', 'Weight_in_lbs', 'Acceleration'],
+        name='X-axis column '
+    )
+    xcol_param = alt.param(
+        value='Horsepower',
+        bind=dropdown
+    )
 
-========================= ===========================================================================  ===============================================
-Input Element             Description                                                                   Example
-========================= ===========================================================================  ===============================================
-:class:`binding_checkbox` Renders as checkboxes allowing for multiple selections of items.                    :ref:`gallery_multiple_interactions`
-:class:`binding_radio`    Radio buttons that force only a single selection                                    :ref:`gallery_multiple_interactions`
-:class:`binding_select`   Drop down box for selecting a single item from a list                               :ref:`gallery_multiple_interactions`
-:class:`binding_range`    Shown as a slider to allow for selection along a scale.                             :ref:`gallery_us_population_over_time`
-========================= ===========================================================================  ===============================================
+    alt.Chart(data.cars.url).mark_circle().encode(
+        x=alt.X('x:Q').title(''),
+        y='Miles_per_Gallon:Q',
+        color='Origin:N'
+    ).transform_calculate(
+        x=f'datum[{xcol_param.name}]'
+    ).add_params(
+        xcol_param
+    )
+
+It was possible to achieve something similar before the introduction of parameters in Altair 5 by using ``transform_fold`` and ``transform_filter``, but the spec for this is more complex (as can be seen in `this SO answer <https://stackoverflow.com/a/70950329/2166823>`_) so the solution above is to prefer.
 
+.. _legend-binding:
 
-Bindings and input elements can also be used to filter data on the client side. Reducing noise in the chart and allowing the user to see just certain selected elements:
+Legend Binding
+^^^^^^^^^^^^^^
+
+An interactive legend can often be helpful to assist in focusing in on groups of data.
+Instead of manually having to build a separate chart to use as a legend,
+Altair provides the ``bind='legend'`` option to facilitate the creation of clickable legends:
 
 .. altair-plot::
 
-    input_dropdown = alt.binding_select(options=['Europe','Japan','USA'], name='Country')
-    selection = alt.selection_single(fields=['Origin'], bind=input_dropdown)
-    
+    selection = alt.selection_point(fields=['Origin'], bind='legend')
+
     alt.Chart(cars).mark_point().encode(
         x='Horsepower:Q',
         y='Miles_per_Gallon:Q',
         color='Origin:N',
-        tooltip='Name:N'
-    ).add_selection(
-        selection
-    ).transform_filter(
+        opacity=alt.condition(selection, alt.value(0.8), alt.value(0.2))
+    ).add_params(
         selection
     )
 
-
 Scale Binding
 ^^^^^^^^^^^^^
+
 With interval selections, the ``bind`` property can be set to the value of ``"scales"``. In these cases, the binding will automatically respond to the panning and zooming along the chart:
 
 .. altair-plot::
@@ -450,50 +847,139 @@ With interval selections, the ``bind`` property can be set to the value of ``"sc
         x='Horsepower:Q',
         y='Miles_per_Gallon:Q',
         color='Origin:N',
-        tooltip='Name:N'
-    ).add_selection(
+    ).add_params(
         selection
     )
-    
 
-Selection Values in Expressions
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Selection values can be accessed directly and used in expressions that affect the
-chart. For example, here we create a slider to choose a cutoff value, and color
-points based on whether they are smaller or larger than the value:
+Because this is such a common pattern,
+Altair provides the :meth:`interactive` method
+which creates a scale-bound selection more concisely:
 
 .. altair-plot::
 
-   import altair as alt
-   import pandas as pd
-   import numpy as np
+    alt.Chart(cars).mark_point().encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        color='Origin:N',
+    ).interactive()
 
-   rand = np.random.RandomState(42)
+.. _expressions:
 
-   df = pd.DataFrame({
-       'xval': range(100),
-       'yval': rand.randn(100).cumsum()
-   })
+Expressions
+~~~~~~~~~~~
 
-   slider = alt.binding_range(min=0, max=100, step=1, name='cutoff:')
-   selector = alt.selection_single(name="SelectorName", fields=['cutoff'],
-                                   bind=slider, init={'cutoff': 50})
- 
-   alt.Chart(df).mark_point().encode(
-       x='xval',
-       y='yval',
-       color=alt.condition(
-           alt.datum.xval < selector.cutoff,
-           alt.value('red'), alt.value('blue')
-       )
-   ).add_selection(
-       selector
-   )
+Altair allows custom interactions by utilizing the `expression language of Vega <https://vega.github.io/vega/docs/expressions/>`_ for writing basic formulas. A Vega expression string is a well-defined set of JavaScript-style operations.
+To simplify building these expressions in Python, Altair provides the ``expr`` module, which offers constants and functions to construct expressions using Python syntax. Both JavaScript-syntax and Python-syntax are supported within Altair to define an expression
+and an introductory example of each is available in the :ref:`user-guide-calculate-transform` transform documentation so we recommend checking out that page before continuing.
+
+In the following example, we define a range connected to a parameter named ``param_width``. We then assign two expressions via ``param`` using both JavaScript and Python-syntax.
+Using these two expressions defined as a parameter, we can connect them to an encoding channel option, such as the title color of the axis. If the width is below ``200``, then the color is ``red``; otherwise, the color is ``blue``.
+
+.. altair-plot::
+
+    bind_range = alt.binding_range(min=100, max=300, name='Slider value:  ')
+    param_width = alt.param(bind=bind_range)
+
+    # Examples of how to write both js and python expressions
+    param_color_js_expr = alt.param(expr=f"{param_width.name} < 200 ? 'red' : 'black'")
+    param_color_py_expr = alt.param(expr=alt.expr.if_(param_width < 200, 'red', 'black'))
+
+    chart = alt.Chart(df).mark_point().encode(
+        alt.X('xval').axis(titleColor=param_color_js_expr),
+        alt.Y('yval').axis(titleColor=param_color_py_expr)
+    ).add_params(
+        param_width,
+        param_color_js_expr,
+        param_color_py_expr
+    )
+    chart
+
+In the example above, we used a JavaScript-style ternary operator ``f"{param_width.name} < 200 ? 'red' : 'blue'"`` which is equivalent to the Python function ``expr.if_(param_width < 200, 'red', 'blue')``.
+The expressions defined as parameters also needed to be added to the chart within ``.add_params()``.
 
-Selector values can be similarly used anywhere that expressions are valid, for
-example, in a :ref:`user-guide-calculate-transform` or a
-:ref:`user-guide-filter-transform`.
+In addition to assigning an expression within a parameter definition as shown above,
+the ``expr()`` utility function allows us to define expressions inline,
+``add_params``.
+In the next example, we modify the chart above to change the size of the points based on an inline expression. Instead of creating a conditional statement, we use the value of the expression as the size directly and therefore only need to specify the name of the parameter.
 
+.. altair-plot::
+
+    chart.mark_point(size=alt.expr(param_width.name))
+
+Inline expressions defined by ``expr(...)`` are not parameters
+so they can be added directly in the chart spec instead of via ``add_params``.
+
+Another option to include an expression within a chart specification is as a value definition to an encoding channel. Here, we make the exact same modification to the chart as in the previous example via this alternate approach:
+
+.. altair-plot::
+
+    chart.encode(size=alt.value(alt.expr(param_width.name)))
+
+`Some parameter names have special meaning in Vega-Lite <https://vega.github.io/vega-lite/docs/parameter.html#built-in-variable-parameters>`_, for example, naming a parameter ``width`` will automatically link it to the width of the chart. In the example below, we also modify the chart title to show the value of the parameter:
+
+.. altair-plot::
+
+    bind_range = alt.binding_range(min=100, max=300, name='Chart width: ')
+    param_width = alt.param('width', bind=bind_range)
+
+    # In Javascript, a number is converted to a string when added to an existing string,
+    # which is why we use this nested quotation.
+    title=alt.Title(alt.expr(f'"This chart is " + {param_width.name} + " px wide"'))
+    alt.Chart(df, title=title).mark_point().encode(
+        alt.X('xval'),
+        alt.Y('yval')
+    ).add_params(
+        param_width,
+    )
+
+Now that we know the basics of expressions,
+let's see how we can improve on our search input example
+and make the search string match via a regex pattern.
+To do this we need to use ``expr.regex`` to define the regex string,
+and ``expr.test`` to test it against another string
+(in this case the string in the ``Name`` column).
+The ``i`` option makes the regex case insensitive,
+and you can see that we have switched to using ``param`` instead of ``selection_point``
+since we are doing something more complex
+than looking up values with an exact match in the data.
+To try this out, you can type ``mazda|ford`` in the search input box below.
+
+.. altair-plot::
+
+    search_input = alt.param(
+        value='',
+        bind=alt.binding(
+            input='search',
+            placeholder="Car model",
+            name='Search ',
+        )
+    )
+    alt.Chart(data.cars.url).mark_point(size=60).encode(
+        x='Horsepower:Q',
+        y='Miles_per_Gallon:Q',
+        tooltip='Name:N',
+        opacity=alt.condition(
+            alt.expr.test(alt.expr.regexp(search_input, 'i'), alt.datum.Name),
+            # f"test(regexp({search_input.name}, 'i'), datum.Name)",  # Equivalent js alternative
+            alt.value(1),
+            alt.value(0.05)
+        )
+    ).add_params(
+        search_input
+    )
+
+And remember, all this interactivity is client side.
+You can save this chart as an HTML file or put it on a static site generator such as GitHub/GitLab pages
+and anyone can interact with it without having to install Python.
+Quite powerful!
+
+To summarize expressions:
+
+- Altair can utilize the expression language of Vega for writing basic formulas to enable custom interactions.
+- Both JavaScript-style syntax and Python-style syntax are supported in Altair to define expressions.
+- Altair provides the ``expr`` module which allows expressions to be constructed with Python syntax.
+- Expressions can be included within a chart specification using two approaches: through a ``param(expr=...)`` parameter definition or inline using the ``expr(...)`` utility function.
+- Expressions can be used anywhere the documentation mentions that an `ExprRef` is an accepted value. This is mainly in three locations within a chart specification: mark properties, encoding channel options, and within a value definition for an encoding channel. They are also supported in the chart title, but not yet for subtitles or guide titles (i.e. axis and legends, see https://github.com/vega/vega-lite/issues/7408 for details).
 
 Further Examples
 ~~~~~~~~~~~~~~~~
@@ -504,3 +990,12 @@ for ideas about how they can be applied to more interesting charts.
 For more information on how to fine-tune selections, including specifying other
 mouse and keystroke options, see the `Vega-Lite Selection documentation
 <https://vega.github.io/vega-lite/docs/selection.html>`_.
+
+Limitations
+~~~~~~~~~~~
+
+Some possible use cases for the above interactivity are not currently supported by Vega-Lite, and hence are not currently supported by Altair.  Here are some examples.
+
+1. If we are using a ``selection_point``, it would be natural to want to return information about the chosen data point, and then process that information using Python. This is not currently possible, so any data processing will have to be handled using tools such as ``transform_calculate``, etc. You can follow the progress on this in the following issue: https://github.com/altair-viz/altair/issues/1153.
+
+   - The dashboarding package ``Panel`` has added support for processing Altair selections with custom callbacks in their 0.13 release. This is currently the only Python dashboarding package that supports custom callbacks for Altair selections and you can read more about how to use this functionality in `the Panel documentation <https://pyviz-dev.github.io/panel/reference/panes/Vega.html#selections>`_.
diff --git a/doc/user_guide/internals.rst b/doc/user_guide/internals.rst
index e02b7c2..d7187db 100644
--- a/doc/user_guide/internals.rst
+++ b/doc/user_guide/internals.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-internals:
 
-Altair Internals: Understanding the Library
-===========================================
+Altair Internals
+================
 This section will provide some details about how the Altair API relates to the
 Vega-Lite visualization specification, and how you can use that knowledge to
 use the package more effectively.
@@ -18,7 +18,7 @@ That's it. In order to take those specifications and turn them into actual
 visualizations requires a frontend that is correctly set up, but strictly
 speaking that rendering is generally not controlled by the Altair package.
 
-Altair chart to Vega-Lite Spec
+Altair Chart to Vega-Lite Spec
 ------------------------------
 Since Altair is fundamentally about constructing chart specifications, the central
 functionality of any chart object are the :meth:`~Chart.to_dict` and
@@ -38,7 +38,7 @@ from which we can output the JSON representation:
         color='Origin:N',
     ).configure_view(
         continuousHeight=300,
-        continuousWidth=400,
+        continuousWidth=300,
     )
 
     print(chart.to_json(indent=2))
@@ -98,7 +98,7 @@ the above chart using these low-level object types directly:
         config=alt.Config(
             view=alt.ViewConfig(
                 continuousHeight=300,
-                continuousWidth=400
+                continuousWidth=300
             )
         )
     )
@@ -127,7 +127,7 @@ For example, consider the
 from the Vega-Lite documentation, which has the following JSON specification::
 
     {
-      "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+      "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
       "description": "A simple bar chart with embedded data.",
       "data": {
         "values": [
@@ -136,7 +136,7 @@ from the Vega-Lite documentation, which has the following JSON specification::
           {"a": "G","b": 19}, {"a": "H","b": 87}, {"a": "I","b": 52}
         ]
       },
-      "mark": "bar",
+      "mark": {"type": "bar"},
       "encoding": {
         "x": {"field": "a", "type": "ordinal"},
         "y": {"field": "b", "type": "quantitative"}
@@ -152,7 +152,7 @@ construct an Altair chart object from this string of Vega-Lite JSON:
 
     alt.Chart.from_json("""
     {
-      "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+      "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
       "description": "A simple bar chart with embedded data.",
       "data": {
         "values": [
@@ -161,7 +161,7 @@ construct an Altair chart object from this string of Vega-Lite JSON:
           {"a": "G","b": 19}, {"a": "H","b": 87}, {"a": "I","b": 52}
         ]
       },
-      "mark": "bar",
+      "mark": {"type": "bar"},
       "encoding": {
         "x": {"field": "a", "type": "ordinal"},
         "y": {"field": "b", "type": "quantitative"}
@@ -177,7 +177,7 @@ you can use the :meth:`~Chart.from_dict` method to construct the chart object:
     import altair as alt
 
     alt.Chart.from_dict({
-      "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+      "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
       "description": "A simple bar chart with embedded data.",
       "data": {
         "values": [
@@ -186,7 +186,7 @@ you can use the :meth:`~Chart.from_dict` method to construct the chart object:
           {"a": "G","b": 19}, {"a": "H","b": 87}, {"a": "I","b": 52}
         ]
       },
-      "mark": "bar",
+      "mark": {"type": "bar"},
       "encoding": {
         "x": {"field": "a", "type": "ordinal"},
         "y": {"field": "b", "type": "quantitative"}
diff --git a/doc/user_guide/large_datasets.rst b/doc/user_guide/large_datasets.rst
new file mode 100644
index 0000000..b5ee0a2
--- /dev/null
+++ b/doc/user_guide/large_datasets.rst
@@ -0,0 +1,387 @@
+.. _large-datasets:
+
+Large Datasets
+--------------
+If you try to create a plot that will directly embed a dataset with more than
+5000 rows, you will see a ``MaxRowsError``:
+
+.. altair-plot::
+   :output: none
+   
+   import altair as alt
+   import pandas as pd
+
+   data = pd.DataFrame({"x": range(10000)})
+   alt.Chart(data).mark_point()
+
+.. code-block:: none
+
+    MaxRowsError: The number of rows in your dataset is greater than the maximum
+                  allowed (5000). For information on how to plot larger datasets
+                  in Altair, see the documentation.
+
+This is not because Altair cannot handle larger datasets, but it is because it
+is important for the user to think carefully about how large datasets are handled. 
+The following sections describe various considerations as well as approaches to deal with
+large datasets.
+
+If you are certain you would like to embed your full dataset within the visualization
+specification, you can disable the ``MaxRows`` check::
+
+    alt.data_transformers.disable_max_rows()
+
+Challenges
+~~~~~~~~~~
+By design, Altair does not produce plots consisting of pixels, but plots
+consisting of data plus a visualization specification. For example, here is a 
+simple chart made from a dataframe with three rows of data:
+
+.. altair-plot::
+    :output: none
+
+    import altair as alt
+    import pandas as pd
+    data = pd.DataFrame({'x': [1, 2, 3], 'y': [2, 1, 2]})
+
+    chart = alt.Chart(data).mark_line().encode(
+         x='x',
+         y='y'
+    )
+
+    from pprint import pprint
+    pprint(chart.to_dict())
+
+.. code-block:: none
+
+    {'$schema': 'https://vega.github.io/schema/vega-lite/v2.4.1.json',
+     'config': {'view': {'height': 300, 'width': 300}},
+     'data': {'values': [{'x': 1, 'y': 2}, {'x': 2, 'y': 1}, {'x': 3, 'y': 2}]},
+     'encoding': {'x': {'field': 'x', 'type': 'quantitative'},
+                  'y': {'field': 'y', 'type': 'quantitative'}},
+     'mark': 'line'}
+
+The resulting specification includes a representation of the data converted
+to JSON format, and this specification is embedded in the notebook or web page
+where it can be used by Vega-Lite to render the plot.
+As the size of the data grows, this explicit data storage can lead to some
+very large specifications which can have various negative implications:
+
+* large notebook files which can slow down your notebook environment such as JupyterLab
+* if you display the chart on a website it slows down the loading of the page
+* slow evaluation of transforms as the calculations are performed in JavaScript which is not the fastest language for processing large amounts of data
+
+
+.. _passing-data-by-url:
+
+Passing Data by URL
+~~~~~~~~~~~~~~~~~~~
+A common approach when working with large datasets is to not embed the data directly,
+but rather store it separately and pass it to the chart by URL. 
+This not only addresses the issue of large notebooks, but also leads to better
+interactivity performance with large datasets.
+
+
+Local Data Server
+^^^^^^^^^^^^^^^^^
+A convenient way to do this is by using the `altair_data_server <https://github.com/altair-viz/altair_data_server>`_
+package. It serves your data from a local threaded server. First install the package:
+
+.. code-block:: none
+
+   pip install altair_data_server
+
+And then enable the data transformer::
+
+    import altair as alt
+    alt.data_transformers.enable('data_server')
+
+Note that this approach may not work on some cloud-based Jupyter notebook services.
+A disadvantage of this method is that if you reopen the notebook, the plot may no longer display
+as the data server is no longer running.
+
+Local Filesystem
+^^^^^^^^^^^^^^^^
+You can also persist the data to disk and then pass the path to Altair:
+
+.. altair-plot::
+   :output: none
+
+   url = 'data.json'
+   data.to_json(url, orient='records')
+
+   chart = alt.Chart(url).mark_line().encode(
+       x='x:Q',
+       y='y:Q'
+   )
+   pprint(chart.to_dict())
+
+
+.. code-block:: none
+
+    {'$schema': 'https://vega.github.io/schema/vega-lite/v2.4.1.json',
+     'config': {'view': {'height': 300, 'width': 300}},
+     'data': {'url': 'data.json'},
+     'encoding': {'x': {'field': 'x', 'type': 'quantitative'},
+                  'y': {'field': 'y', 'type': 'quantitative'}},
+     'mark': 'line'}
+
+
+Altair also has a ``JSON`` data transformer that will do this
+transparently when enabled::
+
+    alt.data_transformers.enable('json')
+
+There is a similar CSV data transformer, but it must be used more carefully
+because CSV does not preserve data types as JSON does.
+
+Note that the filesystem approach may not work on some cloud-based Jupyter
+notebook services. A disadvantage of this method is also a loss of portability: if the notebook is
+ever moved, the data file must accompany it or the plot may not display.
+
+Vega Datasets
+^^^^^^^^^^^^^
+If you are working with one of the vega datasets, you can pass the data by URL
+using the ``url`` attribute:
+
+.. code-block:: python
+
+   from vega_datasets import data
+   source = data.cars.url
+
+   alt.Chart(source).mark_point() # etc.
+
+
+PNG and SVG Renderers
+~~~~~~~~~~~~~~~~~~~~~
+The approaches presented in :ref:`passing-data-by-url` have the disadvantage that the data is no longer
+contained in the notebook and you therefore lose portability or don't see the charts when you reopen the notebook.
+Furthermore, the data still needs to be sent to the frontend, e.g. your browser, and any calculations will happen there.
+
+You might achieve a speedup by enabling either the PNG or SVG renderer 
+as described in :ref:`renderers`. Instead of a Vega-Lite specification, they will 
+prerender the visualization and send only a static image to your notebook. This can
+greatly reduce the amount of data that is being transmitted. The downside with this approach is,
+that you loose all interactivity features of Altair.
+
+Both renderers require you to install either the `vl-convert`_ or the `altair_saver`_ package, see :ref:`saving-png`,
+whereas `vl-convert`_ is expected to provide the better performance.
+
+.. _preaggregate-and-filter:
+
+Preaggregate and Filter in Pandas
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Another common approach is to perform data transformations such as aggregations
+and filters using Pandas before passing the data to Altair.
+
+For example, to create a bar chart for the ``barley`` dataset summing up ``yield`` grouped by ``site``,
+it is convenient to pass the unaggregated data to Altair:
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    alt.Chart(source).mark_bar().encode(
+        x="sum(yield):Q",
+        y=alt.Y("site:N").sort("-x")
+    )
+
+
+The above works well for smaller datasets but let's imagine that the ``barley`` dataset
+is larger and the resulting Altair chart slows down your notebook environment.
+To reduce the data being passed to Altair, you could subset the dataframe to 
+only the necessary columns:
+
+.. code-block:: python
+
+    alt.Chart(source[["yield", "site"]]).mark_bar().encode(
+        x="sum(yield):Q",
+        y=alt.Y("site:N").sort("-x")
+    )
+
+You could also precalculate the sum in Pandas which would reduce the size of the dataset even more:
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+    source_aggregated = (
+        source.groupby("site")["yield"].sum().rename("sum_yield").reset_index()
+    )
+
+    alt.Chart(source_aggregated).mark_bar().encode(
+        x="sum_yield:Q",
+        y=alt.Y("site:N").sort("-x")
+    )
+
+
+Preaggregate Boxplot
+^^^^^^^^^^^^^^^^^^^^
+A boxplot is a useful way to visualize the distribution of data and it is simple to create
+in Altair.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    df = data.cars()
+
+    alt.Chart(df).mark_boxplot().encode(
+        x="Miles_per_Gallon:Q",
+        y="Origin:N",
+        color=alt.Color("Origin").legend(None)
+    )
+
+If you have a lot of data, you can perform the necessary calculations in Pandas and only
+pass the resulting summary statistics to Altair.
+
+First, let's define a few parameters where ``k`` stands for the multiplier which is used
+to calculate the boundaries of the whiskers.
+
+.. altair-plot::
+    :output: none
+    
+    import altair as alt
+    import pandas as pd
+    from vega_datasets import data
+
+    k = 1.5
+    group_by_column = "Origin"
+    value_column = "Miles_per_Gallon"
+
+
+In the next step, we will calculate the summary statistics which are needed for the boxplot.
+
+.. altair-plot::
+    :output: repr
+    :chart-var-name: agg_stats
+    
+    df = data.cars()
+
+    agg_stats = df.groupby(group_by_column)[value_column].describe()
+    agg_stats["iqr"] = agg_stats["75%"] - agg_stats["25%"]
+    agg_stats["min_"] = agg_stats["25%"] - k * agg_stats["iqr"]
+    agg_stats["max_"] = agg_stats["75%"] + k * agg_stats["iqr"]
+    data_points = df[[value_column, group_by_column]].merge(
+        agg_stats.reset_index()[[group_by_column, "min_", "max_"]]
+    )
+    # Lowest data point which is still above or equal to min_
+    # This will be the lower end of the whisker
+    agg_stats["lower"] = (
+        data_points[data_points[value_column] >= data_points["min_"]]
+        .groupby(group_by_column)[value_column]
+        .min()
+    )
+    # Highest data point which is still below or equal to max_
+    # This will be the upper end of the whisker
+    agg_stats["upper"] = (
+        data_points[data_points[value_column] <= data_points["max_"]]
+        .groupby(group_by_column)[value_column]
+        .max()
+    )
+    # Store all outliers as a list
+    agg_stats["outliers"] = (
+        data_points[
+            (data_points[value_column] < data_points["min_"])
+            | (data_points[value_column] > data_points["max_"])
+        ]
+        .groupby(group_by_column)[value_column]
+        .apply(list)
+    )
+    agg_stats = agg_stats.reset_index()
+    
+    # Show whole dataframe
+    pd.set_option("display.max_columns", 15)
+    print(agg_stats)
+
+And finally, we can create the same boxplot as above but we only pass the calculated
+summary statistics to Altair instead of the full dataset.
+
+.. altair-plot::
+
+    base = alt.Chart(agg_stats).encode(
+        y="Origin:N"
+    )
+
+    rules = base.mark_rule().encode(
+        x=alt.X("lower").title("Miles_per_Gallon"),
+        x2="upper",
+    )
+
+    bars = base.mark_bar(size=14).encode(
+        x="25%",
+        x2="75%",
+        color=alt.Color("Origin").legend(None),
+    )
+
+    ticks = base.mark_tick(color="white", size=14).encode(
+        x="50%"
+    )
+
+    outliers = base.transform_flatten(
+        flatten=["outliers"]
+    ).mark_point(
+        style="boxplot-outliers"
+    ).encode(
+        x="outliers:Q",
+        color="Origin",
+    )
+    
+    rules + bars + ticks + outliers
+
+
+VegaFusion
+~~~~~~~~~~
+`VegaFusion`_ is a third-party package that re-implements most Vega-Lite transforms for evaluation
+in the Python kernel, which makes it possible to scale Altair charts to millions of rows of data.
+VegaFusion provides two rendering modes that are useful in different situations.
+
+Mime Renderer
+^^^^^^^^^^^^^
+The `VegaFusion mime renderer`_ is a good choice for charts that contain aggregations
+and that do not re-aggregate or re-filter data in response to selections
+(so it offers similar but more advanced functionality as the ``altair-transform`` package).
+It is enabled with:
+
+.. code-block:: python
+
+    import vegafusion as vf
+    vf.enable()
+
+The mime renderer automates the :ref:`preaggregate-and-filter` workflow described above. Right before
+a chart is rendered, VegaFusion extracts the datasets and supported transforms and evaluates them in the
+Python kernel. It then removes any unused columns and inlines the transformed data into the chart specification
+for rendering.
+
+Charts rendered this way are self-contained and do not require the Python kernel or a custom
+notebook extension to display. They are rendered with the same frontend functionality that
+is already used to display regular Altair charts.
+
+Widget Renderer
+^^^^^^^^^^^^^^^
+The `VegaFusion widget renderer`_ is a good choice for displaying unaggregated data
+and for aggregated charts that re-aggregate or re-filter data in response to selections
+(so it offers similar but more advanced functionality as the ``altair-data-server`` package).
+It is enabled with:
+
+.. code-block:: python
+
+    import vegafusion as vf
+    vf.enable_widget()
+
+The widget renderer uses a Jupyter Widget extension to maintain a live connection between the displayed chart and the Python kernel.
+This makes it possible for transforms to be evaluated interactively in response to changes in selections,
+and to send the datasets to the client in arrow format separately instead of inlining them in the chart json spec. 
+
+Charts rendered this way require a running Python kernel and Jupyter Widget extension to
+display, which works in many frontends including locally in the classic notebook, JupyterLab, and VSCode,
+as well as remotely in Colab and Binder.
+
+.. _VegaFusion: https://vegafusion.io
+.. _VegaFusion mime renderer: https://vegafusion.io/mime_renderer.html
+.. _VegaFusion widget renderer: https://vegafusion.io/widget_renderer.html
+.. _vl-convert: https://github.com/vega/vl-convert
+.. _altair_saver: https://github.com/altair-viz/altair_saver/
diff --git a/doc/user_guide/marks.rst b/doc/user_guide/marks.rst
deleted file mode 100644
index 4fbcf54..0000000
--- a/doc/user_guide/marks.rst
+++ /dev/null
@@ -1,176 +0,0 @@
-.. currentmodule:: altair
-
-.. _user-guide-mark:
-
-Marks
------
-
-We saw in :ref:`user-guide-encoding` that the :meth:`~Chart.encode` method is
-used to map columns to visual attributes of the plot.
-The ``mark`` property is what specifies how exactly those attributes
-should be represented on the plot.
-
-Altair provides a number of basic mark properties:
-
-==========  ============================  ===================================================  ====================================
-Mark Name   Method                        Description                                          Example
-==========  ============================  ===================================================  ====================================
-arc         :meth:`~Chart.mark_arc`       A pie chart.                                         :ref:`gallery_pie_chart`
-area        :meth:`~Chart.mark_area`      A filled area plot.                                  :ref:`gallery_simple_stacked_area_chart`
-bar         :meth:`~Chart.mark_bar`       A bar plot.                                          :ref:`gallery_simple_bar_chart`
-circle      :meth:`~Chart.mark_circle`    A scatter plot with filled circles.                  :ref:`gallery_one_dot_per_zipcode`
-geoshape    :meth:`~Chart.mark_geoshape`  A geographic shape                                   :ref:`gallery_choropleth`
-image       :meth:`~Chart.mark_image`     A scatter plot with image markers.                   :ref:`user-guide-image-mark`
-line        :meth:`~Chart.mark_line`      A line plot.                                         :ref:`gallery_simple_line_chart`
-point       :meth:`~Chart.mark_point`     A scatter plot with configurable point shapes.       :ref:`gallery_scatter_linked_brush`
-rect        :meth:`~Chart.mark_rect`      A filled rectangle, used for heatmaps                :ref:`gallery_simple_heatmap`
-rule        :meth:`~Chart.mark_rule`      A vertical or horizontal line spanning the axis.     :ref:`gallery_candlestick_chart`
-square      :meth:`~Chart.mark_square`    A scatter plot with filled squares.                  N/A
-text        :meth:`~Chart.mark_text`      A scatter plot with points represented by text.      :ref:`gallery_bar_chart_with_labels`
-tick        :meth:`~Chart.mark_tick`      A vertical or horizontal tick mark.                  :ref:`gallery_strip_plot`
-trail       :meth:`~Chart.mark_trail`     A line with variable widths.                         :ref:`gallery_trail_marker`
-==========  ============================  ===================================================  ====================================
-
-In addition, Altair provides the following compound marks:
-
-==========  ==============================  ================================  ==================================
-Mark Name   Method                          Description                       Example
-==========  ==============================  ================================  ==================================
-box plot    :meth:`~Chart.mark_boxplot`     A box plot.                       :ref:`gallery_boxplot`
-error band  :meth:`~Chart.mark_errorband`   A continuous band around a line.  :ref:`gallery_line_with_ci`
-error bar   :meth:`~Chart.mark_errorbar`    An errorbar around a point.       :ref:`gallery_errorbars_with_ci`
-==========  ==============================  ================================  ==================================
-
-In Altair, marks can be most conveniently specified by the ``mark_*`` methods
-of the Chart object, which take optional keyword arguments that are passed to
-:class:`MarkDef` to configure the look of the marks.
-
-For example, the following uses :meth:`~Chart.mark_circle` with additional
-arguments to represent points as red semi-transparent filled circles:
-
-.. altair-plot::
-
-   import altair as alt
-   from vega_datasets import data
-
-   url = data.cars.url
-
-   alt.Chart(url).mark_circle(
-       color='red',
-       opacity=0.3
-   ).encode(
-       x='Horsepower:Q',
-       y='Miles_per_Gallon:Q'
-   )
-
-.. _user-guide-image-mark:
-
-Image Mark
-~~~~~~~~~~
-The image mark, unlike other simple marks, requires the mark to include a
-``url`` encoding, which specifies the PNG to use for the image:
-
-.. altair-plot::
-
-   import altair as alt
-   import pandas as pd
-   
-   source = pd.DataFrame.from_records([
-         {"x": 0.5, "y": 0.5, "img": "https://vega.github.io/vega-datasets/data/ffox.png"},
-         {"x": 1.5, "y": 1.5, "img": "https://vega.github.io/vega-datasets/data/gimp.png"},
-         {"x": 2.5, "y": 2.5, "img": "https://vega.github.io/vega-datasets/data/7zip.png"}
-   ])
-   
-   alt.Chart(source).mark_image(
-       width=50, 
-       height=50
-   ).encode(
-       x='x', 
-       y='y', 
-       url='img'
-   )
-
-.. _user-guide-compound-marks:
-
-Compound Marks
-~~~~~~~~~~~~~~
-
-BoxPlot
-^^^^^^^
-
-The compound mark :meth:`~Chart.mark_boxplot` can be used to create a boxplot without having to specify each part of the plot (box, whiskers, outliers) separately.
-
-
-.. altair-plot::
-
-    import altair as alt
-    from vega_datasets import data
-
-    source = data.population.url
-
-    alt.Chart(source).mark_boxplot().encode(
-        y='people:Q'
-    ).properties(
-        width=200, 
-        height=300
-    )
-
-
-To create a side-by-side boxplot, simply encode the group column on the other axis.
-
-
-.. altair-plot::
-
-  import altair as alt
-  from vega_datasets import data
-
-  source = data.population.url
-
-  alt.Chart(source).mark_boxplot().encode(
-      x='age:O',
-      y='people:Q'
-  )
-
-Note that the default behavior is to display outliers as points, where an outlier is defined as any point more than 1.5 IQRs from the box.  
-Users can adjust this threshold using the ``extent`` property of the mark.
-
-
-.. altair-plot::
-
-  import altair as alt
-  from vega_datasets import data
-
-  source = data.population.url
-
-  alt.Chart(source).mark_boxplot(extent=3.0).encode(
-      x='age:O',
-      y='people:Q'
-  )
-
-
-The outliers can be ignored completely using ``extent='min-max'``
-
-
-.. altair-plot::
-
-
-  import altair as alt
-  from vega_datasets import data
-
-  source = data.population.url
-
-  alt.Chart(source).mark_boxplot(extent='min-max').encode(
-      x='age:O',
-      y='people:Q'
-  )
-
-Mark Properties
-~~~~~~~~~~~~~~~
-
-As seen in the last two examples, additional arguments to ``mark_*()`` methods are passed along to an
-associated :class:`MarkDef` instance, which supports the following attributes:
-
-.. altair-object-table:: altair.MarkDef
-
-Marks can also be configured globally using chart-level configurations; see
-:ref:`config-mark` for details.
diff --git a/doc/user_guide/marks/arc.rst b/doc/user_guide/marks/arc.rst
new file mode 100644
index 0000000..0f153a2
--- /dev/null
+++ b/doc/user_guide/marks/arc.rst
@@ -0,0 +1,126 @@
+.. currentmodule:: altair
+
+.. _user-guide-arc-marks:
+
+Arc
+~~~
+
+Arc marks are circular arcs defined by a center point plus angular and radial extents.
+Arc marks are typically used for radial plots such as pie and donut charts.
+
+Arc Mark Properties
+-------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+    import numpy as np
+    import pandas as pd
+
+    rad_slider = alt.binding_range(min=0, max=100, step=1)
+    rad_var = alt.param(bind=rad_slider, value=0, name="radius")
+
+    rad2_slider = alt.binding_range(min=0, max=100, step=1)
+    rad_var2 = alt.param(bind=rad_slider, value=50, name="radius2")
+
+    theta_slider = alt.binding_range(min=-2 * np.pi, max=2 * np.pi)
+    theta_var = alt.param(bind=theta_slider, value=-0.73, name="theta_single_arc")
+
+    theta_slider2 = alt.binding_range(min=-2 * np.pi, max=2 * np.pi)
+    theta2_var = alt.param(bind=theta_slider, value=0.73, name="theta2_single_arc")
+
+    corner_slider = alt.binding_range(min=0, max=50, step=1)
+    corner_var = alt.param(bind=corner_slider, value=0, name="cornerRadius")
+
+    pad_slider = alt.binding_range(min=0, max=np.pi / 2)
+    pad_var = alt.param(bind=pad_slider, value=0, name="padAngle")
+
+    source = pd.DataFrame({"category": [1, 2, 3, 4, 5, 6], "value": [4, 6, 10, 3, 7, 8]})
+
+    c1 = alt.Chart(source, title="Single Arc").mark_arc(
+        radius=rad_var,
+        radius2=rad_var2,
+        theta=theta_var,
+        theta2=theta2_var,
+        cornerRadius=corner_var,
+        padAngle=pad_var,
+    )
+
+    c2 = (
+        alt.Chart(source, title="Stacked Arcs")
+        .mark_arc(
+            radius=rad_var,
+            radius2=rad_var2,
+            cornerRadius=corner_var,
+            padAngle=pad_var,
+        )
+        .encode(
+            theta=alt.Theta(field="value", type="quantitative"),
+            color=alt.Color(field="category", type="nominal"),
+        )
+    )
+
+    alt.hconcat(c1.properties(width=200), c2.properties(width=200)).add_params(
+        rad_var, rad_var2, theta_var, theta2_var, corner_var, pad_var
+    )
+
+An ``arc`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: radius radius2 innerRadius outerRadius theta theta2 cornerRadius padAngle radiusOffset radius2Offset thetaOffset theta2Offset
+
+Examples
+--------
+
+We can create a pie chart by encoding ``theta`` or ``color`` arc marks.
+
+.. altair-plot::
+    import pandas as pd
+    import altair as alt
+
+    source = pd.DataFrame({"category": [1, 2, 3, 4, 5, 6], "value": [4, 6, 10, 3, 7, 8]})
+
+    alt.Chart(source).mark_arc().encode(
+        theta=alt.Theta(field="value", type="quantitative"),
+        color=alt.Color(field="category", type="nominal"),
+    )
+
+
+Setting ``innerRadius`` to non-zero values will create a donut chart.
+
+.. altair-plot::
+    import pandas as pd
+    import altair as alt
+
+    source = pd.DataFrame({"category": [1, 2, 3, 4, 5, 6], "value": [4, 6, 10, 3, 7, 8]})
+
+    alt.Chart(source).mark_arc(innerRadius=50).encode(
+        theta=alt.Theta(field="value", type="quantitative"),
+        color=alt.Color(field="category", type="nominal"),
+    )
+
+
+You can also add a text layer to add labels to a pie chart.
+
+.. altair-plot::
+    import pandas as pd
+    import altair as alt
+
+    source = pd.DataFrame(
+        {"category": ["a", "b", "c", "d", "e", "f"], "value": [4, 6, 10, 3, 7, 8]}
+    )
+
+    base = alt.Chart(source).encode(
+        theta=alt.Theta("value:Q").stack(True),
+        color=alt.Color("category:N").legend(None),
+    )
+
+    pie = base.mark_arc(outerRadius=120)
+    text = base.mark_text(radius=140, size=20).encode(
+        text="category:N"
+    )
+
+    pie + text
+
diff --git a/doc/user_guide/marks/area.rst b/doc/user_guide/marks/area.rst
new file mode 100644
index 0000000..78c7786
--- /dev/null
+++ b/doc/user_guide/marks/area.rst
@@ -0,0 +1,190 @@
+.. currentmodule:: altair
+
+.. _user-guide-area-marks:
+
+Area
+~~~~~~~~~~
+``area`` represent multple data element as a single area shape.
+Area marks are often used to show change over time, using either a single area or stacked areas.
+
+Area Mark Properties
+--------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+    import pandas as pd
+
+    interpolate_select = alt.binding_select(
+        options=[
+            "basis",
+            "cardinal",
+            "catmull-rom",
+            "linear",
+            "monotone",
+            "natural",
+            "step",
+            "step-after",
+            "step-before",
+        ],
+        name="interpolate",
+    )
+    interpolate_var = alt.param(bind=interpolate_select, value="linear")
+
+    tension_slider = alt.binding_range(min=0, max=1, step=0.05, name="tension")
+    tension_var = alt.param(bind=tension_slider, value=0)
+
+    source = pd.DataFrame({"u": [1, 2, 3, 4, 5, 6], "v": [28, 55, 42, 34, 36, 38]})
+
+    alt.Chart(source).mark_area(interpolate=interpolate_var, tension=tension_var).encode(
+        x="u", y="v"
+    ).add_params(interpolate_var, tension_var)
+
+
+An ``area`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following line interpolation as well as line and point overlay properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: align baseline orient interpolate tension line point
+
+Examples
+--------
+
+Area Chart
+^^^^^^^^^^
+Using ``area`` mark with one temporal or ordinal field (typically on ``x``) and
+one quantitative field (typically on ``y``) produces an area chart. For example,
+the following area chart shows a number of unemployment people in the US over time.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.unemployment_across_industries.url
+
+    alt.Chart(source).mark_area().encode(
+        x="yearmonth(date):T",
+        y="sum(count):Q",
+    ).properties(width=300, height=200)
+
+
+Area Chart with Overlaying Lines and Point Markers
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+By setting ``line`` and ``point`` properties of the mark definition
+to ``true`` or an object defining a property of the overlaying point marks, we can overlay line and point markers on top of area.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+    from altair.expr import datum
+
+    source = data.stocks.url
+
+    alt.Chart(source).mark_area(line=True, point=True).encode(
+        x="date:T",
+        y="price:Q",
+    ).transform_filter(
+        alt.datum.symbol == "GOOG"
+    )
+
+Instead of using a single color as the fill color of the area, we can set it to a gradient.
+In this example, we are also customizing the overlay. For more information about gradient options see the `Vega-Lite Gradient documentation
+<https://vega.github.io/vega-lite/docs/gradient.html>`_.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).transform_filter(alt.datum.symbol == "GOOG").mark_area(
+        line={"color": "darkgreen"},
+        color=alt.Gradient(
+            gradient="linear",
+            stops=[
+                alt.GradientStop(color="white", offset=0),
+                alt.GradientStop(color="darkgreen", offset=1),
+            ],
+            x1=1,
+            x2=1,
+            y1=1,
+            y2=0,
+        ),
+    ).encode(
+        alt.X("date:T"),
+        alt.Y("price:Q"),
+    )
+
+
+Stacked Area Chart
+^^^^^^^^^^^^^^^^^^
+Adding a color field to area chart creates stacked area chart by default. For example, here we split the area chart by industry.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.unemployment_across_industries.url
+
+    alt.Chart(source).mark_area().encode(
+        alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
+        alt.Y("sum(count):Q"),
+        alt.Color("series:N").scale(scheme="category20b"),
+    )
+
+
+Normalized Stacked Area Chart
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can also create a normalized stacked area chart by setting ``stack`` to ``"normalize"`` in the encoding channel. Here we can easily see the percentage of unemployment across industries.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.unemployment_across_industries.url
+
+    alt.Chart(source).mark_area().encode(
+        alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
+        alt.Y("sum(count):Q").stack("normalize"),
+        alt.Color("series:N").scale(scheme="category20b"),
+    )
+
+
+Steamgraph
+^^^^^^^^^^^
+
+We can also shift the stacked area chart's baseline to center and produces a streamgraph by setting ``stack`` to ``"center"`` in the encoding channel.
+Adding the ``interactive`` method allows for zooming and panning the x-scale.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.unemployment_across_industries.url
+
+    alt.Chart(source).mark_area().encode(
+        alt.X("yearmonth(date):T").axis(format="%Y", domain=False, tickSize=0),
+        alt.Y("sum(count):Q").stack("center").axis(None),
+        alt.Color("series:N").scale(scheme="category20b"),
+    ).interactive()
+
+
+Ranged Area
+^^^^^^^^^^^
+Specifying ``X2`` or ``Y2`` for the quantitative axis of area marks produce ranged areas. For example, we can use ranged area to highlight the mininium and maximum measured temperatures over time, aggregated by ``monthdate``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.seattle_weather()
+
+    alt.Chart(source).mark_area(opacity=0.7).encode(
+        alt.X("monthdate(date):T").title("Date"),
+        alt.Y("mean(temp_max):Q").title("Daily Temperature Range (C)"),
+        alt.Y2("mean(temp_min):Q"),
+    ).properties(width=600, height=300)
+
diff --git a/doc/user_guide/marks/bar.rst b/doc/user_guide/marks/bar.rst
new file mode 100644
index 0000000..85482f8
--- /dev/null
+++ b/doc/user_guide/marks/bar.rst
@@ -0,0 +1,156 @@
+.. currentmodule:: altair
+
+.. _user-guide-bar-marks:
+
+Bar
+~~~
+
+Bar marks are useful in many visualizations, including bar charts, stacked bar charts, and timelines.
+
+Bar Mark Properties
+-------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+    import pandas as pd
+
+    corner_slider = alt.binding_range(min=0, max=50, step=1)
+    corner_var = alt.param(bind=corner_slider, value=0, name="cornerRadius")
+
+    source = pd.DataFrame(
+        {
+            "a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"],
+            "b": [28, 55, 43, 91, 81, 53, 19, 87, 52],
+        }
+    )
+
+    alt.Chart(source).mark_bar(cornerRadius=corner_var).encode(
+        x=alt.X("a:N").axis(labelAngle=0),
+        y="b:Q",
+    ).add_params(corner_var)
+
+
+
+A ``bar`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: width height orient align baseline binSpacing cornerRadius cornerRadiusEnd cornerRadiusTopLeft cornerRadiusTopRight cornerRadiusBottomRight cornerRadiusBottomLeft
+
+Examples
+--------
+
+Single Bar Chart
+^^^^^^^^^^^^^^^^
+Mapping a quantitative field to either ``x`` or ``y`` of the ``bar`` mark produces a single bar chart.
+
+.. altair-plot::
+    import altair as alt
+    from altair import datum
+    from vega_datasets import data
+
+    source = data.population.url
+
+    alt.Chart(source).mark_bar().encode(
+        alt.X("sum(people):Q").title("Population")
+    ).transform_filter(
+        datum.year == 2000
+    )
+
+
+Bar Chart
+^^^^^^^^^
+If we map a different discrete field to the ``y`` channel, we can produce a horizontal bar chart. Specifying ``alt.Step(20)`` will adjust the bar's height per discrete step.
+
+.. altair-plot::
+    import altair as alt
+    from altair import datum
+    from vega_datasets import data
+
+    source = data.population.url
+
+    alt.Chart(source).mark_bar().encode(
+        alt.X("sum(people):Q").title("Population"),
+        alt.Y("age:O"),
+    ).transform_filter(
+        datum.year == 2000
+    ).properties(height=alt.Step(20))
+
+
+Bar Chart with a Temporal Axis
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+While the ``bar`` mark typically uses the ``x`` and ``y`` channels to encode
+a pair of discrete and continuous fields, it can also be used with continuous
+fields on both channels. For example, given a bar chart with a temporal field
+on ``x``, we can see that the x-scale is a continuous scale. By default, the size of
+bars on continuous scales will be set based on the ``continuousBandSize`` config.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.seattle_weather()
+
+    alt.Chart(source).mark_bar().encode(
+        alt.X("month(date):T").title("Date"),
+        alt.Y("mean(precipitation):Q"),
+    )
+
+
+Histograms
+^^^^^^^^^^
+
+If the data is not pre-aggregated (i.e. each record in the data field represents one item), mapping a binned quantitative field to ``x`` and aggregate ``count`` to ``y`` produces a histogram.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.movies.url
+
+    alt.Chart(source).mark_bar().encode(
+        alt.X("IMDB_Rating:Q").bin(),
+        y='count()',
+    )
+
+Stacked Bar Chart
+^^^^^^^^^^^^^^^^^
+Adding color to the bar chart (by using the ``color`` attribute) creates a stacked bar chart by default. Here we also customize the color’s scale range to make the color a little nicer. (See ``stack`` for more details about customizing stack.)
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    alt.Chart(source).mark_bar().encode(
+        x="variety",
+        y="sum(yield)",
+        color="site"
+    )
+
+
+Grouped Bar Chart with Offset
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. altair-plot::
+    import altair as alt
+    import pandas as pd
+
+    source = pd.DataFrame(
+        {
+            "category": ["A", "A", "B", "B", "C", "C"],
+            "group": ["x", "y", "z", "x", "y", "z"],
+            "value": [0.1, 0.6, 0.9, 0.7, 0.2, 0.6],
+        }
+    )
+
+    alt.Chart(source).mark_bar().encode(
+        x=alt.X("category:N"),
+        xOffset="group:N",
+        y=alt.Y("value:Q"),
+        color=alt.Color("group:N"),
+    )
+
diff --git a/doc/user_guide/marks/boxplot.rst b/doc/user_guide/marks/boxplot.rst
new file mode 100644
index 0000000..ed9291d
--- /dev/null
+++ b/doc/user_guide/marks/boxplot.rst
@@ -0,0 +1,112 @@
+.. currentmodule:: altair
+
+.. _user-guide-boxplot-marks:
+
+Box Plot
+~~~~~~~~~
+
+A box plot summarizes a distribution of quantitative values using a set of summary statistics. The median tick in the box represents the median. The lower and upper parts of the box represent the first and third quartile respectively. Depending on the type of box plot, the ends of the whiskers can represent multiple things.
+
+To create a box plot, use the ``mark_boxplot`` method.
+
+Box Plot Mark Properties
+^^^^^^^^^^^^^^^^^^^^^^^^
+A box plot's mark definition can contain the following properties:
+
+.. altair-object-table:: altair.BoxPlotDef
+   :properties: extent orient size color opacity
+
+Besides the properties listed above, ``box``, ``median``, ``rule``, ``outliers``, and ``ticks`` can be used to specify the underlying mark properties for different parts of the box plots as well.
+
+Types of Box Plot
+^^^^^^^^^^^^^^^^^
+Altair supports two types of box plots, defined by the ``extent`` property in the mark definition object.
+
+1. Tukey Box Plot is the default box plot in Altair. For a Tukey box plot, the whisker spans from the smallest data to the largest data within the range [Q1 - k * IQR, Q3 + k * IQR] where Q1 and Q3 are the first and third quartiles while IQR is the interquartile range (Q3-Q1). In this type of box plot, you can specify the constant k by setting the ``extent``. If there are outlier points beyond the whisker, they will be displayed using point marks.
+By default, the extent is ``1.5``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_boxplot().encode(
+        alt.X("Miles_per_Gallon:Q").scale(zero=False)
+    )
+
+
+2. ``min-max`` Box Plot is a box plot where the lower and upper whiskers are defined as the min and max respectively. No points will be considered as outliers for this type of box plots.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_boxplot(extent="min-max").encode(
+        alt.X("Miles_per_Gallon:Q").scale(zero=False),
+        alt.Y("Origin:N"),
+    )
+
+
+Dimension and Orientation
+^^^^^^^^^^^^^^^^^^^^^^^^^
+Altair supports bot 1D and 2D box plots:
+
+1D box plot shows the distribution of a continuous field.
+A box plot’s orientation is automatically determined by the continuous field axis. For example, you can create a vertical 1D box plot by encoding a continuous field on the y axis.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_boxplot().encode(
+        alt.Y("Miles_per_Gallon:Q").scale(zero=False)
+    )
+
+2D box plot shows the distribution of a continuous field, broken down by categories.
+
+For 2D box plots with one continuous field and one discrete field, the box plot will be horizontal if the continuous field is on the x axis.
+
+Color, Size, and Opacity Encoding Channels
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can customize the color, size, and opacity of the box in the box plot by using the ``color``, ``size``, and ``opacity`` encoding channels. The ``size`` is applied to only the box and median tick. The ``color`` is applied to only the box and the outlier points. Meanwhile, the ``opacity`` is applied to the whole ``boxplot``.
+
+An example of a box plot where the ``color`` encoding channel is specified.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_boxplot(extent="min-max").encode(
+        alt.X("Origin:N"),
+        alt.Y("Miles_per_Gallon:Q").scale(zero=False),
+        alt.Color("Origin:N").legend(None),
+    )
+
+
+Tooltip Encoding Channels
+^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can add custom tooltips to box plots. The custom tooltip will override the default box plot's tooltips.
+
+If the field in the tooltip encoding is unaggregated, it replaces the tooltips of the outlier marks. On the other hand, if the field in the tooltip encoding is aggregated, it replaces the tooltips of the box and whisker marks.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_boxplot(extent="min-max").encode(
+        alt.X("Miles_per_Gallon:Q").scale(zero=False),
+        alt.Y("Origin:N"),
+        alt.Tooltip("mean(Miles_per_Gallon)"),
+    )
+
diff --git a/doc/user_guide/marks/circle.rst b/doc/user_guide/marks/circle.rst
new file mode 100644
index 0000000..71d41a3
--- /dev/null
+++ b/doc/user_guide/marks/circle.rst
@@ -0,0 +1,34 @@
+.. currentmodule:: altair
+
+.. _user-guide-circle-marks:
+
+Circle
+~~~~~~
+
+``circle`` mark is similar to ``point`` mark, except that (1) the ``shape`` value is always set to ``circle`` (2) they are filled by default.
+
+Circle Mark Properties
+^^^^^^^^^^^^^^^^^^^^^^
+A ``circle`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: size
+
+Scatter Plot with Circle
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+Here is an example scatter plot with ``circle`` marks:
+
+.. altair-plot::
+   import altair as alt
+   from vega_datasets import data
+
+   source = data.cars.url
+
+   alt.Chart(source).mark_circle().encode(
+      x=("Horsepower:Q"),
+      y=("Miles_per_Gallon:Q"),
+   )
+
+
diff --git a/doc/user_guide/marks/errorband.rst b/doc/user_guide/marks/errorband.rst
new file mode 100644
index 0000000..9ce2810
--- /dev/null
+++ b/doc/user_guide/marks/errorband.rst
@@ -0,0 +1,171 @@
+.. currentmodule:: altair
+
+.. _user-guide-errorband-marks:
+
+Error Band
+~~~~~~~~~~
+
+An error band summarizes an error range of quantitative values using a set of summary statistics, representing by area. Error band in Altair can either be used to aggregate raw data or directly visualize aggregated data.
+
+To create an error band, use ``mark_errorband``.
+
+Error Band Mark Properties
+^^^^^^^^^^^^^^^^^^^^^^^^^^
+An ``errorband`` mark definition can contain the following properties:
+
+.. altair-object-table:: altair.ErrorBandDef
+   :properties: extent orient color opacity interpolate tension
+
+Besides the properties listed above, ``band`` and ``borders`` can be used to specify
+the underlying mark properties for different parts of the error band as well.
+
+Comparing the usage of Error Band to the usage of Error Bar
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+All the properties and usage of error band are identical to error bar’s, except the ``band`` and ``borders`` that replace the error bar’s ``rule`` and ``ticks``.
+
+**Error Band**
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars.url
+
+    alt.Chart(source).mark_errorband(extent="ci", borders=True).encode(
+        x="year(Year)",
+        y=alt.Y(
+            "Miles_per_Gallon:Q",
+            scale=alt.Scale(zero=False),
+            title="Miles per Gallon (95% CIs)",
+        ),
+    )
+
+
+**Error Bar**
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars.url
+
+    alt.Chart(source).mark_errorbar(extent="ci", ticks=True).encode(
+        x="year(Year)",
+        y=alt.Y(
+            "Miles_per_Gallon:Q",
+            scale=alt.Scale(zero=False),
+            title="Miles per Gallon (95% CIs)",
+        ),
+    )
+
+Using Error Band to Aggregate Raw Data
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If the data is not aggregated yet, Altair will aggregate the data based on the ``extent`` properties in the mark definition as done in the error band showing confidence interval above. All other ``extent`` values are defined in Error Bar.
+
+Using Error Band to Visualize Aggregated Data
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+1. Data is aggregated with low and high values of the error band
+If the data is already pre-aggregated with low and high values of the error band, you can directly specify ``x`` and ``x2`` (or ``y`` and ``y2``) to use error band as a ranged mark.
+
+.. altair-plot::
+    import altair as alt
+    import pandas as pd
+
+    source = pd.DataFrame(
+        {
+            "ci1": [23.5007, 25.8214, 26.4472, 27.7074],
+            "ci0": [19.6912, 20.8554, 21.9749, 22.6203],
+            "center": [21.5735, 23.3750, 24.0611, 25.0931],
+            "Year": [189302400000, 220924800000, 252460800000, 283996800000],
+        }
+    )
+
+    band = alt.Chart(source).mark_errorband().encode(
+        alt.Y(
+            "ci1:Q",
+            scale=alt.Scale(zero=False),
+            title="Mean of Miles per Gallon (95% CIs)"
+        ),
+        alt.Y2("ci0:Q"),
+        alt.X("year(Year)"),
+    )
+
+    line = alt.Chart(source).mark_line().encode(
+        alt.Y("center:Q"),
+        alt.X("year(Year)")
+    )
+
+    band + line
+
+2. Data is aggregated with center and error value(s)
+If the data is already pre-aggregated with center and error values of the error band, you can use ``x/y``, ``x/yError``, and ``x/yError2`` as defined in Error Bar.
+
+Dimension
+^^^^^^^^^
+
+Altair supports both 1D and 2D error bands:
+
+A **1D error band** shows the error range of a continuous field; it can be used to show the global error range of the whole plot.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars.url
+
+    band = alt.Chart(source).mark_errorband(extent="stdev").encode(
+        alt.Y("Miles_per_Gallon:Q").title("Miles per Gallon")
+    )
+
+    points = alt.Chart(source).mark_point().encode(
+        x="Horsepower:Q",
+        y="Miles_per_Gallon:Q",
+    )
+
+    band + points
+
+
+A **2D error** band shows the error range of a continuous field for each dimension value such as year.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    line = alt.Chart(source).mark_line().encode(
+        x="Year",
+        y="mean(Miles_per_Gallon)"
+    )
+
+    band = alt.Chart(source).mark_errorband(extent="ci").encode(
+        x="Year",
+        y=alt.Y("Miles_per_Gallon").title("Miles/Gallon"),
+    )
+
+    band + line
+
+Color and Opacity Encoding Channels
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can customize the color and opacity of the bands by using the ``color`` and ``opacity`` encoding channels.
+
+Here is an example of a ``errorband`` with the ``color`` encoding channel set to ``alt.value('black')``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars.url
+
+    alt.Chart(source).mark_errorband(extent="ci", borders=True).encode(
+        x="year(Year)",
+        y=alt.Y("Miles_per_Gallon:Q")
+            .scale(zero=False)
+            .title("Miles per Gallon (95% CIs)"),
+        color=alt.value("black")
+    )
+
+
diff --git a/doc/user_guide/marks/errorbar.rst b/doc/user_guide/marks/errorbar.rst
new file mode 100644
index 0000000..8fc4ae8
--- /dev/null
+++ b/doc/user_guide/marks/errorbar.rst
@@ -0,0 +1,252 @@
+.. currentmodule:: altair
+
+.. _user-guide-errorbar-marks:
+
+Error Bar
+~~~~~~~~~~
+
+An error bar summarizes an error range of quantitative values using a set of summary statistics,
+representing by rules (and optional end ticks). Error bars in Altair can either be used to aggregate
+raw data or directly visualize aggregated data.
+
+To create an error bar, use ``mark_errorbar``.
+
+Error Bar Mark Properties
+^^^^^^^^^^^^^^^^^^^^^^^^^
+An ``errorbar`` mark definition can contain the following properties:
+
+.. altair-object-table:: altair.ErrorBarDef
+   :properties: extent orient color opacity
+
+Besides the properties listed above, ``rule`` and ``ticks`` can be used to specify
+the underlying mark properties for different parts of the error bar as well.
+
+Using Error Bars to Aggregate Raw Data
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+If the data is not aggregated yet, Altair will aggregate the data based on the ``extent`` properties in the mark definition.
+
+1. **Error bars showing standard error** is the default error bar in Vega-Lite. It can also be explicitly specified by setting ``extent`` to ``"stderr"``. The length of lower and upper rules represent standard error. By default, the rule marks expand from the mean.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    error_bars = alt.Chart(source).mark_errorbar().encode(
+        x=alt.X('yield:Q').scale(zero=False),
+        y=alt.Y('variety:N')
+    )
+
+    points = alt.Chart(source).mark_point(
+        filled=True,
+        color="black",
+    ).encode(
+        x=alt.X("mean(yield)"),
+        y=alt.Y("variety:N"),
+    )
+
+    error_bars + points
+
+2. **Error bar showing standard deviation** can be specified by setting ``extent`` to ``"stdev"``. For this type of error bar, the length of lower and upper rules represent standard deviation. Like an error bar that shows Standard Error, the rule marks expand from the mean by default.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    error_bars = alt.Chart(source).mark_errorbar(extent="stdev").encode(
+        x=alt.X("yield:Q").scale(zero=False),
+        y=alt.Y("variety:N"),
+    )
+
+    points = alt.Chart(source).mark_point(filled=True, color="black").encode(
+        x=alt.X("mean(yield)"),
+        y=alt.Y("variety:N"),
+    )
+
+    error_bars + points
+
+
+3. **Error bars showing interquartile range** can be specified by setting ``extent`` to ``"iqr"``. For this type of error bar, the rule marks expand from the first quartile to the third quartile.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    error_bars = alt.Chart(source).mark_errorbar(extent="iqr").encode(
+        x=alt.X("yield:Q").scale(zero=False),
+        y=alt.Y("variety:N"),
+    )
+
+    points = alt.Chart(source).mark_point(
+        filled=True,
+        color="black"
+    ).encode(
+        x=alt.X("mean(yield)"),
+        y=alt.Y("variety:N"),
+    )
+
+    error_bars + points
+
+Using Error Bars to Visualize Aggregated Data
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+1. Data is aggregated with low and high values of the error bars
+If the data is already pre-aggregated with low and high values of the error bars, you can directly specify ``x`` and ``x2`` (or ``y`` and ``y2``) to use error bar as a ranged mark.
+
+.. altair-plot::
+    import altair as alt
+    import pandas as pd
+
+    source = pd.DataFrame({
+        "lower_yield": [23.1311, 23.9503, 24.7778, 21.7823],
+        "upper_yield": [43.5522, 38.9775, 46.9167, 48.9732],
+        "center": [32.4, 30.96667, 33.966665, 30.45],
+        "variety": ["Glabron", "Manchuria", "No. 457", "No. 462"],
+    })
+
+    bar = alt.Chart(source).mark_errorbar().encode(
+        alt.X("upper_yield:Q").scale(zero=False).title("yield"),
+        alt.X2("lower_yield:Q"),
+        alt.Y("variety:N"),
+    )
+
+    point = alt.Chart(source).mark_point(
+        filled=True,
+        color="black"
+    ).encode(
+        alt.X("center:Q"),
+        alt.Y("variety:N")
+    )
+
+    point + bar
+
+2. Data is aggregated with center and error value(s)
+If the data is already pre-aggregated with center and error values of the error bars, you can directly specify ``x`` as center, ``xError`` and ``xError2`` as error values extended from center (or ``y``, ``yError``, and ``yError2``). If ``x/yError2`` is omitted, error bars have symmetric error values.
+
+.. altair-plot::
+    import altair as alt
+    import pandas as pd
+
+    source = pd.DataFrame({
+        "yield_error": [7.5522, 6.9775, 3.9167, 11.9732],
+        "yield_center": [32.4, 30.96667, 33.966665, 30.45],
+        "variety": ["Glabron", "Manchuria", "No. 457", "No. 462"],
+    })
+
+    bar = alt.Chart(source).mark_errorbar().encode(
+        x=alt.X("yield_center:Q").scale(zero=False).title("yield"),
+        xError=("yield_error:Q"),
+        y=alt.Y("variety:N"),
+    )
+
+    point = alt.Chart(source).mark_point(
+        filled=True,
+        color="black"
+    ).encode(
+        alt.X("yield_center:Q"),
+        alt.Y("variety:N"),
+    )
+
+    point + bar
+
+**Note** if error is pre-aggregated with asymmetric error values one of ``x/yError`` and ``x/yError2`` has to be positive value and other has to be negative value.
+
+Dimension & Orientation
+^^^^^^^^^^^^^^^^^^^^^^^
+Altair supports both 1D and 2D error bands:
+
+A **1D error band** shows the error range of a continuous field.
+
+The orientation of an error bar is automatically determined by the continuous field axis. For example, you can create a vertical 1D error bar by encoding a continuous field on the y axis.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    error_bars = alt.Chart(source).mark_errorbar().encode(
+        alt.Y("yield:Q").scale(zero=False)
+    )
+
+    points = alt.Chart(source).mark_point(
+        filled=True,
+        color="black"
+    ).encode(
+        alt.Y("mean(yield)")
+    )
+
+    error_bars + points
+
+A **2D error bar** shows the error range of a continuous field, broken down by categories.
+
+For 2D error bars with one continuous field and one discrete field, the error bars will be horizontal if the continuous field is on the x axis. Alternatively, if the continuous field is on the y axis, the error bar will be vertical.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    error_bars = alt.Chart(source).mark_errorbar(extent="stdev").encode(
+        alt.Y("yield:Q").scale(zero=False),
+        alt.X("variety:N"),
+    )
+
+    points = alt.Chart(source).mark_point(
+        filled=True,
+        color="black",
+    ).encode(
+        alt.Y("mean(yield)"),
+        alt.X("variety:N"),
+    )
+
+    error_bars + points
+
+Color, and Opacity Encoding Channels
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+You can customize the color and opacity of the bars by using the ``color`` and ``opacity`` encoding channels.
+
+Here is an example of a ``errorbar`` with the ``color`` encoding channel set to ``alt.value("#4682b4")``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    error_bars = alt.Chart(source).mark_errorbar(ticks=True).encode(
+        alt.X("yield:Q").scale(zero=False),
+        alt.Y("variety:N"),
+        color=alt.value("#4682b4"),
+    )
+
+    points = alt.Chart(source).mark_point(
+        filled=True,
+        color="black"
+    ).encode(
+        alt.X("mean(yield)"),
+        alt.Y("variety:N"),
+    )
+
+    error_bars + points
+
+Tooltip Encoding Channels
+^^^^^^^^^^^^^^^^^^^^^^^^^
+You can add custom tooltips to error bars. The custom tooltip will override the default error bar’s tooltips.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.barley()
+
+    alt.Chart(source).mark_errorbar().encode(
+        alt.X("yield:Q").scale(zero=False),
+        alt.Y("variety:N"),
+        tooltip="variety:N",
+    )
diff --git a/doc/user_guide/marks/geoshape.rst b/doc/user_guide/marks/geoshape.rst
new file mode 100644
index 0000000..8218272
--- /dev/null
+++ b/doc/user_guide/marks/geoshape.rst
@@ -0,0 +1,632 @@
+.. currentmodule:: altair
+
+.. _user-guide-geoshape-marks:
+
+Geoshape
+^^^^^^^^^^^^^
+``mark_geoshape`` represents an arbitrary shapes whose geometry is determined by specified spatial data.
+
+Geoshape Mark Properties
+^^^^^^^^^^^^^^^^^^^^^^^^
+A ``geoshape`` mark can contain any :ref:`standard mark properties <mark-properties>`.
+
+Basic Map
+^^^^^^^^^
+Altair can work with many different geographical data formats, including geojson and topojson files. Often, the most convenient input format to use is a ``GeoDataFrame``. Here we load the Natural Earth 110m Cultural Vectors dataset and create a basic map using ``mark_geoshape``:
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+    import geopandas as gpd
+
+    url = "https://naciscdn.org/naturalearth/110m/cultural/ne_110m_admin_0_countries.zip"
+    gdf_ne = gpd.read_file(url)  # zipped shapefile
+    gdf_ne = gdf_ne[["NAME", "CONTINENT", "POP_EST", 'geometry']]
+
+    alt.Chart(gdf_ne).mark_geoshape()
+
+In the example above, Altair applies a default blue ``fill`` color and uses a default map projection (``equalEarth``). We can customize the colors and boundary stroke widths using standard mark properties. Using the ``project`` method we can also define a custom map projection manually:
+
+.. altair-plot::
+
+    alt.Chart(gdf_ne).mark_geoshape(
+        fill='lightgrey', stroke='white', strokeWidth=0.5
+    ).project(
+        type='albers'
+    )
+
+Focus & Filtering
+^^^^^^^^^^^^^^^^^
+By default Altair automatically adjusts the projection so that all the data fits within the width and height of the chart.
+Multiple approaches can be used to focus on specific regions of your spatial data. Namely:
+
+1. Filter the source data within your GeoDataFrame.
+2. Filter the source data using a ``transform_filter``.
+3. Specify ``scale`` (zoom level) and ``translate`` (panning) within the ``project`` method.
+4. Specify ``fit`` (extent) within the ``project`` & ``clip=True`` in the mark properties.
+
+The following examples applies these approaches to focus on continental Africa:
+
+1. Filter the source data within your GeoDataFrame:
+
+.. altair-plot::
+
+    gdf_sel = gdf_ne.query("CONTINENT == 'Africa'")
+
+    alt.Chart(gdf_sel).mark_geoshape()
+
+2. Filter the source data using a ``transform_filter``:
+
+.. altair-plot::
+
+    alt.Chart(gdf_ne).mark_geoshape().transform_filter(
+        alt.datum.CONTINENT == 'Africa'
+    )
+
+3. Specify ``scale`` (zoom level) and ``translate`` (panning) within the ``project`` method:
+
+.. altair-plot::
+
+    alt.Chart(gdf_ne).mark_geoshape().project(
+        scale=200,
+        translate=[160, 160]  # lon, lat
+    )
+
+4. Specify ``fit`` (extent) within the ``project`` method & ``clip=True`` in the mark properties:
+
+.. altair-plot::
+
+    extent_roi = gdf_ne.query("CONTINENT == 'Africa'")
+    xmin, ymin, xmax, ymax = extent_roi.total_bounds
+
+    # fit object should be a GeoJSON-like Feature or FeatureCollection 
+    extent_roi_feature = {
+        "type": "Feature", 
+        "geometry": {"type": "Polygon", 
+                     "coordinates": [[
+                         [xmax, ymax],
+                         [xmax, ymin],
+                         [xmin, ymin],
+                         [xmin, ymax],
+                         [xmax, ymax]]]},
+        "properties": {}
+    }
+
+    alt.Chart(gdf_ne).mark_geoshape(clip=True).project(
+        fit=extent_roi_feature
+    )
+
+Cartesian coordinates
+^^^^^^^^^^^^^^^^^^^^^
+The default projection of Altair is ``equalEarth``, which accurately represents the areas of the world's landmasses relative each other. This default assumes that your geometries are in degrees and referenced by longitude and latitude values.
+Another widely used coordinate system for data visualization is the 2d cartesian coordinate system. This coordinate system does not take into account the curvature of the Earth.
+
+In the following example the input geometry is not projected and is instead rendered directly in raw coordinates using the ``identity`` projection type. We have to define the ``reflectY`` as well since Canvas and SVG treats positive ``y`` as pointing down.
+
+.. altair-plot::
+
+    alt.Chart(gdf_sel).mark_geoshape().project(
+        type='identity',
+        reflectY=True
+    )
+
+Mapping Polygons
+^^^^^^^^^^^^^^^^
+The following example maps the visual property of the ``NAME`` column using the ``color`` encoding.
+
+.. altair-plot::
+
+    alt.Chart(gdf_sel).mark_geoshape().encode(
+        color='NAME:N'
+    )
+
+Since each country is represented by a (multi)polygon, we can separate the ``stroke`` and ``fill`` definitions as such:
+
+.. altair-plot::
+
+    alt.Chart(gdf_sel).mark_geoshape(
+        stroke='white',
+        strokeWidth=1.5
+    ).encode(
+        fill='NAME:N'
+    )
+
+Mapping Lines
+^^^^^^^^^^^^^
+By default Altair assumes for ``mark_geoshape`` that the mark's color is used for the fill color instead of the stroke color.
+This means that if your source data contain (multi)lines, you will have to explicitly define the ``filled`` value as ``False``.
+
+Compare:
+
+.. altair-plot::
+
+    gs_line = gpd.GeoSeries.from_wkt(['LINESTRING (0 0, 1 1, 0 2, 2 2, -1 1, 1 0)'])
+    alt.Chart(gs_line).mark_geoshape().project(
+        type='identity',
+        reflectY=True
+    )
+
+With:
+
+.. altair-plot::
+
+    gs_line = gpd.GeoSeries.from_wkt(['LINESTRING (0 0, 1 1, 0 2, 2 2, -1 1, 1 0)'])
+    alt.Chart(gs_line).mark_geoshape(
+        filled=False
+    ).project(
+        type='identity',
+        reflectY=True
+    )
+
+Using this approach one can also style Polygons as if they are Linestrings:
+
+.. altair-plot::
+
+    alt.Chart(gdf_sel).mark_geoshape(
+        filled=False,
+        strokeWidth=1.5
+    ).encode(
+        stroke='NAME:N'
+    )
+
+Mapping Points
+^^^^^^^^^^^^^^
+Points can be drawn when they are defined as ``Points`` within a GeoDataFrame using ``mark_geoshape``.
+We first assign the centroids of Polygons as Point geometry and plot these:
+
+.. altair-plot::
+    
+    # .copy() to prevent changing the original `gdf_sel` variable
+    # derive centroid in a projected CRS (in meters) and visualize in a geographic CRS (in degrees).
+    gdf_centroid = gpd.GeoDataFrame(
+        data=gdf_sel.copy(),
+        geometry=gdf_sel.geometry.to_crs(epsg=3857).centroid.to_crs(epsg=4326)
+    )
+
+    alt.Chart(gdf_centroid).mark_geoshape()
+
+
+Caveat: To use the ``size`` encoding for the Points you will need to use the ``mark_circle`` in combination with the ``latitude`` and ``longitude`` encoding channel definitions.
+
+.. altair-plot::
+
+    gdf_centroid["lon"] = gdf_centroid.geometry.x
+    gdf_centroid["lat"] = gdf_centroid.geometry.y
+
+    alt.Chart(gdf_centroid).mark_circle().encode(
+        longitude="lon:Q", latitude="lat:Q", size="POP_EST:Q"
+    )
+
+Altair also contains expressions related to geographical features. We can for example define the ``centroids`` using a ``geoCentroid`` expression:
+
+.. altair-plot::
+
+    from altair.expr import datum, geoCentroid
+
+    basemap = alt.Chart(gdf_sel).mark_geoshape(
+         fill='lightgray', stroke='white', strokeWidth=0.5
+    )
+
+    bubbles = alt.Chart(gdf_sel).transform_calculate(
+        centroid=geoCentroid(None, datum)
+    ).mark_circle(
+        stroke='black'
+    ).encode(
+        longitude='centroid[0]:Q',
+        latitude='centroid[1]:Q',
+        size="POP_EST:Q"
+    )
+
+    (basemap + bubbles).project(
+        type='identity', reflectY=True
+    )
+
+Choropleths
+^^^^^^^^^^^
+
+An alternative to showing the population sizes as bubbles, is to create a "Choropleth" map. These are geographical heatmaps where the color or each region are mapped to the values of a column in the dataframe.
+
+.. altair-plot::
+
+    alt.Chart(gdf_sel).mark_geoshape().encode(
+        color='POP_EST'
+    )
+
+When we create choropleth maps, we need to be careful, because although the color changes according to the value of the column we are interested in, the size is tied to the area of each country and we might miss interesting values in small countries just because we can't easily see them on the map (e.g. if we were to visualize population density).
+
+Lookup datasets
+^^^^^^^^^^^^^^^
+Sometimes your data is separated in two datasets. One ``DataFrame`` with the data and one ``GeoDataFrame`` with the geometries.
+In this case you can use the ``lookup`` transform to collect related information from the other dataset.
+
+You can use the ``lookup`` transform in two directions:
+
+1. Use a ``GeoDataFrame`` with geometries as source and lookup related information in another ``DataFrame``.
+2. Use a ``DataFrame`` as source and lookup related geometries in a ``GeoDataFrame``.
+
+Depending on your use-case one or the other is more favorable.
+
+First we show an example of the first approach.
+Here we lookup the field ``rate`` from the ``df_us_unemp`` DataFrame, where the ``gdf_us_counties`` GeoDataFrame is used as source:
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+    import geopandas as gpd
+
+    gdf_us_counties = gpd.read_file(data.us_10m.url, driver='TopoJSON', layer='counties')
+    df_us_unemp = data.unemployment()
+
+    alt.Chart(gdf_us_counties).mark_geoshape().transform_lookup(
+        lookup='id',
+        from_=alt.LookupData(data=df_us_unemp, key='id', fields=['rate'])
+    ).encode(
+        alt.Color('rate:Q')
+    ).project(
+        type='albersUsa'
+    )
+
+Next, we show an example of the second approach.
+Here we lookup the geometries through the fields ``geometry`` and ``type`` from the ``gdf_us_counties`` GeoDataFrame, where the ``df_us_unemp`` DataFrame is used as source.
+
+.. altair-plot::
+
+    alt.Chart(df_us_unemp).mark_geoshape().transform_lookup(
+        lookup='id',
+        from_=alt.LookupData(data=gdf_us_counties, key='id', fields=['geometry', 'type'])
+    ).encode(
+        alt.Color('rate:Q')
+    ).project(
+        type='albersUsa'
+    )
+
+Choropleth Classification
+^^^^^^^^^^^^^^^^^^^^^^^^^
+In addition to displaying a continuous quantitative variable, choropleths can also be used to show discrete levels of a variable. While we should generally be careful to not create artificial groups when discretizing a continuous variable, it can be very useful when we have natural cutoff levels of a variable that we want to showcase clearly.
+We first define a utility function ``classify()`` that we will use to showcase different approaches to make a choropleth map.
+We apply it to define a choropleth map of the unemployment statistics of 2018 of US counties using a ``linear`` scale.
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+    import geopandas as gpd
+
+    def classify(type, domain=None, nice=False, title=None):
+        # define data
+        us_counties = alt.topo_feature(data.us_10m.url, "counties")
+        us_unemp = data.unemployment.url
+
+        # define choropleth scale
+        if "threshold" in type:
+            scale = alt.Scale(type=type, domain=domain, scheme="inferno")
+        else:
+            scale = alt.Scale(type=type, nice=nice, scheme="inferno")
+
+        # define title
+        if title is None:
+            title = type
+
+        # define choropleth chart
+        choropleth = (
+            alt.Chart(us_counties, title=title)
+            .mark_geoshape()
+            .transform_lookup(
+                lookup="id", from_=alt.LookupData(data=us_unemp, key="id", fields=["rate"])
+            )
+            .encode(
+                alt.Color(
+                    "rate:Q",
+                    scale=scale,
+                    legend=alt.Legend(
+                        direction="horizontal", orient="bottom", format=".1%"
+                    ),
+                )
+            )
+            .project(type="albersUsa")
+        )
+        return choropleth
+
+    classify(type='linear')
+
+We visualize the unemployment ``rate`` in percentage of 2018 with a ``linear`` scale range
+using a ``mark_geoshape()`` to present the spatial patterns on a map. Each value/
+county has defined a `unique` color. This gives a bit of insight, but often we like to
+group the distribution into classes.
+
+By grouping values in classes, you can classify the dataset so all values/geometries in
+each class get assigned the same color.
+
+Here we present a number of scale methods how Altair can be used:
+
+- ``quantile``, this type will divide your dataset (`domain`) into intervals of similar sizes. Each class contains more or less the same number of values/geometries (`equal counts`). The scale definition will look as follow:
+
+.. code:: python
+
+    alt.Scale(type='quantile')
+
+And applied in our utility function:
+
+.. altair-plot::
+
+    classify(type='quantile', title=['quantile', 'equal counts'])
+
+- ``quantize``, this type will divide the extent of your dataset (`range`) in equal intervals. Each class contains different number of values, but the step size is equal (`equal range`). The scale definition will look as follow:
+
+.. code:: python
+
+    alt.Scale(type='quantize')
+
+And applied in our utility function:
+
+.. altair-plot::
+
+    classify(type='quantize', title=['quantize', 'equal range'])
+
+
+The ``quantize`` method can also be used in combination with ``nice``. This will `"nice"` the domain before applying quantization. As such:
+
+.. code:: python
+
+    alt.Scale(type='quantize', nice=True)
+
+And applied in our utility function:
+
+.. altair-plot::
+
+    classify(type='quantize', nice=True, title=['quantize', 'equal range nice'])
+
+- ``threshold``, this type will divide your dataset in separate classes by manually specifying the cut values. Each class is separated by defined classes. The scale definition will look as follow:
+
+.. code:: python
+
+    alt.Scale(type='threshold', domain=[0.05, 0.20])
+
+And applied in our utility function:
+
+.. altair-plot::
+
+    classify(type='threshold', domain=[0.05, 0.20])
+
+The definition above will create 3 classes. One class with values below `0.05`, one
+class with values from `0.05` to `0.20` and one class with values higher than `0.20`.
+
+So which method provides the optimal data classification for choropleth maps? As
+usual, it depends.
+
+There is another popular method that aid in determining class breaks.
+This method will maximize the similarity of values in a class while maximizing the
+distance between the classes (`natural breaks`). The method is also known as the
+Fisher-Jenks algorithm and is similar to k-Means in 1D:
+
+-  By using the external Python package ``jenskpy`` we can derive these `optimum` breaks as such:
+
+.. code:: python
+
+    >>> from jenkspy import JenksNaturalBreaks
+    >>> jnb = JenksNaturalBreaks(5)
+    >>> jnb.fit(df_us_unemp['rate'])
+    >>> jnb.inner_breaks_
+    [0.061, 0.088, 0.116, 0.161]
+
+And applied in our utility function:
+
+.. altair-plot::
+
+    classify(type='threshold', domain=[0.061, 0.088, 0.116, 0.161],
+            title=['threshold Jenks','natural breaks'])
+
+Caveats:
+
+- For the type ``quantize`` and ``quantile`` scales we observe that the default number of classes is 5. You can change the number of classes using a ``SchemeParams()`` object. In the above specification we can change ``scheme='turbo'`` into ``scheme=alt.SchemeParams('turbo', count=2)`` to manually specify usage of 2 classes for the scheme within the scale.
+- The natural breaks method will determine the optimal class breaks given the required number of classes, but how many classes should you pick? One can investigate usage of goodness of variance fit (GVF), aka Jenks optimization method, to determine this.
+
+Repeat a Map
+^^^^^^^^^^^^
+The :class:`RepeatChart` pattern, accessible via the :meth:`Chart.repeat` method
+provides a convenient interface for a particular type of horizontal or vertical
+concatenation of a multi-dimensional dataset.
+
+In the following example we have a dataset referenced as ``source`` from which we use
+three columns defining the ``population``, ``engineers`` and ``hurricanes`` of each US state.
+
+The ``states`` is defined by making use of :func:`topo_feature` using ``url`` and ``feature``
+as parameters. This is a convenience function for extracting features from a topojson url.
+
+These variables we provide as list in the ``.repeat()`` operator, which we refer to within
+the color encoding as ``alt.repeat('row')``
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+
+    states = alt.topo_feature(data.us_10m.url, 'states')
+    source = data.population_engineers_hurricanes.url
+    variable_list = ['population', 'engineers', 'hurricanes']
+
+    alt.Chart(states).mark_geoshape(tooltip=True).encode(
+        alt.Color(alt.repeat('row'), type='quantitative')
+    ).transform_lookup(
+        lookup='id',
+        from_=alt.LookupData(source, 'id', variable_list)
+    ).project(
+        type='albersUsa'
+    ).repeat(
+        row=variable_list
+    ).resolve_scale(
+        color='independent'
+    )
+
+Facet a Map
+^^^^^^^^^^^
+The :class:`FacetChart` pattern, accessible via the :meth:`Chart.facet` method
+provides a convenient interface for a particular type of horizontal or vertical
+concatenation of a dataset where one field contain multiple ``variables``.
+
+Unfortunately, the following open issue https://github.com/altair-viz/altair/issues/2369
+will make the following not work for geographic visualization:
+
+.. altair-plot::
+
+    source = data.population_engineers_hurricanes().melt(id_vars=['state', 'id'])
+    us_states = gpd.read_file(data.us_10m.url, driver='TopoJSON', layer='states')
+    gdf_comb = gpd.GeoDataFrame(source.join(us_states, on='id', rsuffix='_y'))
+
+    alt.Chart(gdf_comb).mark_geoshape().encode(
+        color=alt.Color('value:Q'),
+        facet=alt.Facet('variable:N').columns(3)
+    ).properties(
+        width=180,
+        height=130
+    ).resolve_scale('independent')
+
+For now, the following workaround can be adopted to facet a map, manually filter the
+data in pandas, and create a small multiples chart via concatenation. For example:
+
+.. altair-plot::
+
+    alt.concat(
+        *(
+            alt.Chart(gdf_comb[gdf_comb.variable == var], title=var)
+            .mark_geoshape()
+            .encode(
+                color=alt.Color(
+                    "value:Q", legend=alt.Legend(orient="bottom", direction="horizontal")
+                )
+            )
+            .project('albersUsa')
+            .properties(width=180, height=130)
+            for var in gdf_comb.variable.unique()
+        ),
+        columns=3
+    ).resolve_scale(color="independent")
+
+Interaction
+^^^^^^^^^^^
+Often a map does not come alone, but is used in combination with another chart.
+Here we provide an example of an interactive visualization of a bar chart and a map.
+
+The data shows the states of the US in combination with a bar chart showing the 15 most
+populous states. Using an ``alt.selection_point()`` we define a selection parameter that connects to our left-mouseclick.
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+    import geopandas as gpd
+
+    # load the data
+    us_states = gpd.read_file(data.us_10m.url, driver="TopoJSON", layer="states")
+    us_population = data.population_engineers_hurricanes()[["state", "id", "population"]]
+
+    # define a pointer selection
+    click_state = alt.selection_point(fields=["state"])
+
+    # create a choropleth map using a lookup transform
+    # define a condition on the opacity encoding depending on the selection
+    choropleth = (
+        alt.Chart(us_states)
+        .mark_geoshape()
+        .transform_lookup(
+            lookup="id", from_=alt.LookupData(us_population, "id", ["population", "state"])
+        )
+        .encode(
+            color="population:Q",
+            opacity=alt.condition(click_state, alt.value(1), alt.value(0.2)),
+            tooltip=["state:N", "population:Q"],
+        )
+        .project(type="albersUsa")
+    )
+
+    # create a bar chart with a similar condition on the opacity encoding.
+    bars = (
+        alt.Chart(
+            us_population.nlargest(15, "population"), title="Top 15 states by population"
+        )
+        .mark_bar()
+        .encode(
+            x="population",
+            opacity=alt.condition(click_state, alt.value(1), alt.value(0.2)),
+            color="population",
+            y=alt.Y("state").sort("-x"),
+        )
+    )
+
+    (choropleth & bars).add_params(click_state)
+
+
+The interaction is two-directional. If you click (shift-click for multi-selection) on a geometry or bar the selection receive an ``opacity`` of ``1`` and the remaining an ``opacity`` of ``0.2``.
+
+Expression
+^^^^^^^^^^
+Altair expressions can be used within a geographical visualization. The following example
+visualize earthquakes on the globe using an ``orthographic`` projection. Where we can rotate
+the earth on a single-axis. (``rotate0``). The utility function :func:`sphere` is adopted to
+get a disk of the earth as background. The GeoDataFrame with the earthquakes has an ``XYZ``` point geometry, where each coordinate represent ``lon``, ``lat`` and ``depth`` respectively.
+We use here an elegant way to access the nested point coordinates from the geometry column directly to draw circles. Using this approach we do not need to assign them to three separate columns first.
+
+.. altair-plot::
+
+    import altair as alt
+    from vega_datasets import data
+    import geopandas as gpd
+
+    # load data
+    gdf_quakies = gpd.read_file(data.earthquakes.url, driver="GeoJSON")
+    gdf_world = gpd.read_file(data.world_110m.url, driver="TopoJSON")
+
+    # define parameters
+    range0 = alt.binding_range(min=-180, max=180, step=5, name='rotate longitude ')
+    rotate0 = alt.param(value=120, bind=range0)
+    hover = alt.selection_point(on="mouseover", clear="mouseout")
+
+    # world disk
+    sphere = alt.Chart(alt.sphere()).mark_geoshape(
+        fill="aliceblue", stroke="black", strokeWidth=1.5
+    )
+
+    # countries as shapes
+    world = alt.Chart(gdf_world).mark_geoshape(
+        fill="mintcream", stroke="black", strokeWidth=0.35
+    )
+
+    # earthquakes as circles with fill for depth and size for magnitude
+    # the hover param is added on the mar_circle only
+    quakes = (
+        alt.Chart(gdf_quakies)
+        .mark_circle(opacity=0.35, tooltip=True, stroke="black")
+        .transform_calculate(
+            lon="datum.geometry.coordinates[0]",
+            lat="datum.geometry.coordinates[1]",
+            depth="datum.geometry.coordinates[2]",
+        )
+        .transform_filter(
+            ((rotate0 * -1 - 90 < alt.datum.lon) & (alt.datum.lon < rotate0 * -1 + 90)).expr
+        )
+        .encode(
+            longitude="lon:Q",
+            latitude="lat:Q",
+            strokeWidth=alt.condition(hover, alt.value(1, empty=False), alt.value(0)),
+            size=alt.Size(
+                "mag:Q",
+                scale=alt.Scale(type="pow", range=[1, 1000], domain=[0, 6], exponent=4),
+            ),
+            fill=alt.Fill(
+                "depth:Q", scale=alt.Scale(scheme="lightorange", domain=[0, 400])
+            ),
+        )
+        .add_params(hover, rotate0)
+    )
+
+    # define projection and add the rotation param for all layers
+    comb = alt.layer(sphere, world, quakes).project(
+        type="orthographic",
+        rotate=alt.expr(f"[{rotate0.name}, 0, 0]")
+    )
+    comb
+
+The earthquakes are displayed using a ``mark_geoshape`` and filtered once out of sight of
+the visible part of the world. A hover highlighting is added to get more insight of each earthquake.
diff --git a/doc/user_guide/marks/image.rst b/doc/user_guide/marks/image.rst
new file mode 100644
index 0000000..673fc10
--- /dev/null
+++ b/doc/user_guide/marks/image.rst
@@ -0,0 +1,45 @@
+.. currentmodule:: altair
+
+.. _user-guide-image-marks:
+
+Image
+~~~~~~
+
+Image marks allow external images, such as icons or photographs, to be included in Altair visualizations. Image files such as PNG or JPG images are loaded from provided URLs.
+
+Image Mark Properties
+^^^^^^^^^^^^^^^^^^^^^
+An ``image`` mark can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: url aspect align baseline
+
+Scatter Plot with Image Marks
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. altair-plot::
+    import altair as alt
+    import pandas as pd
+
+    source = pd.DataFrame.from_records(
+        [
+            {
+                "x": 0.5,
+                "y": 0.5,
+                "img": "https://vega.github.io/vega-datasets/data/ffox.png",
+            },
+            {
+                "x": 1.5,
+                "y": 1.5,
+                "img": "https://vega.github.io/vega-datasets/data/gimp.png",
+            },
+            {
+                "x": 2.5,
+                "y": 2.5,
+                "img": "https://vega.github.io/vega-datasets/data/7zip.png",
+            },
+        ]
+    )
+
+    alt.Chart(source).mark_image(width=50, height=50).encode(x="x", y="y", url="img")
diff --git a/doc/user_guide/marks/index.rst b/doc/user_guide/marks/index.rst
new file mode 100644
index 0000000..39d27ad
--- /dev/null
+++ b/doc/user_guide/marks/index.rst
@@ -0,0 +1,106 @@
+.. currentmodule:: altair
+
+.. _user-guide-marks:
+
+Marks
+~~~~~
+
+We saw in :ref:`user-guide-encoding` that the :meth:`~Chart.encode` method is
+used to map columns to visual attributes of the plot.
+The ``mark`` property is what specifies how exactly those attributes
+should be represented on the plot.
+
+Altair supports the following primitive mark types:
+
+=========================================  =========================================  ================================================================================
+Mark                                       Method                                     Description
+=========================================  =========================================  ================================================================================
+:ref:`user-guide-arc-marks`                :meth:`~Chart.mark_arc`                    A pie chart.
+:ref:`user-guide-area-marks`               :meth:`~Chart.mark_area`                   A filled area plot.
+:ref:`user-guide-bar-marks`                :meth:`~Chart.mark_bar`                    A bar plot.
+:ref:`user-guide-circle-marks`             :meth:`~Chart.mark_circle`                 A scatter plot with filled circles.
+:ref:`user-guide-geoshape-marks`           :meth:`~Chart.mark_geoshape`               Visualization containing spatial data
+:ref:`user-guide-image-marks`              :meth:`~Chart.mark_image`                  A scatter plot with image markers.
+:ref:`user-guide-line-marks`               :meth:`~Chart.mark_line`                   A line plot.
+:ref:`user-guide-point-marks`              :meth:`~Chart.mark_point`                  A scatter plot with configurable point shapes.
+:ref:`user-guide-rect-marks`               :meth:`~Chart.mark_rect`                   A filled rectangle, used for heatmaps
+:ref:`user-guide-rule-marks`               :meth:`~Chart.mark_rule`                   A vertical or horizontal line spanning the axis.
+:ref:`user-guide-square-marks`             :meth:`~Chart.mark_square`                 A scatter plot with filled squares.
+:ref:`user-guide-text-marks`               :meth:`~Chart.mark_text`                   A scatter plot with points represented by text.
+:ref:`user-guide-tick-marks`               :meth:`~Chart.mark_tick`                   A vertical or horizontal tick mark.
+:ref:`user-guide-trail-marks`              :meth:`~Chart.mark_trail`                  A line with variable widths.
+=========================================  =========================================  ================================================================================
+
+In addition, Altair provides the following composite marks:
+
+=========================================  ==============================  ================================  ==================================
+Mark Name                                  Method                          Description                       Example
+=========================================  ==============================  ================================  ==================================
+:ref:`user-guide-boxplot-marks`            :meth:`~Chart.mark_boxplot`     A box plot.                       :ref:`gallery_boxplot`
+:ref:`user-guide-errorband-marks`          :meth:`~Chart.mark_errorband`   A continuous band around a line.  :ref:`gallery_line_with_ci`
+:ref:`user-guide-errorbar-marks`           :meth:`~Chart.mark_errorbar`    An error bar around a point.      :ref:`gallery_errorbars_with_ci`
+=========================================  ==============================  ================================  ==================================
+
+In Altair, marks can be most conveniently specified by the ``mark_*`` methods
+of the Chart object (e.g. ``mark_bar``), which take optional keyword arguments to configure the look of the marks.
+
+.. _mark-properties:
+
+Mark Properties
+_______________
+
+This section lists standard mark properties for primitive mark types. Additionally, some marks may have special mark properties (listed in their documentation page).
+
+General Mark Properties
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. altair-object-table:: altair.MarkDef
+   :properties: aria description style tooltip clip invalid order
+
+Position and Offset Properties
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. altair-object-table:: altair.MarkDef
+   :properties: x x2 width height y y2 xOffset x2Offset yOffset y2Offset
+
+Color Properties
+^^^^^^^^^^^^^^^^
+
+.. altair-object-table:: altair.MarkDef
+   :properties: filled color fill stroke blend opacity fillOpacity strokeOpacity
+
+Stroke Style Properties
+^^^^^^^^^^^^^^^^^^^^^^^
+
+.. altair-object-table:: altair.MarkDef
+   :properties: strokeCap strokeDash strokeDashOffset strokeJoin strokeMiterLimit strokeWidth
+
+Hyperlink Properties
+^^^^^^^^^^^^^^^^^^^^
+Marks can act as hyperlinks when the ``href`` property or :ref:`channel <hyperlink-channel>`
+is defined. When the ``href`` property is specified, the ``cursor`` mark property is
+set to ``"pointer"`` by default to serve as affordance for hyperlinks.
+
+.. altair-object-table:: altair.MarkDef
+   :properties: href cursor
+
+.. toctree::
+   :hidden:
+
+   arc
+   area
+   bar
+   boxplot
+   circle
+   errorband
+   errorbar
+   geoshape
+   image
+   line
+   point
+   rect
+   rule
+   square
+   text
+   tick
+   trail
\ No newline at end of file
diff --git a/doc/user_guide/marks/line.rst b/doc/user_guide/marks/line.rst
new file mode 100644
index 0000000..9820574
--- /dev/null
+++ b/doc/user_guide/marks/line.rst
@@ -0,0 +1,356 @@
+.. currentmodule:: altair
+
+.. _user-guide-line-marks:
+
+Line
+~~~~
+The ``line`` mark represents the data points stored in a field with a line connecting all of these points. Line marks are commonly used to depict trajectories or change over time. Unlike most other marks that represent one data element per mark, one line mark represents multiple data element as a single line, akin to ``area`` and ``trail``.
+
+Note: For line segments that connect (x,y) positions to (x2,y2) positions, please use ``rule`` marks. For continuous lines with varying size, please use ``trail`` marks.
+
+Line Mark Properties
+--------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+    import pandas as pd
+
+    interpolate_select = alt.binding_select(
+        options=[
+            "basis",
+            "cardinal",
+            "catmull-rom",
+            "linear",
+            "monotone",
+            "natural",
+            "step",
+            "step-after",
+            "step-before",
+        ],
+        name="interpolate",
+    )
+    interpolate_var = alt.param(bind=interpolate_select, value="linear")
+
+    tension_slider = alt.binding_range(min=0, max=1, step=0.05, name="tension")
+    tension_var = alt.param(bind=tension_slider, value=0)
+
+    strokeWidth_slider = alt.binding_range(min=0, max=10, step=0.5, name="strokeWidth")
+    strokeWidth_var = alt.param(bind=strokeWidth_slider, value=2)
+
+    strokeCap_select = alt.binding_select(
+        options=["butt", "round", "square"],
+        name="strokeCap",
+    )
+    strokeCap_var = alt.param(bind=strokeCap_select, value="butt")
+
+    strokeDash_select = alt.binding_select(
+        options=[[1, 0], [8, 8], [8, 4], [4, 4], [4, 2], [2, 1], [1, 1]],
+        name="strokeDash",
+    )
+    strokeDash_var = alt.param(bind=strokeDash_select, value=[1, 0])
+
+    source = pd.DataFrame({"u": [1, 2, 3, 4, 5, 6], "v": [28, 55, 42, 34, 36, 38]})
+
+    alt.Chart(source).mark_line(
+        interpolate=interpolate_var,
+        tension=tension_var,
+        strokeWidth=strokeWidth_var,
+        strokeCap=strokeCap_var,
+        strokeDash=strokeDash_var,
+    ).encode(x="u", y="v").add_params(
+        interpolate_var, tension_var, strokeWidth_var, strokeCap_var, strokeDash_var
+    )
+
+A ``line`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following line interpolation and point overlay properties:
+
+.. altair-object-table:: altair.MarkDef
+    :properties: orient interpolate tension point
+
+Examples
+--------
+Line Chart
+^^^^^^^^^^
+Using line with one temporal or ordinal field (typically on ``x``) and another quantitative field (typically on ``y``) produces a simple line chart with a single line.
+
+.. altair-plot::
+    import altair as alt
+    from altair import datum
+    from vega_datasets import data
+
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line().encode(
+        x="date",
+        y="price",
+    ).transform_filter(datum.symbol == "GOOG")
+
+We can add create multiple lines by grouping along different attributes, such as ``color`` or ``detail``.
+
+Multi-series Colored Line Chart
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Adding a field to a mark property channel such as ``color`` groups data points into different series, producing a multi-series colored line chart.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line().encode(
+        x="date",
+        y="price",
+        color="symbol",
+    )
+
+We can further apply selection to highlight a certain line on hover.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    highlight = alt.selection_point(
+        on="mouseover", fields=["symbol"], nearest=True
+    )
+
+    base = alt.Chart(source).encode(
+        x="date:T",
+        y="price:Q",
+        color="symbol:N"
+    )
+
+    points = base.mark_circle().encode(
+        opacity=alt.value(0)
+    ).add_params(
+        highlight
+    ).properties(
+        width=600
+    )
+
+    lines = base.mark_line().encode(
+        size=alt.condition(~highlight, alt.value(1), alt.value(3))
+    )
+
+    points + lines
+
+Multi-series Line Chart with Varying Dashes
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+Adding a field to ``strokeDash`` also produces a multi-series line chart.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line().encode(
+        x="date",
+        y="price",
+        strokeDash="symbol",
+    )
+
+We can also use line grouping to create a line chart that has multiple parts with varying styles.
+
+.. altair-plot::
+    import altair as alt
+    import pandas as pd
+
+    source = pd.DataFrame({ 
+        "a": ["A", "B", "D", "E", "E", "G", "H"],
+        "b": [28, 55, 91, 81, 81, 19, 87],
+        "predicted": [False, False, False, False, True, True, True]
+    })
+
+    alt.Chart(source).mark_line().encode(
+        x="a:O",
+        y="b:Q",
+        strokeDash="predicted:N"
+    )
+
+Multi-series Line Chart with the Detail Channel
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+To group lines by a field without mapping the field to any visual properties, we can map the field to the ``detail`` channel to create a multi-series line chart with the same color.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line().encode(
+        x="date",
+        y="price",
+        detail="symbol",
+    )
+
+The same method can be used to group lines for a ranged dot plot.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.countries()
+
+    base = alt.Chart(source).encode(
+        alt.X("life_expect:Q")
+            .scale(zero=False)
+            .title("Life Expectancy (years)"),
+        alt.Y("country:N")
+            .axis(offset=5, ticks=False, minExtent=70, domain=False)
+            .title("Country")
+    ).transform_filter(
+        alt.FieldOneOfPredicate(field="country", oneOf=["China", "India", "United States", "Indonesia", "Brazil"])
+    )
+
+
+    line = base.mark_line().encode(
+        detail="country",
+        color=alt.value("#db646f")
+    ).transform_filter(
+        alt.FieldOneOfPredicate(field="year", oneOf=[1995, 2000])
+    )
+
+    point = base.mark_point(filled=True).encode(
+        alt.Color("year").scale(range=["#e6959c", "#911a24"], domain=[1995, 2000]),
+        size=alt.value(100),
+        opacity=alt.value(1),
+    )
+
+    line + point
+
+Line Chart with Point Markers
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+By setting the ``point`` property of the mark definition to ``True`` or an object defining a property of the overlaying point marks, we can overlay point markers on top of a line.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line(point=True).encode(
+        x="year(date)",
+        y="mean(price):Q",
+        color="symbol:N"
+    )
+
+This is equivalent to adding another layer of filled point marks.
+
+Note that the overlay point marks have ``opacity`` = 1 by default (instead of semi-transparent like normal point marks).
+
+Here we create stroked points by setting ``filled`` to ``False`` and ``fill`` to ``"white"``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line(
+        point=alt.OverlayMarkDef(filled=False, fill="white")
+    ).encode(
+        x="year(date)",
+        y="mean(price):Q",
+        color="symbol:N"
+    )
+
+Connected Scatter Plot (Line Chart with Custom Path)
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+The line’s path (order of points in the line) is determined by data values on the temporal/ordinal field by default. However, a field can be mapped to the ``order`` channel for determining a custom path.
+
+For example, to show a pattern of data change over time between gasoline price and average miles driven per capita we use ``order`` channel to sort the points in the line by time field (year). In this example, we also use the ``point`` property to overlay point marks over the line marks to highlight each data point.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.driving()
+
+    alt.Chart(source).mark_line(point=True).encode(
+        alt.X("miles").scale(zero=False),
+        alt.Y("gas").scale(zero=False),
+        order="year",
+    )
+
+Line interpolation
+^^^^^^^^^^^^^^^^^^
+The ``interpolate`` property of a mark definition can be used to change line interpolation method. For example, we can set ``interpolate`` to ``"monotone"``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line(interpolate="monotone").encode(
+        x="date",
+        y="price",
+    ).transform_filter(
+        alt.datum.symbol == "GOOG"
+    )
+
+We can also set ``interpolate`` to ``"step-after"`` to create a step-chart.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_line(interpolate="step-after").encode(
+        x="date",
+        y="price"
+    ).transform_filter(
+        alt.datum.symbol == "GOOG"
+    )
+
+
+Geo Line
+^^^^^^^^
+By mapping geographic coordinate data to ``longitude`` and ``latitude`` channels of a corresponding projection, we can draw lines through geographic points.
+
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+    import pandas as pd
+
+    airports = data.airports.url
+    flights_airport = data.flights_airport.url
+
+    states = alt.topo_feature(data.us_10m.url, feature="states")
+
+    lookup_data = alt.LookupData(
+        airports, key="iata", fields=["state", "latitude", "longitude"]
+    )
+
+    source = pd.DataFrame({
+        "airport": ["SEA", "SFO", "LAX", "LAS", "DFW", "DEN", "ORD", "JFK"],
+        "order": [1, 2, 3, 4, 5, 6, 7, 8],
+    })
+
+    background = alt.Chart(states).mark_geoshape(
+        fill="lightgray",
+        stroke="white"
+    ).properties(
+        width=750,
+        height=500,
+    ).project("albersUsa")
+
+    line = alt.Chart(source).mark_line().encode(
+        latitude="latitude:Q",
+        longitude="longitude:Q",
+        order="order"
+    ).transform_lookup(
+        lookup="airport",
+        from_=lookup_data
+    )
+    
+    background + line
+
diff --git a/doc/user_guide/marks/point.rst b/doc/user_guide/marks/point.rst
new file mode 100644
index 0000000..0f1cac3
--- /dev/null
+++ b/doc/user_guide/marks/point.rst
@@ -0,0 +1,213 @@
+.. currentmodule:: altair
+
+.. _user-guide-point-marks:
+
+Point
+~~~~~
+``point`` mark represents each data point with a symbol. Point marks are commonly used in visualizations like scatter plots.
+
+Point Mark Properties
+---------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    shape_select = alt.binding_select(
+        options=[
+            "arrow",
+            "circle",
+            "square",
+            "cross",
+            "diamond",
+            "triangle",
+            "triangle-up",
+            "triangle-down",
+            "triangle-right",
+            "triangle-left",
+            "wedge",
+            "stroke",
+            "M-1,-1H1V1H-1Z",
+            "M0,.5L.6,.8L.5,.1L1,-.3L.3,-.4L0,-1L-.3,-.4L-1,-.3L-.5,.1L-.6,.8L0,.5Z",
+        ],
+        name="shape",
+    )
+    shape_var = alt.param(bind=shape_select, value="circle")
+
+    angle_slider = alt.binding_range(min=-360, max=360, step=1, name="angle")
+    angle_var = alt.param(bind=angle_slider, value=0)
+
+    size_slider = alt.binding_range(min=0, max=500, step=10, name="size")
+    size_var = alt.param(bind=size_slider, value=50)
+
+    strokeWidth_slider = alt.binding_range(min=0, max=10, step=0.5, name="strokeWidth")
+    strokeWidth_var = alt.param(bind=strokeWidth_slider, value=2)
+
+    alt.Chart(source).mark_point(
+        shape=shape_var,
+        angle=angle_var,
+        size=size_var,
+        strokeWidth=strokeWidth_var,
+    ).encode(x="Horsepower:Q", y="Miles_per_Gallon:Q").add_params(
+        shape_var, angle_var, size_var, strokeWidth_var
+    )
+
+A ``point`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: shape size
+
+Examples
+--------
+Dot Plot
+^^^^^^^^
+Mapping a field to either only ``x`` or only ``y`` of point marks creates a dot plot.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.movies()
+    alt.Chart(source).mark_point().encode(
+        x="IMDB_Rating:Q"
+    )
+
+Scatter Plot
+^^^^^^^^^^^^
+Mapping fields to both the ``x`` and ``y`` channels creates a scatter plot.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_point().encode(
+        x="Horsepower:Q",
+        y="Miles_per_Gallon:Q",
+    )
+
+By default, ``point`` marks only have borders and are transparent inside. You can create a filled point by setting ``filled`` to ``True``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_point(filled=True).encode(
+        x="Horsepower:Q",
+        y="Miles_per_Gallon:Q",
+    )
+
+Bubble Plot
+^^^^^^^^^^^
+By mapping a third field to the ``size`` channel in the scatter plot, we can create a bubble plot instead.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_point().encode(
+        x="Horsepower:Q",
+        y="Miles_per_Gallon:Q",
+        size="Acceleration:Q",
+    )
+
+Scatter Plot with Color and/or Shape
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Fields can also be encoded in the scatter plot using the ``color`` or ``shape`` channels. For example, this specification encodes the field ``Origin`` with both ``color`` and ``shape``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_point().encode(
+        alt.X("Miles_per_Gallon:Q").scale(zero=False),
+        alt.Y("Horsepower:Q").scale(zero=False),
+        color="Origin:N",
+        shape="Origin:N",
+    )
+
+
+Dot Plot with Jittering
+^^^^^^^^^^^^^^^^^^^^^^^
+To jitter points on a discrete scale, you can add a random offset:
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_point().encode(
+        x="Horsepower:Q",
+        y="Cylinders:O",
+        yOffset="random:Q",
+    ).transform_calculate(
+        random="random()"
+    ).properties(
+        height=alt.Step(50)
+    )
+
+Wind Vector Example
+^^^^^^^^^^^^^^^^^^^
+We can also use point mark with ``wedge`` as ``shape`` and ``angle`` encoding to create a wind vector map. Other shape options are:
+``"circle"``, ``"square"``, ``"cross"``, ``"diamond"``, ``"triangle-up"``, ``"triangle-down"``, ``"triangle-right"``, ``"triangle-left"``, ``"stroke"``, ``"arrow"``, and ``"triangle"``.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.windvectors()
+
+    alt.Chart(source).mark_point(shape="wedge", filled=True).encode(
+        latitude="latitude",
+        longitude="longitude",
+        color=alt.Color("dir").scale(domain=[0, 360], scheme="rainbow").legend(None),
+        angle=alt.Angle("dir").scale(domain=[0, 360], range=[180, 540]),
+        size=alt.Size("speed").scale(rangeMax=500),
+    ).project("equalEarth")
+
+Geo Point
+^^^^^^^^^
+By mapping geographic coordinate data to ``longitude`` and ``latitude`` channels of a corresponding projection, we can visualize geographic points. The example below shows major airports in the US.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    airports = data.airports()
+    states = alt.topo_feature(data.us_10m.url, feature="states")
+
+    # US states background
+    background = alt.Chart(states).mark_geoshape(
+        fill="lightgray",
+        stroke="white"
+    ).properties(
+        width=500,
+        height=300,
+    ).project("albersUsa")
+
+    # airport positions on background
+    points = alt.Chart(airports).mark_circle(
+        size=10,
+        color="steelblue",
+    ).encode(
+        longitude="longitude:Q",
+        latitude="latitude:Q",
+        tooltip=["name", "city", "state"],
+    )
+
+    background + points
+
diff --git a/doc/user_guide/marks/rect.rst b/doc/user_guide/marks/rect.rst
new file mode 100644
index 0000000..3bb51f2
--- /dev/null
+++ b/doc/user_guide/marks/rect.rst
@@ -0,0 +1,91 @@
+.. currentmodule:: altair
+
+.. _user-guide-rect-marks:
+
+Rect
+~~~~
+
+The ``rect`` mark represents an arbitrary rectangle.
+
+Rect Mark Properties
+--------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+
+    x_slider = alt.binding_range(min=1, max=100, step=1, name="x")
+    x_var = alt.param(bind=x_slider, value=25)
+
+    x2_slider = alt.binding_range(min=1, max=100, step=1, name="x2")
+    x2_var = alt.param(bind=x2_slider, value=75)
+
+    y_slider = alt.binding_range(min=1, max=100, step=1, name="y")
+    y_var = alt.param(bind=y_slider, value=25)
+
+    y2_slider = alt.binding_range(min=1, max=100, step=1, name="y2")
+    y2_var = alt.param(bind=y2_slider, value=75)
+
+    cornerRadius_slider = alt.binding_range(min=0, max=50, step=1)
+    cornerRadius_var = alt.param(bind=cornerRadius_slider, value=0, name="cornerRadius")
+
+    alt.Chart().mark_rect(cornerRadius=cornerRadius_var, color="orange").encode(
+        x=alt.XDatum(x_var, type="quantitative", scale=alt.Scale(domain=[0, 100])),
+        x2=alt.X2Datum(x2_var),
+        y=alt.XDatum(y_var, type="quantitative", scale=alt.Scale(domain=[0, 100])),
+        y2=alt.X2Datum(y2_var),
+    ).add_params(x_var, x2_var, y_var, y2_var, cornerRadius_var)
+
+
+A ``rect`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: width height align baseline cornerRadius
+
+Examples
+--------
+Heatmap
+^^^^^^^
+
+Using the ``rect`` marks with discrete fields on ``x`` and ``y`` channels creates a heatmap.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.seattle_weather()
+
+    alt.Chart(source).mark_rect().encode(
+        alt.X("date(date):O").axis(labelAngle=0, format="%e").title("Day"),
+        alt.Y("month(date):O").title("Month"),
+        alt.Color("max(temp_max):Q").title("Max Temp"),
+    )
+
+
+Ranged Rectangles
+^^^^^^^^^^^^^^^^^
+Specifying both ``x`` and ``x2`` and/or ``y`` and ``y2`` creates a rectangle that spans over certain x and/or y values.
+
+For example, we can use ``rect`` to create an annotation ``layer`` that provides a shading between global ``min`` and ``max`` values.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    point = alt.Chart(source).mark_point().encode(
+        x="Horsepower:Q",
+        y="Miles_per_Gallon:Q",
+    )
+
+    rect = alt.Chart(source).mark_rect().encode(
+        y="max(Miles_per_Gallon)",
+        y2="min(Miles_per_Gallon)",
+        opacity=alt.value(0.2),
+    )
+
+    point + rect
+
diff --git a/doc/user_guide/marks/rule.rst b/doc/user_guide/marks/rule.rst
new file mode 100644
index 0000000..bd7069b
--- /dev/null
+++ b/doc/user_guide/marks/rule.rst
@@ -0,0 +1,144 @@
+.. currentmodule:: altair
+
+.. _user-guide-rule-marks:
+
+Rule
+~~~~
+The ``rule`` mark represents each data point as a line segment. It can be used in two ways. First, as a line segment that spans the complete width or height of a view. Second, a rule can be used to draw a line segment between two positions.
+
+Rule Mark Properties
+--------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+    import pandas as pd
+
+    x_slider = alt.binding_range(min=1, max=100, step=1)
+    x_var = alt.param(bind=x_slider, value=35, name="x")
+
+    x2_slider = alt.binding_range(min=1, max=100, step=1)
+    x2_var = alt.param(bind=x2_slider, value=75, name="x2")
+
+    y_slider = alt.binding_range(min=1, max=100, step=1)
+    y_var = alt.param(bind=y_slider, value=25, name="y")
+
+    y2_slider = alt.binding_range(min=1, max=100, step=1)
+    y2_var = alt.param(bind=y2_slider, value=75, name="y2")
+
+    strokeWidth_slider = alt.binding_range(min=0, max=10, step=0.5)
+    strokeWidth_var = alt.param(bind=strokeWidth_slider, value=2, name="strokeWidth")
+
+    strokeCap_select = alt.binding_select(options=["butt", "round", "square"])
+    strokeCap_var = alt.param(bind=strokeCap_select, value="butt", name="strokeCap")
+
+    strokeDash_select = alt.binding_select(
+        options=[[1, 0], [8, 8], [8, 4], [4, 4], [4, 2], [2, 1], [1, 1]]
+    )
+    strokeDash_var = alt.param(bind=strokeDash_select, value=[1, 0], name="strokeDash")
+
+    alt.Chart().mark_rule(
+        color="orange",
+        strokeWidth=strokeWidth_var,
+        strokeCap=strokeCap_var,
+        strokeDash=strokeDash_var,
+    ).encode(
+        x=alt.datum(x_var, type="quantitative", scale=alt.Scale(domain=[0, 100])),
+        y=alt.datum(y_var, type="quantitative", scale=alt.Scale(domain=[0, 100])),
+        x2=alt.datum(x2_var),
+        y2=alt.datum(y2_var),
+    ).add_params(
+        x_var,
+        x2_var,
+        y_var,
+        y2_var,
+        strokeWidth_var,
+        strokeCap_var,
+        strokeDash_var,
+    )
+
+
+A ``rule`` mark definition can contain any :ref:`standard mark properties <mark-properties>`.
+
+Examples
+--------
+Width/Height-Spanning Rules
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+If the ``rule`` mark only has ``y`` encoding, the output view produces horizontal rules that spans the complete width. Similarly, if the ``rule`` mark only has ``x`` encoding, the output view produces vertical rules that spans the height.
+
+We can use rules to show the average price of different stocks akin to ``tick`` marks.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_rule().encode(
+        y="mean(price):Q",
+        size=alt.value(2),
+        color="symbol:N"
+    )
+
+
+The fact that rule marks span the width or the height of a single view make them useful as an annotation layer. For example, we can use rules to show average values of different stocks alongside the price curve.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    base = alt.Chart(source).properties(width=550)
+    line = base.mark_line().encode(
+        x="date",
+        y="price",
+        color="symbol"
+    )
+    rule = base.mark_rule().encode(
+        y="average(price)",
+        color="symbol",
+        size=alt.value(2)
+    )
+
+    line + rule
+
+We can also use a rule mark to show global mean value over a histogram.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.movies.url
+
+    base = alt.Chart(source)
+    bar = base.mark_bar().encode(
+        x=alt.X("IMDB_Rating:Q").bin().axis(None),
+        y="count()"
+    )
+    rule = base.mark_rule(color="red").encode(
+        x="mean(IMDB_Rating):Q",
+        size=alt.value(5),
+    )
+
+    bar + rule
+
+
+Ranged Rules
+^^^^^^^^^^^^
+To control the spans of horizontal/vertical rules, ``x`` and ``x2``/ ``y`` and ``y2`` channels can be specified.
+
+For example, we can use ``y`` and ``y2`` show the ``"min"`` and ``"max"`` values of horsepowers for cars from different locations.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_rule().encode(
+        x="Origin",
+        y="min(Horsepower)",
+        y2="max(Horsepower)",
+    )
diff --git a/doc/user_guide/marks/square.rst b/doc/user_guide/marks/square.rst
new file mode 100644
index 0000000..2d146c6
--- /dev/null
+++ b/doc/user_guide/marks/square.rst
@@ -0,0 +1,28 @@
+.. currentmodule:: altair
+
+.. _user-guide-square-marks:
+
+Square
+~~~~~~
+``square`` mark is similar to ``point`` mark, except that (1) the ``shape`` value is always set to ``square`` (2) they are filled by default.
+
+Square Mark Properties
+----------------------
+A ``square`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: size
+
+Scatter Plot with Square
+------------------------
+.. altair-plot::
+   import altair as alt
+   from vega_datasets import data
+
+   source = data.cars()
+
+   alt.Chart(source).mark_square().encode(
+      x="Horsepower:Q",
+      y="Miles_per_Gallon:Q",
+   )
diff --git a/doc/user_guide/marks/text.rst b/doc/user_guide/marks/text.rst
new file mode 100644
index 0000000..d7acc40
--- /dev/null
+++ b/doc/user_guide/marks/text.rst
@@ -0,0 +1,216 @@
+.. currentmodule:: altair
+
+.. _user-guide-text-marks:
+
+Text
+~~~~~~
+``text`` mark represents each data point with a text instead of a point.
+
+Text Mark Properties
+--------------------
+.. altair-plot::
+    :hide-code:
+    :div_class: properties-example
+
+    import altair as alt
+    import pandas as pd
+
+    angle_slider = alt.binding_range(min=-180, max=180, step=1)
+    angle_var = alt.param(bind=angle_slider, value=0, name="angle")
+
+    dx_slider = alt.binding_range(min=-20, max=20, step=1)
+    dx_var = alt.param(bind=dx_slider, value=5, name="dx")
+
+    dy_slider = alt.binding_range(min=-20, max=20, step=1)
+    dy_var = alt.param(bind=dy_slider, value=0, name="dy")
+
+    xOffset_slider = alt.binding_range(min=-20, max=20, step=1)
+    xOffset_var = alt.param(bind=xOffset_slider, value=0, name="xOffset")
+
+    yOffset_slider = alt.binding_range(min=-20, max=20, step=1)
+    yOffset_var = alt.param(bind=yOffset_slider, value=0, name="yOffset")
+
+    fontSize_slider = alt.binding_range(min=1, max=36, step=1)
+    fontSize_var = alt.param(bind=fontSize_slider, value=14, name="fontSize")
+
+    limit_slider = alt.binding_range(min=0, max=150, step=1)
+    limit_var = alt.param(bind=limit_slider, value=0, name="limit")
+
+    align_select = alt.binding_select(options=["left", "center", "right"])
+    align_var = alt.param(bind=align_select, value="left", name="align")
+
+    baseline_select = alt.binding_select(options=["alphabetic", "top", "middle", "bottom"])
+    baseline_var = alt.param(bind=baseline_select, value="midle", name="baseline")
+
+    font_select = alt.binding_select(options=["sans-serif", "serif", "monospace"])
+    font_var = alt.param(bind=font_select, value="sans-serif", name="font")
+
+    fontWeight_select = alt.binding_select(options=["normal", "bold"])
+    fontWeight_var = alt.param(bind=fontWeight_select, value="normal", name="fontWeight")
+
+    fontStyle_select = alt.binding_select(options=["normal", "italic"])
+    fontStyle_var = alt.param(bind=fontStyle_select, value="normal", name="fontStyle")
+
+    source = pd.DataFrame(
+        {
+            "a": [30, 25, 70],
+            "b": [28, 65, 43],
+            "label": ["Andy", "Brian", "Charlie"],
+        }
+    )
+
+    base = alt.Chart(source).encode(
+        x=alt.X("a:Q").axis(labelAngle=0).scale(domain=[0, 100]),
+        y=alt.Y("b:Q").scale(domain=[0, 100]),
+    )
+
+    pts = base.mark_point()
+
+    text = base.mark_text(
+        dx=dx_var,
+        dy=dy_var,
+        xOffset=xOffset_var,
+        yOffset=yOffset_var,
+        angle=angle_var,
+        align=align_var,
+        baseline=baseline_var,
+        font=font_var,
+        fontSize=fontSize_var,
+        fontStyle=fontStyle_var,
+        fontWeight=fontWeight_var,
+        limit=limit_var,
+    ).encode(text="label:N")
+
+    (pts + text).add_params(
+        dx_var,
+        dy_var,
+        xOffset_var,
+        yOffset_var,
+        angle_var,
+        align_var,
+        baseline_var,
+        font_var,
+        fontSize_var,
+        fontStyle_var,
+        fontWeight_var,
+        limit_var,
+    )
+
+
+A ``text`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: angle align baseline dir dx dy ellipsis font fontSize fontStyle fontWeight limit lineHeight radius text theta
+
+Examples
+--------
+Text Table Heatmap
+^^^^^^^^^^^^^^^^^^
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    base = alt.Chart(source).transform_aggregate(
+        num_cars="count()",
+        groupby=["Origin", "Cylinders"],
+    ).encode(
+        alt.X("Cylinders:O").scale(paddingInner=0),
+        alt.Y("Origin:O").scale(paddingInner=0),
+    )
+
+    heatmap = base.mark_rect().encode(
+        alt.Color("num_cars:Q")
+            .scale(scheme="viridis")
+            .legend(direction="horizontal")
+    )
+
+    text = base.mark_text(baseline="middle").encode(
+        text="num_cars:Q",
+        color=alt.condition(
+            alt.datum.num_cars > 100,
+            alt.value("black"),
+            alt.value("white"),
+        ),
+    )
+
+    heatmap + text
+
+Labels
+^^^^^^
+You can also use ``text`` marks as labels for other marks and set offset (``dx`` or ``dy``), ``align``, and ``baseline`` properties of the mark definition.
+
+.. altair-plot::
+    import altair as alt
+    import pandas as pd
+
+    source = pd.DataFrame({
+        "a": ["A", "B", "C"],
+        "b": [28, 55, 43]
+    })
+
+    bar = alt.Chart(source).mark_bar().encode(
+        y="a:N",
+        x=alt.X("b:Q").scale(domain=[0, 60])
+    )
+    text = bar.mark_text(
+        align="left",
+        baseline="middle",
+        dx=3
+    ).encode(text="b")
+
+    bar + text
+
+Scatter Plot with Text
+^^^^^^^^^^^^^^^^^^^^^^
+Mapping a field to ``text`` channel of text mark sets the mark’s text value. For example, we can make a colored scatter plot with text marks showing the initial character of its origin, instead of ``point`` marks.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+    from altair import datum
+
+    source = data.cars()
+
+    alt.Chart(source).mark_text().encode(
+        x="Horsepower:Q",
+        y="Miles_per_Gallon:Q",
+        color="Origin:N",
+        text="Origin[0]:N",
+    )
+
+Geo Text
+^^^^^^^^
+By mapping geographic coordinate data to ``longitude`` and ``latitude`` channels of a corresponding projection, we can show text at accurate locations. The example below shows the name of every US state capital at the location of the capital.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    states = alt.topo_feature(data.us_10m.url, feature="states")
+
+    source = data.us_state_capitals()
+
+    background = alt.Chart(states).mark_geoshape(
+        fill="lightgray",
+        stroke="white",
+    ).properties(
+        width=750,
+        height=500,
+    ).project("albersUsa")
+
+    line = alt.Chart(source).mark_text(dy=-10).encode(
+        latitude="lat:Q",
+        longitude="lon:Q",
+        text="city:N"
+    )
+
+    point = alt.Chart(source).mark_circle().encode(
+        latitude="lat:Q",
+        longitude="lon:Q",
+        color=alt.value("orange"),
+    )
+
+    background + line + point
diff --git a/doc/user_guide/marks/tick.rst b/doc/user_guide/marks/tick.rst
new file mode 100644
index 0000000..07875e9
--- /dev/null
+++ b/doc/user_guide/marks/tick.rst
@@ -0,0 +1,62 @@
+.. currentmodule:: altair
+
+.. _user-guide-tick-marks:
+
+Tick
+~~~~
+The ``tick`` mark represents each data point as a short line. This is a useful mark for displaying the distribution of values in a field.
+
+Tick Mark Properties
+--------------------
+A ``tick`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: cornerRadius orient
+
+Examples
+--------
+Dot Plot
+^^^^^^^^
+The following dot plot uses tick marks to show the distribution of precipitation in Seattle.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.seattle_weather()
+
+    alt.Chart(source).mark_tick().encode(
+        x="precipitation:Q"
+    )
+
+Strip Plot
+^^^^^^^^^^
+By adding a ``y`` field, a strip plot can be created that shows the distribution of horsepower by number of cylinders.
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.cars()
+
+    alt.Chart(source).mark_tick().encode(
+        x="Horsepower:Q",
+        y="Cylinders:O",
+    )
+
+
+Customizing Tick’s Size and Thickness
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.seattle_weather()
+
+    alt.Chart(source).mark_tick().encode(
+        x="precipitation:Q"
+    ).configure_tick(
+        thickness=2,
+        bandSize=10,
+    )
diff --git a/doc/user_guide/marks/trail.rst b/doc/user_guide/marks/trail.rst
new file mode 100644
index 0000000..1bba127
--- /dev/null
+++ b/doc/user_guide/marks/trail.rst
@@ -0,0 +1,70 @@
+.. currentmodule:: altair
+
+.. _user-guide-trail-marks:
+
+Trail
+~~~~~
+The ``trail`` mark represents the data points stored in a field with a line connecting all of these points. Trail is similar to the ``line`` mark but a trail can have variable widths determined by backing data. Unlike lines, trails do not support different interpolation methods and use ``fill`` (not ``stroke``) for their color. Trail marks are useful if you want to draw lines with changing size to reflect the underlying data.
+
+Trail Mark Properties
+---------------------
+A ``trail`` mark definition can contain any :ref:`standard mark properties <mark-properties>`
+and the following special properties:
+
+.. altair-object-table:: altair.MarkDef
+   :properties: orient
+
+Examples
+--------
+Line Chart with Varying Size
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    source = data.stocks()
+
+    alt.Chart(source).mark_trail().encode(
+        x="date",
+        y="price",
+        color="symbol",
+        size="price",
+    )
+
+Comet Chart Showing Changes Between Two States
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. altair-plot::
+    import altair as alt
+    from vega_datasets import data
+
+    alt.Chart(data.barley.url).transform_pivot(
+        "year",
+        value="yield",
+        groupby=["variety", "site"]
+    ).transform_fold(
+        ["1931", "1932"],
+        as_=["year", "yield"]
+    ).transform_calculate(
+        calculate="datum['1932'] - datum['1931']",
+        as_="delta"
+    ).mark_trail().encode(
+        alt.X("year:O").title(None),
+        alt.Y("variety:N").title("Variety"),
+        alt.Size("yield:Q")
+            .scale(range=[0, 12])
+            .legend(values=[20, 60])
+            .title("Barley Yield (bushels/acre)"),
+        alt.Color("delta:Q")
+            .scale(domainMid=0)
+            .title("Yield Delta (%)"),
+        alt.Tooltip(["year:O", "yield:Q"]),
+        alt.Column("site:N").title("Site"),
+    ).configure_legend(
+        orient='bottom',
+        direction='horizontal'
+    ).configure_view(
+        stroke=None
+    ).properties(
+        title="Barley Yield comparison between 1932 and 1931"
+    )
diff --git a/doc/user_guide/saving_charts.rst b/doc/user_guide/saving_charts.rst
index 7fc57c7..9268dfb 100644
--- a/doc/user_guide/saving_charts.rst
+++ b/doc/user_guide/saving_charts.rst
@@ -37,11 +37,11 @@ The contents of the resulting file will look something like this:
 .. code-block:: json
 
     {
-      "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+      "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
       "config": {
         "view": {
           "continuousHeight": 300,
-          "continuousWidth": 400
+          "continuousWidth": 300
         }
       },
       "data": {
@@ -61,7 +61,7 @@ The contents of the resulting file will look something like this:
           "type": "quantitative"
         }
       },
-      "mark": "point"
+      "mark": {"type": "point"}
     }
 
 This JSON can then be inserted into any web page using the vegaEmbed_ library.
@@ -90,18 +90,18 @@ javascript-enabled web browser:
     <html>
     <head>
       <script src="https://cdn.jsdelivr.net/npm/vega@5"></script>
-      <script src="https://cdn.jsdelivr.net/npm/vega-lite@4"></script>
+      <script src="https://cdn.jsdelivr.net/npm/vega-lite@5"></script>
       <script src="https://cdn.jsdelivr.net/npm/vega-embed@6"></script>
     </head>
     <body>
       <div id="vis"></div>
       <script type="text/javascript">
         var spec = {
-          "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+          "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
           "config": {
             "view": {
               "continuousHeight": 300,
-              "continuousWidth": 400
+              "continuousWidth": 300
             }
           },
           "data": {
@@ -121,7 +121,7 @@ javascript-enabled web browser:
               "type": "quantitative"
             }
           },
-          "mark": "point"
+          "mark": {"type": "point"}
         };
         var opt = {"renderer": "canvas", "actions": false};
         vegaEmbed("#vis", spec, opt);
@@ -156,21 +156,60 @@ To save an Altair chart object as a PNG, SVG, or PDF image, you can use
     chart.save('chart.svg')
     chart.save('chart.pdf')
 
-However, saving these images requires some additional extensions to run the
+Saving these images requires an additional extension to run the
 javascript code necessary to interpret the Vega-Lite specification and output
-it in the form of an image.
+it in the form of an image. There are two packages that can be used to enable
+image export: vl-convert_ or altair_saver_.
 
-Altair can do this via the altair_saver_ package, which can be installed with::
+vl-convert
+^^^^^^^^^^
+The vl-convert_ package can be installed with::
 
-    $ conda install altair_saver
+    conda install -c conda-forge vl-convert-python
 
 or::
 
-    $ pip install altair_saver
+    pip install vl-convert-python
+
+.. note::
+   
+   Conda packages are not yet available for the Apple Silicon architecture.
+   See `conda-forge/vl-convert-python-feedstock#9 <https://github.com/conda-forge/vl-convert-python-feedstock/issues/9>`_.
+
+Unlike altair_saver_, vl-convert_ does not require any external dependencies.
+However, it only supports saving charts to PNG and SVG formats. To save directly to
+PDF, altair_saver_ is still required. See the vl-convert documentation for information
+on other `limitations <https://github.com/vega/vl-convert#limitations>`_.
+
+altair_saver
+^^^^^^^^^^^^
+
+.. note::
+   
+   altair_saver does not yet support Altair 5.
+
+
+The altair_saver_ package can be installed with::
+
+    conda install -c conda-forge altair_saver
+
+or::
+
+    pip install altair_saver
 
 See the altair_saver_ documentation for information about additional installation
 requirements.
 
+Engine Argument
+^^^^^^^^^^^^^^^
+If both vl-convert and altair_saver are installed, vl-convert will take precedence.
+The engine argument to :meth:`Chart.save` can be used to override this default
+behavior. For example, to use altair_saver for PNG export when vl-convert is also
+installed you can use::
+
+    chart.save('chart.png', engine="altair_saver")
+
+
 Figure Size/Resolution
 ^^^^^^^^^^^^^^^^^^^^^^
 When using ``chart.save()`` above, the resolution of the resulting PNG is
@@ -183,5 +222,6 @@ This can be done with the ``scale_factor`` argument, which defaults to 1.0::
     chart.save('chart.png', scale_factor=2.0)
 
 
+.. _vl-convert: https://github.com/vega/vl-convert
 .. _altair_saver: http://github.com/altair-viz/altair_saver/
 .. _vegaEmbed: https://github.com/vega/vega-embed
diff --git a/doc/user_guide/scale_resolve.rst b/doc/user_guide/scale_resolve.rst
index 709b57b..af73efa 100644
--- a/doc/user_guide/scale_resolve.rst
+++ b/doc/user_guide/scale_resolve.rst
@@ -60,16 +60,14 @@ each layer.
 
     source = data.cars()
 
-    base = alt.Chart(source).encode(
-            alt.X('year(Year):T')
-    )
+    base = alt.Chart(source).encode(x='year(Year):T')
 
     line_A = base.mark_line(color='#5276A7').encode(
-        alt.Y('average(Horsepower):Q', axis=alt.Axis(titleColor='#5276A7'))
+        alt.Y('average(Horsepower):Q').axis(titleColor='#5276A7')
     )
 
     line_B = base.mark_line(color='#F18727').encode(
-        alt.Y('average(Miles_per_Gallon):Q', axis=alt.Axis(titleColor='#F18727'))
+        alt.Y('average(Miles_per_Gallon):Q').axis(titleColor='#F18727')
     )
 
     alt.layer(line_A, line_B).resolve_scale(y='independent')
@@ -92,13 +90,13 @@ Vega-Lite to represent an encoding.
     line_A = base.transform_filter(
         alt.datum.Measure == 'Horsepower'
     ).encode(
-        alt.Y('average(Value):Q', axis=alt.Axis(title='Horsepower')),
+        alt.Y('average(Value):Q').title('Horsepower')
     )
 
     line_B = base.transform_filter(
         alt.datum.Measure == 'Miles_per_Gallon'
     ).encode(
-        alt.Y('average(Value):Q',axis=alt.Axis(title='Miles_per_Gallon'))
+        alt.Y('average(Value):Q').title('Miles_per_Gallon')
     )
 
     alt.layer(line_A, line_B).resolve_scale(y='independent')
diff --git a/doc/user_guide/times_and_dates.rst b/doc/user_guide/times_and_dates.rst
index 4957c81..8f62b06 100644
--- a/doc/user_guide/times_and_dates.rst
+++ b/doc/user_guide/times_and_dates.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-time:
 
-Times and Dates in Altair
-=========================
+Times and Dates
+===============
 Working with dates, times, and timezones is often one of the more challenging
 aspects of data analysis. In Altair, the difficulties are compounded by the
 fact that users are writing Python code, which outputs JSON-serialized
@@ -13,68 +13,6 @@ Altair and Vega-Lite do their best to ensure that dates are interpreted and
 visualized in a consistent way.
 
 
-.. _note-browser-compliance:
-
-Note on Browser Compliance
---------------------------
-
-.. note:: Warning about non-ES6 Browsers
-
-   The discussion below applies to modern browsers which support `ECMAScript 6`_,
-   in which time strings like ``"2018-01-01T12:00:00"`` without a trailing ``"Z"``
-   are treated as local time rather than `Coordinated Universal Time (UTC)`_.
-   For example, recent versions of Chrome and Firefox are ES6-compliant,
-   while Safari 11 is not.
-   If you are using a non-ES6 browser, this means that times displayed in Altair
-   charts may be rendered with a timezone offset, unless you explicitly use
-   UTC time (see :ref:`explicit-utc-time`).
-
-The following chart will help you determine if your browser parses dates in the
-way that Altair expects:
-
-.. altair-plot::
-    :links: none
-
-    import altair as alt
-    import pandas as pd
-
-    df = pd.DataFrame({'local': ['2018-01-01T00:00:00'],
-                       'utc': ['2018-01-01T00:00:00Z']})
-
-    alt.Chart(df).transform_calculate(
-        compliant="hours(datum.local) != hours(datum.utc) ? true : false",
-    ).mark_text(size=20, baseline='middle').encode(
-        text=alt.condition('datum.compliant', alt.value('OK'), alt.value('not OK')),
-        color=alt.condition('datum.compliant', alt.value('green'), alt.value('red'))
-    ).properties(width=80, height=50)
-
-If the above output contains a red "not OK":
-
-.. altair-plot::
-   :hide-code:
-   :links: none
-
-   alt.Chart(df).mark_text(size=10, baseline='middle').encode(
-       alt.TextValue('not OK'),
-       alt.ColorValue('red')
-   ).properties(width=40, height=25)
-
-it means that your browser's date parsing is not ES6-compliant.
-If it contains a green "OK":
-
-.. altair-plot::
-   :hide-code:
-   :links: none
-
-   alt.Chart(df).mark_text(size=10, baseline='middle').encode(
-       alt.TextValue('OK'),
-       alt.ColorValue('green')
-   ).properties(width=40, height=25)
-
-then it means that your browser parses dates as Altair expects, either because
-it is ES6-compliant or because your computer locale happens to be set to
-the UTC+0 (GMT) timezone.
-
 Altair and Pandas Datetimes
 ---------------------------
 
@@ -126,9 +64,9 @@ x-axis, and day of the month on the y-axis:
 .. altair-plot::
 
     alt.Chart(temps).mark_rect().encode(
-        alt.X('hoursminutes(date):O', title='hour of day'),
-        alt.Y('monthdate(date):O', title='date'),
-        alt.Color('temp:Q', title='temperature (F)')
+        alt.X('hoursminutes(date):O').title('hour of day'),
+        alt.Y('monthdate(date):O').title('date'),
+        alt.Color('temp:Q').title('temperature (F)')
     )
 
 Unless you are using a non-ES6 browser (See :ref:`note-browser-compliance`),
@@ -140,7 +78,7 @@ local time.
 Specifying Time Zones
 ---------------------
 If you are viewing the above visualizations in a supported browser (see
-:ref:`note-browser-compliance` above), the times are both serialized and
+:ref:`note-browser-compliance`), the times are both serialized and
 rendered in local time, so that the ``January 1st 00:00:00`` row renders in
 the chart as ``00:00`` on ``January 1st``.
 
@@ -165,9 +103,9 @@ render **according to the timezone of the browser rendering it**:
 .. altair-plot::
 
     alt.Chart(temps).mark_rect().encode(
-        alt.X('hoursminutes(date_pacific):O', title='hour of day'),
-        alt.Y('monthdate(date_pacific):O', title='date'),
-        alt.Color('temp:Q', title='temperature (F)')
+        alt.X('hoursminutes(date_pacific):O').title('hour of day'),
+        alt.Y('monthdate(date_pacific):O').title('date'),
+        alt.Color('temp:Q').title('temperature (F)')
     )
 
 If you are viewing this chart on a computer whose time is set to the west coast
@@ -193,9 +131,9 @@ regardless of the system location:
 .. altair-plot::
 
     alt.Chart(temps).mark_rect().encode(
-        alt.X('utchoursminutes(date_pacific):O', title='UTC hour of day'),
-        alt.Y('utcmonthdate(date_pacific):O', title='UTC date'),
-        alt.Color('temp:Q', title='temperature (F)')
+        alt.X('utchoursminutes(date_pacific):O').title('UTC hour of day'),
+        alt.Y('utcmonthdate(date_pacific):O').title('UTC date'),
+        alt.Color('temp:Q').title('temperature (F)')
     )
 
 To make your charts as portable as possible (even in non-ES6 browsers which parse
@@ -208,9 +146,9 @@ in UTC time, both on the Pandas side and on the Vega-Lite side:
    temps['date_utc'] = temps['date'].dt.tz_localize('UTC')
 
    alt.Chart(temps).mark_rect().encode(
-       alt.X('utchoursminutes(date_utc):O', title='hour of day'),
-       alt.Y('utcmonthdate(date_utc):O', title='date'),
-       alt.Color('temp:Q', title='temperature (F)')
+       alt.X('utchoursminutes(date_utc):O').title('hour of day'),
+       alt.Y('utcmonthdate(date_utc):O').title('date'),
+       alt.Color('temp:Q').title('temperature (F)')
    )
 
 This is somewhat less convenient than the default behavior for timezone-agnostic
@@ -219,7 +157,68 @@ dates, in which both Pandas and Vega-Lite assume times are local
 but it gets around browser incompatibilities by explicitly working in UTC, which
 gives similar results even in older browsers.
 
+.. _note-browser-compliance:
+
+Note on Browser Compliance
+--------------------------
+
+.. note:: Warning about non-ES6 Browsers
+
+   The discussion below applies to modern browsers which support `ECMAScript 6`_,
+   in which time strings like ``"2018-01-01T12:00:00"`` without a trailing ``"Z"``
+   are treated as local time rather than `Coordinated Universal Time (UTC)`_.
+   For example, recent versions of Chrome and Firefox are ES6-compliant,
+   while Safari 11 is not.
+   If you are using a non-ES6 browser, this means that times displayed in Altair
+   charts may be rendered with a timezone offset, unless you explicitly use
+   UTC time (see :ref:`explicit-utc-time`).
+
+The following chart will help you determine if your browser parses dates in the
+way that Altair expects:
+
+.. altair-plot::
+    :links: none
+
+    import altair as alt
+    import pandas as pd
+
+    df = pd.DataFrame({'local': ['2018-01-01T00:00:00'],
+                       'utc': ['2018-01-01T00:00:00Z']})
+
+    alt.Chart(df).transform_calculate(
+        compliant="hours(datum.local) != hours(datum.utc) ? true : false",
+    ).mark_text(size=20, baseline='middle').encode(
+        text=alt.condition('datum.compliant', alt.value('OK'), alt.value('not OK')),
+        color=alt.condition('datum.compliant', alt.value('green'), alt.value('red'))
+    ).properties(width=80, height=50)
+
+If the above output contains a red "not OK":
+
+.. altair-plot::
+   :hide-code:
+   :links: none
+
+   alt.Chart(df).mark_text(size=10, baseline='middle').encode(
+       alt.TextValue('not OK'),
+       alt.ColorValue('red')
+   ).properties(width=40, height=25)
+
+it means that your browser's date parsing is not ES6-compliant.
+If it contains a green "OK":
+
+.. altair-plot::
+   :hide-code:
+   :links: none
+
+   alt.Chart(df).mark_text(size=10, baseline='middle').encode(
+       alt.TextValue('OK'),
+       alt.ColorValue('green')
+   ).properties(width=40, height=25)
+
+then it means that your browser parses dates as Altair expects, either because
+it is ES6-compliant or because your computer locale happens to be set to
+the UTC+0 (GMT) timezone.
 
 .. _Coordinated Universal Time (UTC): https://en.wikipedia.org/wiki/Coordinated_Universal_Time
-.. _Pandas timeseries: https://pandas.pydata.org/pandas-docs/stable/timeseries.html
+.. _Pandas timeseries: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html
 .. _ECMAScript 6: http://www.ecma-international.org/ecma-262/6.0/
diff --git a/doc/user_guide/transform/aggregate.rst b/doc/user_guide/transform/aggregate.rst
index 778b61e..d097568 100644
--- a/doc/user_guide/transform/aggregate.rst
+++ b/doc/user_guide/transform/aggregate.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-aggregate-transform:
 
-Aggregate Transforms
-~~~~~~~~~~~~~~~~~~~~
+Aggregate
+~~~~~~~~~
 There are two ways to aggregate data within Altair: within the encoding itself,
 or using a top level aggregate transform.
 
diff --git a/doc/user_guide/transform/bin.rst b/doc/user_guide/transform/bin.rst
index 31494b5..6129cd3 100644
--- a/doc/user_guide/transform/bin.rst
+++ b/doc/user_guide/transform/bin.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-bin-transform:
 
-Bin transforms
-~~~~~~~~~~~~~~
+Bin
+~~~
 As with :ref:`user-guide-aggregate-transform`, there are two ways to apply
 a bin transform in Altair: within the encoding itself, or using a top-level
 bin transform.
@@ -18,7 +18,7 @@ An common application of a bin transform is when creating a histogram:
     movies = data.movies.url
 
     alt.Chart(movies).mark_bar().encode(
-        alt.X("IMDB_Rating:Q", bin=True),
+        alt.X("IMDB_Rating:Q").bin(),
         y='count()',
     )
 
@@ -35,12 +35,13 @@ bin a continuous field to create a discrete color map:
     alt.Chart(cars).mark_point().encode(
         x='Horsepower:Q',
         y='Miles_per_Gallon:Q',
-        color=alt.Color('Acceleration:Q', bin=alt.Bin(maxbins=5))
+        color=alt.Color('Acceleration:Q').bin(maxbins=5)
     )
 
-In the first case we set ``bin = True``, which uses the default bin settings.
+In the first case we use ``bin()`` without any arguments,
+which uses the default bin settings.
 In the second case, we exercise more fine-tuned control over the bin parameters
-by passing a :class:`~altair.Bin` object.
+by passing the ``maxbins`` argument.
 
 If you are using the same bins in multiple chart components, it can be useful
 to instead define the binning at the top level, using :meth:`~Chart.transform_bin`
diff --git a/doc/user_guide/transform/calculate.rst b/doc/user_guide/transform/calculate.rst
index 7c39205..b0a2204 100644
--- a/doc/user_guide/transform/calculate.rst
+++ b/doc/user_guide/transform/calculate.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-calculate-transform:
 
-Calculate Transform
-~~~~~~~~~~~~~~~~~~~
+Calculate
+~~~~~~~~~
 The calculate transform allows the user to define new fields in the dataset
 which are calculated from other fields using an expression syntax.
 
@@ -30,21 +30,19 @@ Each argument within ``transform_calculate`` is a `Vega expression`_ string,
 which is a well-defined set of javascript-style operations that can be used
 to calculate a new field from an existing one.
 
-To streamline building these vega expressions in Python, Altair provides the
-:mod:`altair.expr` module which provides constants and functions to allow
+To streamline building these Vega expressions in Python, Altair provides the
+:mod:`expr` module which provides constants and functions to allow
 these expressions to be constructed with Python syntax; for example:
 
 .. altair-plot::
 
-    from altair import expr, datum
-
     alt.Chart(data).mark_line().encode(
         x='x:Q',
         y='y:Q',
         order='t:Q'
     ).transform_calculate(
-        x=expr.cos(datum.t * expr.PI / 50),
-        y=expr.sin(datum.t * expr.PI / 25)
+        x=alt.expr.cos(alt.datum.t * alt.expr.PI / 50),
+        y=alt.expr.sin(alt.datum.t * alt.expr.PI / 25)
     )
 
 Altair expressions are designed to output valid Vega expressions. The benefit of
diff --git a/doc/user_guide/transform/density.rst b/doc/user_guide/transform/density.rst
index 8b36fd6..4e6f770 100644
--- a/doc/user_guide/transform/density.rst
+++ b/doc/user_guide/transform/density.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-density-transform:
 
-Density Transform
-~~~~~~~~~~~~~~~~~
+Density
+~~~~~~~
 The density transform performs one-dimensional
 `kernel density estimation <https://en.wikipedia.org/wiki/Kernel_density_estimation>`_
 over input data and generates a new column of samples of the estimated densities.
@@ -12,10 +12,10 @@ Here is a simple example, showing the distribution of IMDB ratings from the movi
 dataset:
 
 .. altair-plot::
-   
+
    import altair as alt
    from vega_datasets import data
-   
+
    alt.Chart(data.movies.url).transform_density(
        'IMDB_Rating',
        as_=['IMDB_Rating', 'density'],
@@ -31,7 +31,7 @@ argument. Here we split the above density computation across movie genres:
 
    import altair as alt
    from vega_datasets import data
-   
+
    alt.Chart(
        data.movies.url,
        width=120,
diff --git a/doc/user_guide/transform/filter.rst b/doc/user_guide/transform/filter.rst
index b4e2757..df114d1 100644
--- a/doc/user_guide/transform/filter.rst
+++ b/doc/user_guide/transform/filter.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-filter-transform:
 
-Filter Transform
-~~~~~~~~~~~~~~~~
+Filter
+~~~~~~
 The filter transform removes objects from a data stream based on a provided
 filter expression, selection, or other filter predicate. A filter can be
 added at the top level of a chart using the :meth:`Chart.transform_filter`
@@ -133,7 +133,7 @@ to select the data to be shown in the top chart:
     from vega_datasets import data
     pop = data.population.url
 
-    selection = alt.selection_multi(fields=['year'])
+    selection = alt.selection_point(fields=['year'])
 
     top = alt.Chart().mark_line().encode(
         x='age:O',
@@ -151,7 +151,7 @@ to select the data to be shown in the top chart:
         color=alt.condition(selection, alt.value('steelblue'), alt.value('lightgray'))
     ).properties(
         width=600, height=100
-    ).add_selection(
+    ).add_params(
         selection
     )
 
diff --git a/doc/user_guide/transform/flatten.rst b/doc/user_guide/transform/flatten.rst
index b3e1d1d..4e5cf3c 100644
--- a/doc/user_guide/transform/flatten.rst
+++ b/doc/user_guide/transform/flatten.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-flatten-transform:
 
-Flatten Transform
-~~~~~~~~~~~~~~~~~
+Flatten
+~~~~~~~
 The flatten transform can be used to extract the contents of arrays from data entries.
 This will not generally be useful for well-structured data within pandas dataframes,
 but it can be useful for working with data from other sources.
diff --git a/doc/user_guide/transform/fold.rst b/doc/user_guide/transform/fold.rst
index 2ab2576..1d8c0b7 100644
--- a/doc/user_guide/transform/fold.rst
+++ b/doc/user_guide/transform/fold.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-fold-transform:
 
-Fold Transform
-~~~~~~~~~~~~~~
+Fold
+~~~~
 The fold transform is, in short, a way to convert wide-form data to long-form
 data directly without any preprocessing (see :ref:`data-long-vs-wide` for more
 information). Fold transforms are the opposite of the :ref:`user-guide-pivot-transform`.
diff --git a/doc/user_guide/transform/impute.rst b/doc/user_guide/transform/impute.rst
index 5e49aac..d83fc28 100644
--- a/doc/user_guide/transform/impute.rst
+++ b/doc/user_guide/transform/impute.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-impute-transform:
 
-Impute Transform
-~~~~~~~~~~~~~~~~
+Impute
+~~~~~~
 The impute transform allows you to fill-in missing entries in a dataset.
 As an example, consider the following data, which includes missing values
 that we filter-out of the long-form representation (see :ref:`data-long-vs-wide`
@@ -31,7 +31,7 @@ data directly, the line skips the missing entries:
    import altair as alt
 
    raw = alt.Chart(data).mark_line(point=True).encode(
-       x=alt.X('t:Q'),
+       x='t:Q',
        y='value:Q',
        color='variable:N'
    )
@@ -42,7 +42,7 @@ no points) it can imply the existence of data that is not there.
 
 Impute via Encodings
 ^^^^^^^^^^^^^^^^^^^^
-To address this, you can use an impute argument to the encoding channel.
+To address this, you can use the impute method of the encoding channel.
 For example, we can impute using a constant value (we'll show the raw chart
 lightly in the background for reference):
 
@@ -51,7 +51,7 @@ lightly in the background for reference):
    background = raw.encode(opacity=alt.value(0.2))
    chart = alt.Chart(data).mark_line(point=True).encode(
        x='t:Q',
-       y=alt.Y('value:Q', impute=alt.ImputeParams(value=0)),
+       y=alt.Y('value:Q').impute(value=0),
        color='variable:N'
    )
    background + chart
@@ -62,7 +62,7 @@ Or we can impute using any supported aggregate:
 
    chart = alt.Chart(data).mark_line(point=True).encode(
        x='t:Q',
-       y=alt.Y('value:Q', impute=alt.ImputeParams(method='mean')),
+       y=alt.Y('value:Q').impute(method='mean'),
        color='variable:N'
    )
    background + chart
diff --git a/doc/user_guide/transform/joinaggregate.rst b/doc/user_guide/transform/joinaggregate.rst
index 467f12f..43a4d76 100644
--- a/doc/user_guide/transform/joinaggregate.rst
+++ b/doc/user_guide/transform/joinaggregate.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-joinaggregate-transform:
 
-Join Aggregate Transform
-~~~~~~~~~~~~~~~~~~~~~~~~
+Join Aggregate
+~~~~~~~~~~~~~~
 The Join Aggregate transform acts in almost every way the same as an Aggregate
 transform, but the resulting aggregate is joined to the original dataset.
 To make this more clear, consider the following dataset:
diff --git a/doc/user_guide/transform/loess.rst b/doc/user_guide/transform/loess.rst
index 1c38c9b..8680655 100644
--- a/doc/user_guide/transform/loess.rst
+++ b/doc/user_guide/transform/loess.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-loess-transform:
 
-LOESS Transform
-~~~~~~~~~~~~~~~
+LOESS
+~~~~~
 The LOESS transform (LOcally Estimated Scatterplot Smoothing) uses a
 locally-estimated regression  to produce a trend line.
 LOESS performs a sequence of local weighted regressions over a sliding
@@ -17,19 +17,19 @@ Here is an example of using LOESS to smooth samples from a Gaussian random walk:
    import altair as alt
    import pandas as pd
    import numpy as np
-   
+
    np.random.seed(42)
-   
+
    df = pd.DataFrame({
        'x': range(100),
        'y': np.random.randn(100).cumsum()
    })
-   
+
    chart = alt.Chart(df).mark_point().encode(
        x='x',
        y='y'
    )
-   
+
    chart + chart.transform_loess('x', 'y').mark_line()
 
 
diff --git a/doc/user_guide/transform/lookup.rst b/doc/user_guide/transform/lookup.rst
index 9289cf6..9337da6 100644
--- a/doc/user_guide/transform/lookup.rst
+++ b/doc/user_guide/transform/lookup.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-lookup-transform:
 
-Lookup Transform
-~~~~~~~~~~~~~~~~
+Lookup
+~~~~~~
 The Lookup transform extends a primary data source by looking up values from
 another data source; it is similar to a one-sided join. A lookup can be added
 at the top level of a chart using the :meth:`Chart.transform_lookup` method.
@@ -27,8 +27,8 @@ We know how to visualize each of these datasets separately; for example:
     import altair as alt
 
     top = alt.Chart(people).mark_square(size=200).encode(
-        x=alt.X('age:Q', scale=alt.Scale(zero=False)),
-        y=alt.Y('height:Q', scale=alt.Scale(zero=False)),
+        x=alt.X('age:Q').scale(zero=False),
+        y=alt.Y('height:Q').scale(zero=False),
         color='name:N',
         tooltip='name:N'
     ).properties(
diff --git a/doc/user_guide/transform/pivot.rst b/doc/user_guide/transform/pivot.rst
index c095b54..cfa80b4 100644
--- a/doc/user_guide/transform/pivot.rst
+++ b/doc/user_guide/transform/pivot.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-pivot-transform:
 
-Pivot Transform
-~~~~~~~~~~~~~~~
+Pivot
+~~~~~
 The pivot transform is, in short, a way to convert long-form data to wide-form
 data directly without any preprocessing (see :ref:`data-long-vs-wide` for more
 information). Pivot transforms are useful for creating matrix or cross-tabulation
@@ -45,24 +45,24 @@ values on multiple lines:
 
    import altair as alt
    from vega_datasets import data
-   
+
    source = data.stocks()
    base = alt.Chart(source).encode(x='date:T')
    columns = sorted(source.symbol.unique())
-   selection = alt.selection_single(
-       fields=['date'], nearest=True, on='mouseover', empty='none', clear='mouseout'
+   selection = alt.selection_point(
+       fields=['date'], nearest=True, on='mouseover', empty=False, clear='mouseout'
    )
-   
+
    lines = base.mark_line().encode(y='price:Q', color='symbol:N')
    points = lines.mark_point().transform_filter(selection)
-   
+
    rule = base.transform_pivot(
        'symbol', value='price', groupby=['date']
    ).mark_rule().encode(
        opacity=alt.condition(selection, alt.value(0.3), alt.value(0)),
        tooltip=[alt.Tooltip(c, type='quantitative') for c in columns]
-   ).add_selection(selection)
-   
+   ).add_params(selection)
+
    lines + points + rule
 
 
diff --git a/doc/user_guide/transform/quantile.rst b/doc/user_guide/transform/quantile.rst
index 182e350..8b5f952 100644
--- a/doc/user_guide/transform/quantile.rst
+++ b/doc/user_guide/transform/quantile.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-quantile-transform:
 
-Quantile Transform
-~~~~~~~~~~~~~~~~~~
+Quantile
+~~~~~~~~
 The quantile transform calculates empirical `quantile <https://en.wikipedia.org/wiki/Quantile>`_
 values for input data. If a groupby parameter is provided, quantiles are estimated
 separately per group. Among other uses, the quantile transform is useful for creating
diff --git a/doc/user_guide/transform/regression.rst b/doc/user_guide/transform/regression.rst
index 3fcc0bc..bc2e6ba 100644
--- a/doc/user_guide/transform/regression.rst
+++ b/doc/user_guide/transform/regression.rst
@@ -2,11 +2,11 @@
 
 .. _user-guide-regression-transform:
 
-Regression Transform
-~~~~~~~~~~~~~~~~~~~~
+Regression
+~~~~~~~~~~
 
 The regression transform fits two-dimensional regression models to smooth and
-predict data. This transform can fit multiple models for input data (one per group) 
+predict data. This transform can fit multiple models for input data (one per group)
 and generates new data objects that represent points for summary trend lines.
 Alternatively, this transform can be used to generate a set of objects containing
 regression model parameters, one per group.
@@ -15,10 +15,10 @@ This transform supports parametric models for the following functional forms:
 
 - linear (``linear``): *y = a + b * x*
 - logarithmic (``log``): *y = a + b * log(x)*
-- exponential (``exp``): *y = a + eb * x*
-- power (``pow``): *y = a * xb*
-- quadratic (``quad``): *y = a + b * x + c * x2*
-- polynomial (``poly``): *y = a + b * x + … + k * xorder*
+- exponential (``exp``): * y = a * e^(b * x)*
+- power (``pow``): *y = a * x^b*
+- quadratic (``quad``): *y = a + b * x + c * x^2*
+- polynomial (``poly``): *y = a + b * x + … + k * x^(order)*
 
 All models are fit using ordinary least squares.
 For non-parametric locally weighted regression, see the
diff --git a/doc/user_guide/transform/sample.rst b/doc/user_guide/transform/sample.rst
index 39b86ed..7253fe9 100644
--- a/doc/user_guide/transform/sample.rst
+++ b/doc/user_guide/transform/sample.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-sample-transform:
 
-Sample Transform
-~~~~~~~~~~~~~~~~
+Sample
+~~~~~~
 The sample transform is one of the simpler of all Altair's data transforms;
 it takes a single parameter ``sample`` which specified a number of rows to
 randomly choose from the dataset. The resulting chart will be created using
diff --git a/doc/user_guide/transform/stack.rst b/doc/user_guide/transform/stack.rst
index d932334..088bc95 100644
--- a/doc/user_guide/transform/stack.rst
+++ b/doc/user_guide/transform/stack.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-stack-transform:
 
-Stack Transform
-~~~~~~~~~~~~~~~
+Stack
+~~~~~
 The stack transform allows you to compute values associated with stacked versions
 of encodings. For example, consider this stacked bar chart:
 
@@ -39,7 +39,7 @@ We can construct that same chart manually using the stack transform:
         sort=[alt.SortField('site', 'descending')]
     ).mark_bar().encode(
         column='year:O',
-        x=alt.X('yield_1:Q', title='yield'),
+        x=alt.X('yield_1:Q').title('yield'),
         x2='yield_2:Q',
         y='variety:N',
         color='site:N',
diff --git a/doc/user_guide/transform/timeunit.rst b/doc/user_guide/transform/timeunit.rst
index b25b265..b36d3e3 100644
--- a/doc/user_guide/transform/timeunit.rst
+++ b/doc/user_guide/transform/timeunit.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-timeunit-transform:
 
-TimeUnit Transform
-~~~~~~~~~~~~~~~~~~
+TimeUnit
+~~~~~~~~
 TimeUnit transforms are used to discretize dates and times within Altair.
 As with the :ref:`user-guide-aggregate-transform` and :ref:`user-guide-bin-transform`
 discussed above, they can be defined either as part of the encoding, or as a
@@ -73,8 +73,8 @@ to give a profile of Seattle temperatures through the year:
 .. altair-plot::
 
     alt.Chart(temps).mark_rect().encode(
-        alt.X('date(date):O', title='day'),
-        alt.Y('month(date):O', title='month'),
+        alt.X('date(date):O').title('day'),
+        alt.Y('month(date):O').title('month'),
         color='max(temp):Q'
     ).properties(
         title="2010 Daily High Temperatures in Seattle (F)"
@@ -90,7 +90,7 @@ method. For example:
 .. altair-plot::
 
     alt.Chart(temps).mark_line().encode(
-        alt.X('month:T', axis=alt.Axis(format='%b')),
+        alt.X('month:T').axis(format='%b'),
         y='mean(temp):Q'
     ).transform_timeunit(
         month='month(date)'
diff --git a/doc/user_guide/transform/window.rst b/doc/user_guide/transform/window.rst
index 17fd808..43dd962 100644
--- a/doc/user_guide/transform/window.rst
+++ b/doc/user_guide/transform/window.rst
@@ -2,8 +2,8 @@
 
 .. _user-guide-window-transform:
 
-Window Transform
-~~~~~~~~~~~~~~~~
+Window
+~~~~~~
 The window transform performs calculations over sorted groups of data objects.
 These calculations include ranking, lead/lag analysis, and aggregates such as cumulative sums and averages.
 Calculated values are written back to the input data stream, where they can be referenced by encodings.
diff --git a/doc/user_guide/troubleshooting.rst b/doc/user_guide/troubleshooting.rst
deleted file mode 100644
index 6e4512e..0000000
--- a/doc/user_guide/troubleshooting.rst
+++ /dev/null
@@ -1,439 +0,0 @@
-.. currentmodule:: altair
-
-.. _display-troubleshooting:
-
-Display Troubleshooting
-=======================
-Altair has a number of moving parts: it creates data structures in Python, those
-structures are passed to front-end renderers, and the renderers run JavaScript
-code to generate the output. This complexity means that it's possible to get
-into strange states where things don't immediately work as expected.
-
-This section summarizes some of the most common problems and their solutions.
-
- 
-.. _troubleshooting-general:
-
-General Trouble-shooting
-------------------------
-
-Chart does not display at all
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-If you are expecting a chart output and see nothing at all, it means that the
-Javascript rendering libraries are not being invoked.
-This can happen for several reasons:
-
-1. You have an old browser that doesn't support JavaScript's `ECMAScript 6`_:
-   in this case, charts may not display properly or at all. For example, Altair
-   charts will not render in any version of Internet Explorer.
-   If this is the case, you will likely see syntax errors in your browser's
-   `Javascript Console`_.
-
-2. Your browser is unable to load the javascript libraries. This may be due to
-   a local firewall, an adblocker, or because your browser is offline. Check your
-   browser's `Javascript Console`_  to see if there are errors.
-
-3. You may be failing to trigger the notebook's display mechanism (see below).
-
-If you are working in a notebook environment, the chart is only displayed if the
-**last line of the cell evaluates to a chart object**
-
-By analogy, consider the output of simple Python operations::
-
-    >>> x = 4  # no output here
-    >>> x      # output here, because x is evaluated
-    4
-    >>> x * 2  # output here, because the expression is evaluated
-    8
-
-If the last thing you type consists of an assignment operation, there will be no
-output displayed. This turns out to be true of Altair charts as well:
-
-.. altair-plot::
-    :output: none
-
-    import altair as alt
-    from vega_datasets import data
-    cars = data.cars.url
-
-    chart = alt.Chart(cars).mark_point().encode(
-        x='Horsepower:Q',
-        y='Miles_per_Gallon:Q',
-        color='Origin:N',
-    )
-
-The last statement is an assignment, so there is no output and the chart is not
-shown. If you have a chart assigned to a variable, you need to end the cell with
-an evaluation of that variable:
-
-.. altair-plot::
-
-    chart = alt.Chart(cars).mark_point().encode(
-        x='Horsepower:Q',
-        y='Miles_per_Gallon:Q',
-        color='Origin:N',
-    )
-
-    chart
-
-Alternatively, you can evaluate a chart directly, and not assign it to a variable,
-in which case the object definition itself is the final statement and will be
-displayed as an output:
-
-.. altair-plot::
-
-    alt.Chart(cars).mark_point().encode(
-        x='Horsepower:Q',
-        y='Miles_per_Gallon:Q',
-        color='Origin:N',
-    )
-
-Plot displays, but the content is empty
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Sometimes charts may appear, but the content is empty; for example:
-
-.. altair-plot::
-
-    import altair as alt
-
-    alt.Chart('nonexistent_file.csv').mark_line().encode(
-        x='x:Q',
-        y='y:Q',
-    )
-
-If this is the case, it generally means one of two things:
-
-1. your data is specified by a URL that is invalid or inaccessible
-2. your encodings do not match the columns in your data source
-
-In the above example, ``nonexistent_file.csv`` doesn't exist, and so the chart
-does not render (associated warnings will be visible in the `Javascript Console`_).
-
-Some other specific situations that may cause this:
-
-You have an adblocker active
-  Charts that reference data by URL can sometimes trigger false positives in your
-  browser's adblocker. Check your browser's `Javascript Console`_ for errors, and
-  try disabling your adblocker.
-
-You are loading data cross-domain
-  If you save a chart to HTML and open it using a ``file://`` url in your browser,
-  most browsers will not allow the javascript to load datasets from an ``http://``
-  domain. This is a security feature in your browser that cannot be disabled.
-  To view such charts locally, a good approach is to use a simple local HTTP server
-  like the one provided by Python::
-  
-      $ python -m http.server
-  
-Your encodings do not match your data
-  A similar blank chart results if you refer to a field that does not exist
-  in the data, either because of a typo in your field name, or because the
-  column contains special characters (see below).
-
-Here is an example of a mis-specified field name leading to a blank chart:
-
-.. altair-plot::
-
-   import pandas as pd
-
-   data = pd.DataFrame({'x': [1, 2, 3],
-                        'y': [3, 1, 4]})
-
-   alt.Chart(data).mark_point().encode(
-       x='x:Q',
-       y='y:Q',
-       color='color:Q'  # <-- this field does not exist in the data!
-     )
-  
-Altair does not check whether fields are valid, because there are many avenues
-by which a field can be specified within the full schema, and it is too difficult
-to account for all corner cases. Improving the user experience in this is a
-priority; see https://github.com/vega/vega-lite/issues/3576.
-
-Encodings with special characters
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-The Vega-Lite grammar on which Altair is based allows for encoding names to use
-special characters to access nested properties (See Vega-Lite's Field_ documentation).
-
-This can lead to errors in Altair when trying to use such columns in your chart.
-For example, the following chart is invalid:
-
-.. altair-plot::
-
-   import pandas as pd
-   data = pd.DataFrame({'x.value': [1, 2, 3]})
-
-   alt.Chart(data).mark_point().encode(
-       x='x.value:Q',
-   )
-
-To plot this data directly, you must escape the period in the field name:
-
-.. altair-plot::
-
-   import pandas as pd
-   data = pd.DataFrame({'x.value': [1, 2, 3]})
-
-   alt.Chart(data).mark_point().encode(
-       x=r'x\.value:Q',
-   )
-
-In general, it is better to avoid special characters like ``"."``, ``"["``, and ``"]"``
-in your data sources where possible.
-
-.. _troubleshooting-jupyterlab:
-
-Trouble-shooting Altair with JupyterLab
----------------------------------------
-  
-.. _jupyterlab-vega-lite-4-object:
-
-JupyterLab: VegaLite 4 Object
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*If you are using the Jupyter notebook rather than JupyterLab, then refer to*
-:ref:`notebook-vega-lite-4-object`
-
-If you are using JupyterLab (not Jupyter notebook) and see the following output::
-
-    <VegaLite 4 object>
-
-This means that you have enabled the ``mimetype`` renderer, but that your JupyterLab
-frontend does not support the VegaLite 4 mimetype.
-
-The easiest solution is to use the default renderer::
-
-    alt.renderers.enable('default')
-
-and rerun the cell with the chart.
-
-If you would like to use the mimetype rendering with the JupyterLab frontend extension,
-then make certain the extension is installed and enabled:
-
-    $ jupyter labextension install @jupyterlab/vega5-extension
-
-and then restart your jupyter frontend.
-  
-.. _jupyterlab-vega-lite-3-object:
-
-JupyterLab: VegaLite 3 Object
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*If you are using the Jupyter notebook rather than JupyterLab, then refer to*
-:ref:`notebook-vega-lite-3-object`
-
-If you are using JupyterLab (not Jupyter notebook) and see the following output::
-
-    <VegaLite 3 object>
-
-This most likely means that you are using too old a version of JupyterLab.
-Altair 3.0 or later works best with JupyterLab version 1.0 or later;
-check the version with::
-
-   $ jupyter lab --version
-   1.2.0
-
-If you have an older jupyterlab version, then use ``pip install -U jupyterlab``
-or ``conda update jupyterlab`` to update JupyterLab, depending on how you
-first installed it.
-
-JavaScript output is disabled in JupyterLab
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-If you are using JupyterLab and see the following output::
-
-    JavaScript output is disabled in JupyterLab
-
-it can mean one of two things is wrong
-
-1. You are using an old version of Altair. JupyterLab only works with Altair
-   version 2.0 or newer; you can check the altair version by executing the
-   following in a notebook code cell::
-
-       import altair as alt
-       alt.__version__
-
-   If the version is older than 2.0, then exit JupyterLab and follow the
-   installation instructions at :ref:`display-jupyterlab`.
-
-2. You have enabled the wrong renderer. JupyterLab works with the default
-   renderer, but if you have used ``alt.renderers.enable()`` to enable
-   another renderer, charts will no longer render correctly in JupyterLab.
-   You can check which renderer is active by running::
-
-       import altair as alt
-       print(alt.renderers.active)
-
-   JupyterLab rendering will work only if the active renderer is ``"default"``
-   or ``"jupyterlab"``. You can re-enable the default renderer by running::
-
-       import altair as alt
-       alt.renderers.enable('default')
-
-   (Note that the default renderer is enabled, well, by default, and so this
-   is only necessary if you've somewhere changed the renderer explicitly).
-
-.. _jupyterlab-textual-chart-representation:
-
-JupyterLab: Textual Chart Representation
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*If you are using the Notebook rather than the JupyterLab, then refer to*
-:ref:`notebook-textual-chart-representation`
-
-If you are using JupyterLab and see a textual representation of the Chart object
-similar to this::
-
-    Chart({
-      data: 'https://vega.github.io/vega-datasets/data/cars.json',
-      encoding: FacetedEncoding({
-        x: X({
-          shorthand: 'Horsepower'
-        })
-      }),
-      mark: 'point'
-    })
-
-it probably means that you are using an older Jupyter kernel.
-You can confirm this by running::
-
-   import IPython; IPython.__version__
-   # 6.2.1
-
-Altair will not display correctly if using a kernel with IPython version 4.X or older.
-
-The easiest way to address this is to change your kernel: choose "Kernel"->"Change Kernel"
-and then use the first kernel that appears.
-
-.. _jupyterlab-notebook-backend:
-
-JupyterLab: require is not defined
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-If you are using JupyterLab and see the error::
-
-    Javascript Error: require is not defined
-
-This likely means that you have enabled the notebook renderer, which is not
-supported in JupyterLab: that is, you have somewhere run
-``alt.renderers.enable('notebook')``.
-JupyterLab supports Altair's default renderer, which you can re-enable using::
-
-    alt.renderers.enable('default')
-
-
-.. _troubleshooting-notebook:
-
-Trouble-shooting Altair with Notebook
--------------------------------------
-
-.. _notebook-vega-lite-4-object:
-
-Notebook: VegaLite 4 object
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*If you are using JupyterLab rather than the Jupyter notebook, then refer to*
-:ref:`jupyterlab-vega-lite-3-object`
-
-If you are using Jupyter Notebook (not JupyterLab) and see the following output::
-
-    <VegaLite 4 object>
-
-This means that you have enabled the ``mimetype`` renderer.
-
-The easiest solution is to use the default renderer::
-
-    alt.renderers.enable('default')
-
-and rerun the cell with the chart.
-
-
-.. _notebook-vega-lite-3-object:
-
-Notebook: VegaLite 3 object
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*If you are using JupyterLab rather than the Jupyter notebook, then refer to*
-:ref:`jupyterlab-vega-lite-3-object`
-
-If you are using the notebook (not JupyterLab) and see the the following output::
-
-    <Vegalite 3 object>
-
-it means that either:
-
-1. You have forgotten to enable the notebook renderer. As mentioned
-   in :ref:`display-notebook`, you need to install version 2.0 or newer
-   of the ``vega`` package and Jupyter extension, and then enable it using::
-
-       import altair as alt
-       alt.renderers.enable('notebook')
-
-   in order to render charts in the classic notebook.
-
-   If the above code gives an error::
-
-       NoSuchEntryPoint: No 'notebook' entry point found in group 'altair.vegalite.v2.renderer'
-
-   This means that you have not installed the vega package. If you see this error,
-   please make sure to follow the standard installation instructions at
-   :ref:`display-notebook`.
-
-2. You have too old a version of Jupyter notebook. Run::
-
-       $ jupyter notebook --version
-
-   and make certain you have version 5.3 or newer. If not, then update the notebook
-   using either ``pip install -U jupyter notebook`` or ``conda update jupyter notebook``
-   depending on how you first installed the packages.
-
-If you have done the above steps and charts still do not render, it likely means
-that you are using a different *Kernel* within your notebook. Switch to the kernel
-named *Python 2* if you are using Python 2, or *Python 3* if you are using Python 3.
-
-.. _notebook-textual-chart-representation:
-
-Notebook: Textual Chart Representation
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-*If you are using the Notebook rather than the JupyterLab, then refer to*
-:ref:`jupyterlab-textual-chart-representation`
-
-*If you are not using a Jupyter notebook environment, then refer to*
-:ref:`troubleshooting-non-notebook`.
-
-If you are using Jupyter notebook and see a textual representation of the Chart
-object similar to this::
-
-    Chart({
-      data: 'https://vega.github.io/vega-datasets/data/cars.json',
-      encoding: FacetedEncoding({
-        x: X({
-          shorthand: 'Horsepower'
-        })
-      }),
-      mark: 'point'
-    })
-
-it probably means that you are using an older Jupyter kernel.
-You can confirm this by running::
-
-   import IPython; IPython.__version__
-   # 6.2.1
-
-Altair will not display correctly if using a kernel with IPython version 4.X or older.
-
-The easiest way to address this is to change your kernel:
-choose "Kernel"->"Change Kernel" and then select "Python 2" or "Python 3",
-depending on what version of Python you used when installing Altair.
-
-
-.. _troubleshooting-non-notebook:
-
-Trouble-shooting Altair outside of Jupyter
-------------------------------------------
-If you are using Altair outside of a Jupyter notebook environment (such as a
-Python or IPython terminal) charts will be displayed as a textual
-representation. Rendering of Altair charts requires executing Javascript code,
-which your Python terminal cannot do natively.
-
-For recommendations on how to use Altair outside of notebook environments,
-see :ref:`display-general`.
-
-
-.. _`ECMAScript 6`: https://www.w3schools.com/js/js_es6.asp
-.. _`Javascript Console`: https://webmasters.stackexchange.com/questions/8525/how-do-i-open-the-javascript-console-in-different-browsers
-.. _Field: https://vega.github.io/vega-lite/docs/field.html
\ No newline at end of file
diff --git a/images/cars.png b/images/cars.png
index ae07dbd..cf325b4 100644
Binary files a/images/cars.png and b/images/cars.png differ
diff --git a/images/cars_scatter_bar.gif b/images/cars_scatter_bar.gif
index ffc9a09..367f7b6 100644
Binary files a/images/cars_scatter_bar.gif and b/images/cars_scatter_bar.gif differ
diff --git a/pyproject.toml b/pyproject.toml
index c297a21..727690b 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,157 @@
+# this file contains:
+# 1 build system configuration
+# 2 project configuration
+# 3 tool configuration, for:
+# - hatch
+# - black
+# - ruff
+# - pytest
+# - mypy
+
+[build-system]
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[project]
+name = "altair"
+authors = [ {name = "Vega-Altair Contributors"} ]
+dependencies = [
+    "importlib_metadata; python_version<\"3.8\"",
+    "typing_extensions>=4.0.1; python_version<\"3.11\"",
+    "jinja2",
+    "jsonschema>=3.0",
+    "numpy",
+    "pandas>=0.18",
+    "toolz"
+]
+description = "Vega-Altair: A declarative statistical visualization library for Python."
+readme = "README.md"
+keywords = [
+    "declarative",
+    "statistics",
+    "visualization",
+    "interactive",
+    "json",
+    "vega-lite",
+]
+requires-python = ">=3.7"
+dynamic = ["version"]
+license-files = { paths = ["LICENSE"] }
+classifiers= [
+    "Development Status :: 5 - Production/Stable",
+    "Environment :: Console",
+    "Intended Audience :: Science/Research",
+    "License :: OSI Approved :: BSD License",
+    "Natural Language :: English",
+    "Programming Language :: Python :: 3.7",
+    "Programming Language :: Python :: 3.8",
+    "Programming Language :: Python :: 3.9",
+    "Programming Language :: Python :: 3.10",
+    "Programming Language :: Python :: 3.11",
+]
+
+[project.urls]
+Documentation = "https://altair-viz.github.io"
+Source = "https://github.com/altair-viz/altair"
+
+[project.optional-dependencies]
+dev = [
+    "hatch",
+    "ruff",
+    "black<24",
+    "ipython",
+    "pytest",
+    "pytest-cov",
+    "m2r",
+    "vega_datasets",
+    # following is rejected by PyPI
+    "altair_viewer @ git+https://github.com/altair-viz/altair_viewer.git",
+    "vl-convert-python",
+    "mypy",
+    "pandas-stubs",
+    "types-jsonschema",
+    "types-setuptools"
+]
+doc = [
+    "sphinx",
+    "docutils",
+    "sphinxext_altair",
+    "jinja2",
+    "numpydoc",
+    "pillow",
+    "pydata-sphinx-theme",
+    "geopandas",
+    "myst-parser",
+    "sphinx_copybutton",
+    "sphinx-design"
+]
+
+[tool.hatch.version]
+path = "altair/__init__.py"
+
+[tool.hatch.metadata]
+allow-direct-references = true
+
+[tool.hatch.build]
+include = ["/altair"]
+
+[tool.hatch.envs.default]
+features = ["dev"]
+
+[tool.hatch.envs.default.scripts]
+test = [
+    "black --diff --color --check .",
+    "ruff check .",
+    "mypy altair tests",
+    "python -m pytest --pyargs --doctest-modules tests"
+]
+test-coverage = "python -m pytest --pyargs --doctest-modules --cov=altair --cov-report term altair"
+test-coverage-html = "python -m pytest --pyargs --doctest-modules --cov=altair --cov-report html altair"
+
+[tool.hatch.envs.doc]
+features = ["dev", "doc"]
+
+[tool.hatch.envs.doc.scripts]
+clean = "rm -rf doc/_build"
+clean-generated = [
+    "rm -rf doc/user_guide/generated",
+    "rm -rf doc/gallery"
+]
+clean-all = [
+    "clean",
+    "clean-generated",
+    "rm -rf doc/_images"
+]
+clean-win = "if exist doc\\_build rd /s /q doc\\_build"
+clean-generated-win = [
+    "if exist doc\\user_guide\\generated rd /s /q doc\\user_guide\\generated",
+    "if exist doc\\gallery rd /s /q doc\\gallery",
+]
+clean-all-win = [
+    "clean-win",
+    "clean-generated-win",
+    "if exist doc\\_images rd /s /q doc\\_images",
+]
+build-html = [
+    "mkdir -p doc/_images",
+    "sphinx-build -b html -d doc/_build/doctrees doc doc/_build/html"
+]
+build-html-win = [
+    "if not exist doc\\_images md doc\\_images",
+    "sphinx-build -b html -d doc\\_build\\doctrees doc doc\\_build\\html"
+]
+doctest = "sphinx-build -b doctest -d doc/_build/doctrees doc doc/_build/doctest"
+coverage = "sphinx-build -b coverage -d doc/_build/doctrees doc doc/_build/coverage"
+serve = "(cd doc/_build/html && python -m http.server)"
+publish-clean-build = [
+    "clean-all",
+    "build-html",
+    "(cd doc && bash sync_website.sh)"
+]
+
 [tool.black]
 line-length = 88
-target-version = ['py36', 'py37', 'py38']
+target-version = ["py37", "py38", "py39", "py310", "py311"]
 include = '\.pyi?$'
 exclude = '''
 /(
@@ -10,12 +161,78 @@ exclude = '''
   | build
   | dist
   | doc
-  | altair/examples
-  | altair/vega/v\d*/schema
+  | tests/examples_arguments_syntax
+  | tests/examples_methods_syntax
   | altair/vegalite/v\d*/schema
 )/
 '''
 
-[build-system]
-requires = ["setuptools >= 40.6.0", "wheel"]
-build-backend = "setuptools.build_meta"
+[tool.ruff]
+target-version = "py310"
+line-length = 88
+select = [
+    # flake8-bugbear
+    "B",
+    # flake8-comprehensions
+    "C4",
+    # pycodestyle-error
+    "E",
+    # pycodestyle-warning
+    "W",
+    # pyflakes
+    "F",
+    # flake8-tidy-imports
+    "TID"
+]
+ignore = [
+    # E203, E266, W503 not yet supported by ruff, 
+    # see https://github.com/charliermarsh/ruff/issues/2402
+    # Whitespace before ':'
+    # "E203",
+    # Too many leading '#' for block comment
+    # "E266",
+    # Line break occurred before a binary operator
+    # "W503",
+    # Line too long
+    "E501", 
+    # Relative imports are banned
+    "TID252",
+    # zip() without an explicit strict= parameter set.
+    # python>=3.10 only
+    "B905"
+]
+exclude = [
+    ".git",
+    "build",
+    "__pycache__",
+    "tests/examples_arguments_syntax",
+    "tests/examples_methods_syntax",
+    "altair/vegalite/v?/schema",
+]
+
+[tool.ruff.mccabe]
+max-complexity = 18
+
+[tool.pytest.ini_options]
+markers = [
+    "save_engine: marks some of the tests which are using an external package to save a chart to e.g. a png file. This mark is used to run those tests selectively in the build GitHub Action.",
+]
+
+[[tool.mypy.overrides]]
+module = [
+    "vega_datasets.*",
+    "toolz.*",
+    "altair_viewer.*",
+    "altair_saver.*",
+    "pyarrow.*",
+    "yaml.*",
+    "vl_convert.*",
+    "pandas.lib.*"
+]
+ignore_missing_imports = true
+
+[[tool.mypy.overrides]]
+module = [
+    "altair.vegalite.v5.schema.*"
+]
+ignore_errors = true
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index c692503..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-entrypoints
-jinja2
-jsonschema>=3.0
-numpy
-pandas>=0.18
-toolz
diff --git a/requirements_dev.txt b/requirements_dev.txt
deleted file mode 100644
index 5383e90..0000000
--- a/requirements_dev.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-black
-docutils
-ipython
-flake8
-pytest
-sphinx
-mistune<2.0.0  # necessary for m2r v0.2
-m2r
-vega_datasets
-recommonmark
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 49493bb..0000000
--- a/setup.cfg
+++ /dev/null
@@ -1,15 +0,0 @@
-[flake8]
-max-line-length = 88
-ignore = E203, E266, E501, W503
-max-complexity = 18
-select = B,C,E,F,W,T4,B9
-exclude = 
-  .git,
-  build,
-  __pycache__,
-  altair/examples
-  altair/vega*/v?/schema
-
-[metadata]
-description-file = README.md
-license_file = LICENSE
diff --git a/setup.py b/setup.py
deleted file mode 100644
index 1272cb2..0000000
--- a/setup.py
+++ /dev/null
@@ -1,85 +0,0 @@
-import io
-import os
-import re
-
-try:
-    from setuptools import setup
-except ImportError:
-    from distutils.core import setup
-
-# ==============================================================================
-# Utilities
-# ==============================================================================
-
-
-def read(path, encoding="utf-8"):
-    path = os.path.join(os.path.dirname(__file__), path)
-    with io.open(path, encoding=encoding) as fp:
-        return fp.read()
-
-
-def get_install_requirements(path):
-    content = read(path)
-    return [req for req in content.split("\n") if req != "" and not req.startswith("#")]
-
-
-def version(path):
-    """Obtain the package version from a python file e.g. pkg/__init__.py
-
-    See <https://packaging.python.org/en/latest/single_source_version.html>.
-    """
-    version_file = read(path)
-    version_match = re.search(
-        r"""^__version__ = ['"]([^'"]*)['"]""", version_file, re.M
-    )
-    if version_match:
-        return version_match.group(1)
-    raise RuntimeError("Unable to find version string.")
-
-
-HERE = os.path.abspath(os.path.dirname(__file__))
-
-
-# From https://github.com/jupyterlab/jupyterlab/blob/master/setupbase.py, BSD licensed
-def find_packages(top=HERE):
-    """
-    Find all of the packages.
-    """
-    packages = []
-    for d, dirs, _ in os.walk(top, followlinks=True):
-        if os.path.exists(os.path.join(d, "__init__.py")):
-            packages.append(os.path.relpath(d, top).replace(os.path.sep, "."))
-        elif d != top:
-            # Do not look for packages in subfolders if current is not a package
-            dirs[:] = []
-    return packages
-
-
-setup(
-    name="altair",
-    version=version("altair/__init__.py"),
-    description="Altair: A declarative statistical visualization library for Python.",
-    long_description=read("README.md"),
-    long_description_content_type="text/markdown",
-    author="Brian E. Granger / Jake VanderPlas",
-    author_email="jakevdp@gmail.com",
-    url="http://altair-viz.github.io",
-    download_url="http://github.com/altair-viz/altair/",
-    license="BSD 3-clause",
-    packages=find_packages(),
-    include_package_data=True,
-    install_requires=get_install_requirements("requirements.txt"),
-    python_requires=">=3.7",
-    extras_require={"dev": get_install_requirements("requirements_dev.txt")},
-    classifiers=[
-        "Development Status :: 5 - Production/Stable",
-        "Environment :: Console",
-        "Intended Audience :: Science/Research",
-        "License :: OSI Approved :: BSD License",
-        "Natural Language :: English",
-        "Programming Language :: Python :: 3.7",
-        "Programming Language :: Python :: 3.8",
-        "Programming Language :: Python :: 3.9",
-        "Programming Language :: Python :: 3.10",
-    ],
-)
diff --git a/altair/examples/tests/__init__.py b/sphinxext/__init__.py
similarity index 100%
rename from altair/examples/tests/__init__.py
rename to sphinxext/__init__.py
diff --git a/altair/sphinxext/altairgallery.py b/sphinxext/altairgallery.py
similarity index 72%
rename from altair/sphinxext/altairgallery.py
rename to sphinxext/altairgallery.py
index 9309066..94f4066 100644
--- a/altair/sphinxext/altairgallery.py
+++ b/sphinxext/altairgallery.py
@@ -5,6 +5,7 @@ import random
 import collections
 from operator import itemgetter
 import warnings
+import shutil
 
 import jinja2
 
@@ -22,7 +23,8 @@ from .utils import (
     create_generic_image,
 )
 from altair.utils.execeval import eval_block
-from altair.examples import iter_examples
+from tests.examples_arguments_syntax import iter_examples_arguments_syntax
+from tests.examples_methods_syntax import iter_examples_methods_syntax
 
 
 EXAMPLE_MODULE = "altair.examples"
@@ -37,15 +39,15 @@ GALLERY_TEMPLATE = jinja2.Template(
 {{ title }}
 {% for char in title %}-{% endfor %}
 
-This gallery contains a selection of examples of the plots Altair can create.
-
-Some may seem fairly complicated at first glance, but they are built by combining a simple set of declarative building blocks.
+This gallery contains a selection of examples of the plots Altair can create. Some may seem fairly complicated at first glance, but they are built by combining a simple set of declarative building blocks.
 
 Many draw upon sample datasets compiled by the `Vega <https://vega.github.io/vega/>`_ project. To access them yourself, install `vega_datasets <https://github.com/altair-viz/vega_datasets>`_.
 
 .. code-block:: none
 
-   $ pip install vega_datasets
+   python -m pip install vega_datasets
+
+If you can't find the plots you are looking for here, make sure to check out the :ref:`altair-ecosystem` section, which has links to packages for making e.g. network diagrams and animations.
 
 {% for grouper, group in examples %}
 
@@ -59,7 +61,15 @@ Many draw upon sample datasets compiled by the `Vega <https://vega.github.io/veg
    <span class="gallery">
    {% for example in group %}
    <a class="imagegroup" href="{{ example.name }}.html">
-     <span class="image" alt="{{ example.title }}" style="background-image: url({{ image_dir }}/{{ example.name }}-thumb.png);"></span>
+   <span
+        class="image" alt="{{ example.title }}"
+{% if example['use_svg'] %}
+        style="background-image: url(..{{ image_dir }}/{{ example.name }}-thumb.svg);"
+{% else %}
+        style="background-image: url(..{{ image_dir }}/{{ example.name }}-thumb.png);"
+{% endif %}
+    ></span>
+
      <span class="image-title">{{ example.title }}</span>
    </a>
    {% endfor %}
@@ -67,13 +77,16 @@ Many draw upon sample datasets compiled by the `Vega <https://vega.github.io/veg
 
    <div style='clear:both;'></div>
 
+{% endfor %}
+
+
 .. toctree::
-  :hidden:
-{% for example in group %}
-  {{ example.name }}
-{%- endfor %}
+   :maxdepth: 2
+   :caption: Examples
+   :hidden:
 
-{% endfor %}
+   Gallery <self>
+   Tutorials <../case_studies/exploring-weather>
 """
 )
 
@@ -84,7 +97,14 @@ MINIGALLERY_TEMPLATE = jinja2.Template(
     <div id="showcase">
       <div class="examples">
       {% for example in examples %}
-        <a class="preview" href="{{ gallery_dir }}/{{ example.name }}.html" style="background-image: url({{ image_dir }}/{{ example.name }}-thumb.png)"></a>
+      <a
+        class="preview" href="{{ gallery_dir }}/{{ example.name }}.html"
+{% if example['use_svg'] %}
+        style="background-image: url(.{{ image_dir }}/{{ example.name }}-thumb.svg)"
+{% else %}
+        style="background-image: url(.{{ image_dir }}/{{ example.name }}-thumb.png)"
+{% endif %}
+      ></a>
       {% endfor %}
       </div>
     </div>
@@ -94,6 +114,9 @@ MINIGALLERY_TEMPLATE = jinja2.Template(
 
 EXAMPLE_TEMPLATE = jinja2.Template(
     """
+:orphan:
+:html_theme.sidebar_secondary.remove:
+
 .. This document is auto-generated by the altair-gallery extension. Do not modify directly.
 
 .. _gallery_{{ name }}:
@@ -101,12 +124,26 @@ EXAMPLE_TEMPLATE = jinja2.Template(
 {{ docstring }}
 
 .. altair-plot::
-    {% if code_below %}:code-below:{% endif %}
+    {% if code_below %}:remove-code:{% endif %}
+    {% if strict %}:strict:{% endif %}
 
-    {{ code | indent(4) }}
+{{ code | indent(4) }}
 
-.. toctree::
-   :hidden:
+.. tab-set::
+
+    .. tab-item:: Method syntax
+        :sync: method
+
+        .. code:: python
+
+{{ method_code | indent(12) }}
+
+    .. tab-item:: Attribute syntax
+        :sync: attribute
+
+        .. code:: python
+
+{{ code | indent(12) }}
 """
 )
 
@@ -126,7 +163,7 @@ def save_example_pngs(examples, image_dir, make_thumbnails=True):
         hashes = {}
 
     for example in examples:
-        filename = example["name"] + ".png"
+        filename = example["name"] + (".svg" if example["use_svg"] else ".png")
         image_file = os.path.join(image_dir, filename)
 
         example_hash = hashlib.md5(example["code"].encode()).hexdigest()
@@ -142,7 +179,7 @@ def save_example_pngs(examples, image_dir, make_thumbnails=True):
                 chart.save(image_file)
                 hashes[filename] = example_hash
             except ImportError:
-                warnings.warn("Unable to save image: using generic image")
+                warnings.warn("Unable to save image: using generic image", stacklevel=1)
                 create_generic_image(image_file)
 
             with open(hash_file, "w") as f:
@@ -150,8 +187,13 @@ def save_example_pngs(examples, image_dir, make_thumbnails=True):
 
         if make_thumbnails:
             params = example.get("galleryParameters", {})
-            thumb_file = os.path.join(image_dir, example["name"] + "-thumb.png")
-            create_thumbnail(image_file, thumb_file, **params)
+            if example["use_svg"]:
+                # Thumbnail for SVG is identical to original image
+                thumb_file = os.path.join(image_dir, example["name"] + "-thumb.svg")
+                shutil.copyfile(image_file, thumb_file)
+            else:
+                thumb_file = os.path.join(image_dir, example["name"] + "-thumb.png")
+                create_thumbnail(image_file, thumb_file, **params)
 
     # Save hashes so we know whether we need to re-generate plots
     with open(hash_file, "w") as f:
@@ -161,18 +203,32 @@ def save_example_pngs(examples, image_dir, make_thumbnails=True):
 def populate_examples(**kwds):
     """Iterate through Altair examples and extract code"""
 
-    examples = sorted(iter_examples(), key=itemgetter("name"))
+    examples = sorted(iter_examples_arguments_syntax(), key=itemgetter("name"))
+    method_examples = {x["name"]: x for x in iter_examples_methods_syntax()}
 
     for example in examples:
         docstring, category, code, lineno = get_docstring_and_rest(example["filename"])
+        if example["name"] in method_examples.keys():
+            _, _, method_code, _ = get_docstring_and_rest(
+                method_examples[example["name"]]["filename"]
+            )
+        else:
+            method_code = code
+            code += (
+                "# No channel encoding options are specified in this chart\n"
+                "# so the code is the same as for the method-based syntax.\n"
+            )
         example.update(kwds)
         if category is None:
-            category = "other charts"
+            raise Exception(
+                f"The example {example['name']} is not assigned to a category"
+            )
         example.update(
             {
                 "docstring": docstring,
                 "title": docstring.strip().split("\n")[0],
                 "code": code,
+                "method_code": method_code,
                 "category": category.title(),
                 "lineno": lineno,
             }
@@ -253,7 +309,7 @@ def main(app):
 
     gallery_ref = app.builder.config.altair_gallery_ref
     gallery_title = app.builder.config.altair_gallery_title
-    examples = populate_examples(gallery_ref=gallery_ref, code_below=True)
+    examples = populate_examples(gallery_ref=gallery_ref, code_below=True, strict=False)
 
     if not os.path.exists(target_dir):
         os.makedirs(target_dir)
@@ -267,11 +323,13 @@ def main(app):
             "Area Charts": [],
             "Circular Plots": [],
             "Scatter Plots": [],
-            "Histograms": [],
+            "Uncertainties And Trends": [],
+            "Distributions": [],
+            "Tables": [],
             "Maps": [],
             "Interactive Charts": [],
+            "Advanced Calculations": [],
             "Case Studies": [],
-            "Other Charts": [],
         }
     )
     for d in examples:
diff --git a/altair/sphinxext/schematable.py b/sphinxext/schematable.py
similarity index 69%
rename from altair/sphinxext/schematable.py
rename to sphinxext/schematable.py
index 880e7e1..c70060b 100644
--- a/altair/sphinxext/schematable.py
+++ b/sphinxext/schematable.py
@@ -1,11 +1,17 @@
 import importlib
-import warnings
 import re
+import sys
+import warnings
+from os.path import abspath, dirname
 
+from docutils import nodes, utils, frontend
 from docutils.parsers.rst import Directive
-from docutils import nodes, utils
+from docutils.parsers.rst.directives import flag
+from myst_parser.docutils_ import Parser
 from sphinx import addnodes
-from recommonmark.parser import CommonMarkParser
+
+sys.path.insert(0, abspath(dirname(dirname(dirname(__file__)))))
+from tools.schemapi.utils import fix_docstring_issues, SchemaInfo  # noqa: E402
 
 
 def type_description(schema):
@@ -31,7 +37,8 @@ def type_description(schema):
         )
     else:
         warnings.warn(
-            "cannot infer type for schema with keys {}" "".format(schema.keys())
+            "cannot infer type for schema with keys {}" "".format(schema.keys()),
+            stacklevel=1,
         )
         return "--"
 
@@ -93,7 +100,7 @@ def add_text(node, text):
     return node
 
 
-def build_row(item):
+def build_row(item, rootschema):
     """Return nodes.row with property description"""
 
     prop, propschema, required = item
@@ -117,14 +124,19 @@ def build_row(item):
         is_text = not is_text
 
     # row += nodes.entry('')
-    row += nodes.entry("", par_type)  # , classes=["vl-type-def"]
+    row += nodes.entry("", par_type, classes=["vl-type-def"])
 
     # Description
-    md_parser = CommonMarkParser()
+    md_parser = Parser()
     # str_descr = "***Required.*** " if required else ""
+    description = SchemaInfo(propschema, rootschema).deep_description
+    description = description if description else " "
     str_descr = ""
-    str_descr += propschema.get("description", " ")
-    doc_descr = utils.new_document("schema_description")
+    str_descr += description
+    str_descr = fix_docstring_issues(str_descr)
+    document_settings = frontend.get_default_settings()
+    document_settings.setdefault("raw_enabled", True)
+    doc_descr = utils.new_document("schema_description", document_settings)
     md_parser.parse(str_descr, doc_descr)
 
     # row += nodes.entry('', *doc_descr.children, classes="vl-decsr")
@@ -133,19 +145,19 @@ def build_row(item):
     return row
 
 
-def build_schema_tabel(items):
-    """Return schema table of items (iterator of prop, schema.item, requred)"""
+def build_schema_table(items, rootschema):
+    """Return schema table of items (iterator of prop, schema.item, required)"""
     table, tbody = prepare_table_header(
         ["Property", "Type", "Description"], [10, 20, 50]
     )
     for item in items:
-        tbody += build_row(item)
+        tbody += build_row(item, rootschema)
 
     return table
 
 
 def select_items_from_schema(schema, props=None):
-    """Return iterator  (prop, schema.item, requred) on prop, return all in None"""
+    """Return iterator  (prop, schema.item, required) on prop, return all in None"""
     properties = schema.get("properties", {})
     required = schema.get("required", [])
     if not props:
@@ -155,14 +167,17 @@ def select_items_from_schema(schema, props=None):
         for prop in props:
             try:
                 yield prop, properties[prop], prop in required
-            except KeyError:
-                warnings.warn("Can't find property:", prop)
+            except KeyError as err:
+                raise Exception(f"Can't find property: {prop}") from err
 
 
-def prepare_schema_tabel(schema, props=None):
-
+def prepare_schema_table(schema, rootschema, props=None):
     items = select_items_from_schema(schema, props)
-    return build_schema_tabel(items)
+    return build_schema_table(items, rootschema)
+
+
+def validate_properties(properties):
+    return properties.strip().split()
 
 
 class AltairObjectTableDirective(Directive):
@@ -178,17 +193,32 @@ class AltairObjectTableDirective(Directive):
     has_content = False
     required_arguments = 1
 
-    def run(self):
+    option_spec = {"properties": validate_properties, "dont-collapse-table": flag}
 
+    def run(self):
         objectname = self.arguments[0]
         modname, classname = objectname.rsplit(".", 1)
         module = importlib.import_module(modname)
         cls = getattr(module, classname)
         schema = cls.resolve_references(cls._schema)
 
+        properties = self.options.get("properties", None)
+        dont_collapse_table = "dont-collapse-table" in self.options
+
+        result = []
+        if not dont_collapse_table:
+            html = "<details><summary><a>Click to show table</a></summary>"
+            raw_html = nodes.raw("", html, format="html")
+            result += [raw_html]
         # create the table from the object
-        table = prepare_schema_tabel(schema)
-        return [table]
+        result.append(prepare_schema_table(schema, cls._rootschema, props=properties))
+
+        if not dont_collapse_table:
+            html = "</details>"
+            raw_html = nodes.raw("", html, format="html")
+            result += [raw_html]
+
+        return result
 
 
 def setup(app):
diff --git a/altair/sphinxext/utils.py b/sphinxext/utils.py
similarity index 100%
rename from altair/sphinxext/utils.py
rename to sphinxext/utils.py
diff --git a/altair/expr/tests/__init__.py b/tests/__init__.py
similarity index 100%
rename from altair/expr/tests/__init__.py
rename to tests/__init__.py
diff --git a/tests/examples_arguments_syntax/__init__.py b/tests/examples_arguments_syntax/__init__.py
new file mode 100644
index 0000000..3a7f2d4
--- /dev/null
+++ b/tests/examples_arguments_syntax/__init__.py
@@ -0,0 +1,27 @@
+import os
+from typing import Set
+
+# Set of the names of examples that should have SVG static images.
+# This is for examples that VlConvert's PNG export does not support.
+SVG_EXAMPLES: Set[str] = {"isotype_emoji"}
+
+
+def iter_examples_arguments_syntax():
+    """Iterate over the examples in this directory.
+
+    Each item is a dict with the following keys:
+    - "name" : the unique name of the example
+    - "filename" : the full file path to the example
+    - "use_svg": Flag indicating whether the static image for the
+        example should be an SVG instead of a PNG
+    """
+    examples_arguments_syntax_dir = os.path.abspath(os.path.dirname(__file__))
+    for filename in os.listdir(examples_arguments_syntax_dir):
+        name, ext = os.path.splitext(filename)
+        if name.startswith("_") or ext != ".py":
+            continue
+        yield {
+            "name": name,
+            "filename": os.path.join(examples_arguments_syntax_dir, filename),
+            "use_svg": name in SVG_EXAMPLES
+        }
diff --git a/altair/examples/airport_connections.py b/tests/examples_arguments_syntax/airport_connections.py
similarity index 94%
rename from altair/examples/airport_connections.py
rename to tests/examples_arguments_syntax/airport_connections.py
index bfd2198..ef1363a 100644
--- a/altair/examples/airport_connections.py
+++ b/tests/examples_arguments_syntax/airport_connections.py
@@ -16,8 +16,8 @@ flights_airport = data.flights_airport.url
 states = alt.topo_feature(data.us_10m.url, feature="states")
 
 # Create mouseover selection
-select_city = alt.selection_single(
-    on="mouseover", nearest=True, fields=["origin"], empty="none"
+select_city = alt.selection_point(
+    on="mouseover", nearest=True, fields=["origin"], empty=False
 )
 
 # Define which attributes to lookup from airports.csv
@@ -63,7 +63,7 @@ points = alt.Chart(flights_airport).mark_circle().encode(
     from_=lookup_data
 ).transform_filter(
     (alt.datum.state != "PR") & (alt.datum.state != "VI")
-).add_selection(
+).add_params(
     select_city
 )
 
diff --git a/tests/examples_arguments_syntax/annual_weather_heatmap.py b/tests/examples_arguments_syntax/annual_weather_heatmap.py
new file mode 100644
index 0000000..972c424
--- /dev/null
+++ b/tests/examples_arguments_syntax/annual_weather_heatmap.py
@@ -0,0 +1,19 @@
+"""
+Annual Weather Heatmap
+----------------------
+"""
+# category: tables
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather()
+
+alt.Chart(source, title="Daily Max Temperatures (C) in Seattle, WA").mark_rect().encode(
+    x=alt.X("date(date):O", title="Day", axis=alt.Axis(format="%e", labelAngle=0)),
+    y=alt.Y("month(date):O", title="Month"),
+    color=alt.Color("max(temp_max)", legend=alt.Legend(title=None)),
+    tooltip=[
+        alt.Tooltip("monthdate(date)", title="Date"),
+        alt.Tooltip("max(temp_max)", title="Max Temp"),
+    ],
+).configure_view(step=13, strokeWidth=0).configure_axis(domain=False)
diff --git a/altair/examples/anscombe_plot.py b/tests/examples_arguments_syntax/anscombe_plot.py
similarity index 100%
rename from altair/examples/anscombe_plot.py
rename to tests/examples_arguments_syntax/anscombe_plot.py
diff --git a/altair/examples/area_chart_gradient.py b/tests/examples_arguments_syntax/area_chart_gradient.py
similarity index 100%
rename from altair/examples/area_chart_gradient.py
rename to tests/examples_arguments_syntax/area_chart_gradient.py
diff --git a/altair/examples/bar_and_line_with_dual_axis.py b/tests/examples_arguments_syntax/bar_and_line_with_dual_axis.py
similarity index 100%
rename from altair/examples/bar_and_line_with_dual_axis.py
rename to tests/examples_arguments_syntax/bar_and_line_with_dual_axis.py
diff --git a/altair/examples/bar_chart_horizontal.py b/tests/examples_arguments_syntax/bar_chart_horizontal.py
similarity index 100%
rename from altair/examples/bar_chart_horizontal.py
rename to tests/examples_arguments_syntax/bar_chart_horizontal.py
diff --git a/altair/examples/bar_chart_sorted.py b/tests/examples_arguments_syntax/bar_chart_sorted.py
similarity index 100%
rename from altair/examples/bar_chart_sorted.py
rename to tests/examples_arguments_syntax/bar_chart_sorted.py
diff --git a/altair/examples/bar_chart_trellis_compact.py b/tests/examples_arguments_syntax/bar_chart_trellis_compact.py
similarity index 100%
rename from altair/examples/bar_chart_trellis_compact.py
rename to tests/examples_arguments_syntax/bar_chart_trellis_compact.py
diff --git a/altair/examples/bar_chart_with_highlighted_bar.py b/tests/examples_arguments_syntax/bar_chart_with_highlighted_bar.py
similarity index 100%
rename from altair/examples/bar_chart_with_highlighted_bar.py
rename to tests/examples_arguments_syntax/bar_chart_with_highlighted_bar.py
diff --git a/altair/examples/bar_chart_with_highlighted_segment.py b/tests/examples_arguments_syntax/bar_chart_with_highlighted_segment.py
similarity index 96%
rename from altair/examples/bar_chart_with_highlighted_segment.py
rename to tests/examples_arguments_syntax/bar_chart_with_highlighted_segment.py
index 3326ac5..09292fe 100644
--- a/altair/examples/bar_chart_with_highlighted_segment.py
+++ b/tests/examples_arguments_syntax/bar_chart_with_highlighted_segment.py
@@ -3,6 +3,7 @@ Bar Chart with Highlighted Segment
 ----------------------------------
 This example shows a bar chart that highlights values beyond a threshold.
 """
+# category: bar charts
 import altair as alt
 import pandas as pd
 from vega_datasets import data
diff --git a/tests/examples_arguments_syntax/bar_chart_with_labels.py b/tests/examples_arguments_syntax/bar_chart_with_labels.py
new file mode 100644
index 0000000..a477bb4
--- /dev/null
+++ b/tests/examples_arguments_syntax/bar_chart_with_labels.py
@@ -0,0 +1,18 @@
+"""
+Bar Chart with Labels
+=====================
+This example shows a basic horizontal bar chart with labels created with Altair.
+"""
+# category: bar charts
+import altair as alt
+from vega_datasets import data
+
+
+source = data.wheat()
+
+base = alt.Chart(source).encode(
+    x='wheat',
+    y="year:O",
+    text='wheat'
+)
+base.mark_bar() + base.mark_text(align='left', dx=2)
diff --git a/altair/examples/bar_chart_with_mean_line.py b/tests/examples_arguments_syntax/bar_chart_with_mean_line.py
similarity index 100%
rename from altair/examples/bar_chart_with_mean_line.py
rename to tests/examples_arguments_syntax/bar_chart_with_mean_line.py
diff --git a/altair/examples/bar_chart_with_negatives.py b/tests/examples_arguments_syntax/bar_chart_with_negatives.py
similarity index 100%
rename from altair/examples/bar_chart_with_negatives.py
rename to tests/examples_arguments_syntax/bar_chart_with_negatives.py
diff --git a/altair/examples/bar_rounded.py b/tests/examples_arguments_syntax/bar_rounded.py
similarity index 92%
rename from altair/examples/bar_rounded.py
rename to tests/examples_arguments_syntax/bar_rounded.py
index 3db4cbf..f01ce60 100644
--- a/altair/examples/bar_rounded.py
+++ b/tests/examples_arguments_syntax/bar_rounded.py
@@ -1,5 +1,5 @@
 """
-Bar Chart with rounded edges
+Bar Chart with Rounded Edges
 ----------------------------
 This example shows how to create a bar chart with rounded edges.
 """
diff --git a/altair/examples/bar_with_rolling_mean.py b/tests/examples_arguments_syntax/bar_with_rolling_mean.py
similarity index 100%
rename from altair/examples/bar_with_rolling_mean.py
rename to tests/examples_arguments_syntax/bar_with_rolling_mean.py
diff --git a/altair/examples/beckers_barley_trellis_plot.py b/tests/examples_arguments_syntax/beckers_barley_trellis_plot.py
similarity index 100%
rename from altair/examples/beckers_barley_trellis_plot.py
rename to tests/examples_arguments_syntax/beckers_barley_trellis_plot.py
diff --git a/altair/examples/beckers_barley_wrapped_facet.py b/tests/examples_arguments_syntax/beckers_barley_wrapped_facet.py
similarity index 89%
rename from altair/examples/beckers_barley_wrapped_facet.py
rename to tests/examples_arguments_syntax/beckers_barley_wrapped_facet.py
index e379a7f..b67af69 100644
--- a/altair/examples/beckers_barley_wrapped_facet.py
+++ b/tests/examples_arguments_syntax/beckers_barley_wrapped_facet.py
@@ -1,11 +1,11 @@
 """
-Becker's Barley Trellis Plot (wrapped facet)
+Becker's Barley Trellis Plot (Wrapped Facet)
 --------------------------------------------
 The example demonstrates the trellis charts created by Richard Becker, William Cleveland and others in the 1990s. 
 This is the Altair replicate of `the VegaLite version <https://vega.github.io/vega-lite/docs/facet.html#facet-full>`_ 
 demonstrating the usage of `columns` argument to create wrapped facet.
 """
-# category: other charts
+# category: advanced calculations
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/boxplot.py b/tests/examples_arguments_syntax/boxplot.py
similarity index 95%
rename from altair/examples/boxplot.py
rename to tests/examples_arguments_syntax/boxplot.py
index 31cd62f..a98c637 100644
--- a/altair/examples/boxplot.py
+++ b/tests/examples_arguments_syntax/boxplot.py
@@ -6,7 +6,7 @@ Note that the default value of the `extent` property is 1.5,
 which represents the convention of extending the whiskers
 to the furthest points within 1.5 * IQR from the first and third quartile.
 """
-# category: other charts
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/bubble_plot.py b/tests/examples_arguments_syntax/bubble_plot.py
similarity index 100%
rename from altair/examples/bubble_plot.py
rename to tests/examples_arguments_syntax/bubble_plot.py
diff --git a/altair/examples/bump_chart.py b/tests/examples_arguments_syntax/bump_chart.py
similarity index 100%
rename from altair/examples/bump_chart.py
rename to tests/examples_arguments_syntax/bump_chart.py
diff --git a/altair/examples/candlestick_chart.py b/tests/examples_arguments_syntax/candlestick_chart.py
similarity index 96%
rename from altair/examples/candlestick_chart.py
rename to tests/examples_arguments_syntax/candlestick_chart.py
index 1997cda..23b338b 100644
--- a/altair/examples/candlestick_chart.py
+++ b/tests/examples_arguments_syntax/candlestick_chart.py
@@ -6,7 +6,7 @@ This example shows the performance of the Chicago Board Options Exchange `Volati
 in the summer of 2009. The thick bar represents the opening and closing prices, 
 while the thin bar shows intraday high and low prices; if the index closed higher on a given day, the bars are colored green rather than red.
 """
-# category: other charts
+# category: advanced calculations
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/choropleth.py b/tests/examples_arguments_syntax/choropleth.py
similarity index 100%
rename from altair/examples/choropleth.py
rename to tests/examples_arguments_syntax/choropleth.py
diff --git a/altair/examples/choropleth_repeat.py b/tests/examples_arguments_syntax/choropleth_repeat.py
similarity index 100%
rename from altair/examples/choropleth_repeat.py
rename to tests/examples_arguments_syntax/choropleth_repeat.py
diff --git a/altair/examples/co2_concentration.py b/tests/examples_arguments_syntax/co2_concentration.py
similarity index 100%
rename from altair/examples/co2_concentration.py
rename to tests/examples_arguments_syntax/co2_concentration.py
diff --git a/altair/examples/comet_chart.py b/tests/examples_arguments_syntax/comet_chart.py
similarity index 94%
rename from altair/examples/comet_chart.py
rename to tests/examples_arguments_syntax/comet_chart.py
index e0749a0..32dd939 100644
--- a/altair/examples/comet_chart.py
+++ b/tests/examples_arguments_syntax/comet_chart.py
@@ -1,12 +1,12 @@
 """
-Comet Chart Example
-----------------------------
+Comet Chart
+-----------
 Inspired by `Zan Armstrong's comet chart <https://www.zanarmstrong.com/infovisresearch>`_
 this plot uses ``mark_trail`` to visualize change of grouped data over time.
 A more elaborate example and explanation of creating comet charts in Altair
 is shown in `this blogpost <https://medium.com/de-dataverbinders/comet-charts-in-python-visualizing-statistical-mix-effects-and-simpsons-paradox-with-altair-6cd51fb58b7c>`_.
 """
-# category: other charts
+# category: advanced calculations
 
 import altair as alt
 import vega_datasets
diff --git a/altair/examples/connected_scatterplot.py b/tests/examples_arguments_syntax/connected_scatterplot.py
similarity index 86%
rename from altair/examples/connected_scatterplot.py
rename to tests/examples_arguments_syntax/connected_scatterplot.py
index 39f27d8..8528fb8 100644
--- a/altair/examples/connected_scatterplot.py
+++ b/tests/examples_arguments_syntax/connected_scatterplot.py
@@ -1,6 +1,6 @@
 """
-Connected Scatterplot (Lines with Custom Paths)
------------------------------------------------
+Connected Scatter Plot (Lines with Custom Paths)
+------------------------------------------------
 
 This example show how the order encoding can be used to draw a custom path. The dataset tracks miles driven per capita along with gas prices annually from 1956 to 2010.
 It is based on Hannah Fairfield's article 'Driving Shifts Into Reverse'. See https://archive.nytimes.com/www.nytimes.com/imagepages/2010/05/02/business/02metrics.html for the original.
diff --git a/altair/examples/cumulative_count_chart.py b/tests/examples_arguments_syntax/cumulative_count_chart.py
similarity index 94%
rename from altair/examples/cumulative_count_chart.py
rename to tests/examples_arguments_syntax/cumulative_count_chart.py
index 810a614..f6e1df0 100644
--- a/altair/examples/cumulative_count_chart.py
+++ b/tests/examples_arguments_syntax/cumulative_count_chart.py
@@ -5,7 +5,7 @@ This example shows an area chart with cumulative count.
 Adapted from https://vega.github.io/vega-lite/examples/area_cumulative_freq.html
 
 """
-# category: area charts
+# category: distributions
 
 import altair as alt
 from vega_datasets import data
diff --git a/tests/examples_arguments_syntax/dendrogram.py b/tests/examples_arguments_syntax/dendrogram.py
new file mode 100644
index 0000000..bd35dda
--- /dev/null
+++ b/tests/examples_arguments_syntax/dendrogram.py
@@ -0,0 +1,143 @@
+"""
+Dendrogram of Hierarchical Clustering
+-------------------------------------
+This is a dendrogram from the result of a hierarchical clustering. It's based on the example from
+https://scikit-learn.org/stable/auto_examples/cluster/plot_agglomerative_dendrogram.html
+"""
+# category: case studies
+
+import pandas as pd
+import altair as alt
+import numpy as np
+
+# the variable `den` shown below is an exemplary output of `scipy.cluster.hierarchy.dendrogram` 
+# (https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html#scipy.cluster.hierarchy.dendrogram)
+# where the dendrogram itself is truncated such that no more than 3 levels of the dendrogram tree are shown.
+den = {
+    'dcoord': [[0.0, 0.8187388676087964, 0.8187388676087964, 0.0],
+  [0.0, 1.105139508538779, 1.105139508538779, 0.0],
+  [0.8187388676087964,
+   1.3712698320830048,
+   1.3712698320830048,
+   1.105139508538779],
+  [0.0, 0.9099819926189507, 0.9099819926189507, 0.0],
+  [0.0, 1.2539936203984452, 1.2539936203984452, 0.0],
+  [0.9099819926189507,
+   1.9187528699821954,
+   1.9187528699821954,
+   1.2539936203984452],
+  [1.3712698320830048,
+   3.828052620290243,
+   3.828052620290243,
+   1.9187528699821954],
+  [0.0, 1.7604450194955439, 1.7604450194955439, 0.0],
+  [0.0, 1.845844754344974, 1.845844754344974, 0.0],
+  [1.7604450194955439,
+   4.847708507921838,
+   4.847708507921838,
+   1.845844754344974],
+  [0.0, 2.8139388316471536, 2.8139388316471536, 0.0],
+  [0.0, 2.8694176394568705, 2.8694176394568705, 0.0],
+  [2.8139388316471536,
+   6.399406819518539,
+   6.399406819518539,
+   2.8694176394568705],
+  [4.847708507921838,
+   12.300396052792589,
+   12.300396052792589,
+   6.399406819518539],
+  [3.828052620290243,
+   32.44760699959244,
+   32.44760699959244,
+   12.300396052792589]],
+ 'icoord': [[5.0, 5.0, 15.0, 15.0],
+  [25.0, 25.0, 35.0, 35.0],
+  [10.0, 10.0, 30.0, 30.0],
+  [45.0, 45.0, 55.0, 55.0],
+  [65.0, 65.0, 75.0, 75.0],
+  [50.0, 50.0, 70.0, 70.0],
+  [20.0, 20.0, 60.0, 60.0],
+  [85.0, 85.0, 95.0, 95.0],
+  [105.0, 105.0, 115.0, 115.0],
+  [90.0, 90.0, 110.0, 110.0],
+  [125.0, 125.0, 135.0, 135.0],
+  [145.0, 145.0, 155.0, 155.0],
+  [130.0, 130.0, 150.0, 150.0],
+  [100.0, 100.0, 140.0, 140.0],
+  [40.0, 40.0, 120.0, 120.0]],
+ 'ivl': [
+     '(7)', '(8)', '41', '(5)', '(10)', '(7)', '(4)', '(8)', '(9)', '(15)', '(5)', '(7)', '(4)', '(22)', '(15)', '(23)'
+     ],
+}
+
+def get_leaf_loc(den):
+    """
+    Get the location of the leaves
+    """
+    _from = int(np.array(den["icoord"]).min())
+    _to = int(np.array(den["icoord"]).max() + 1)
+    return range(_from, _to, 10)
+
+def get_df_coord(den):
+    """
+    Get coordinate dataframe.
+    """
+    # if you view the dendrogram as a collection of upside-down "U" shapes, then
+    # we can regard the 4 corners of the upside-down "U" as points 1, 2, 3 and 4.
+    cols_xk = ["xk1", "xk2", "xk3", "xk4"]
+    cols_yk = ["yk1", "yk2", "yk3", "yk4"]
+
+    df_coord = pd.merge(
+        pd.DataFrame(den["icoord"], columns=cols_xk),
+        pd.DataFrame(den["dcoord"], columns=cols_yk),
+        left_index=True,
+        right_index=True
+    )
+    return df_coord
+
+source = get_df_coord(den)
+base = alt.Chart(source)
+
+# the U shape is composed of a shoulder plus two arms
+shoulder = base.mark_rule().encode(
+    alt.X("xk2:Q", title=""),
+    alt.X2("xk3:Q"),
+    alt.Y("yk2:Q", title="")
+)
+arm1 = base.mark_rule().encode(
+    alt.X("xk1:Q"), 
+    alt.Y("yk1:Q"), 
+    alt.Y2("yk2:Q")
+)
+arm2 = base.mark_rule().encode(
+    alt.X("xk3:Q"), 
+    alt.Y("yk3:Q"), 
+    alt.Y2("yk4:Q")
+)
+
+chart_den = shoulder + arm1 + arm2
+
+df_text = pd.DataFrame(dict(labels=den["ivl"], x=get_leaf_loc(den)))
+
+chart_text = alt.Chart(
+    df_text
+).mark_text(
+    dy=0, angle=0, align="center"
+).encode(
+    x = alt.X("x:Q", axis={"grid":False, "title":"Number of points in nodes"}),
+    text = alt.Text("labels:N")
+)
+
+(chart_den & chart_text).resolve_scale(
+    x="shared"
+).configure(
+    padding={"top":10,"left":10}
+).configure_concat(
+    spacing=0
+).configure_axis(
+    labels=False,
+    ticks=False,
+    grid=False
+).properties(
+    title="Hierarchical Clustering Dendrogram"
+)
\ No newline at end of file
diff --git a/altair/examples/density_facet.py b/tests/examples_arguments_syntax/density_facet.py
similarity index 95%
rename from altair/examples/density_facet.py
rename to tests/examples_arguments_syntax/density_facet.py
index e8b1bbe..5bfbc27 100644
--- a/altair/examples/density_facet.py
+++ b/tests/examples_arguments_syntax/density_facet.py
@@ -3,7 +3,7 @@ Faceted Density Estimates
 -------------------------
 Density estimates of measurements for each iris flower feature
 """
-# category: area charts
+# category: distributions
 
 import altair as alt
 from vega_datasets import data
diff --git a/altair/examples/density_stack.py b/tests/examples_arguments_syntax/density_stack.py
similarity index 97%
rename from altair/examples/density_stack.py
rename to tests/examples_arguments_syntax/density_stack.py
index 2fdbdc0..e408e30 100644
--- a/altair/examples/density_stack.py
+++ b/tests/examples_arguments_syntax/density_stack.py
@@ -8,7 +8,7 @@ in a stacked method.  In addition, setting ``counts`` to true multiplies the
 densities by the number of data points in each group, preserving proportional
 differences.
 """
-# category: area charts
+# category: distributions
 
 import altair as alt
 from vega_datasets import data
diff --git a/altair/examples/diverging_stacked_bar_chart.py b/tests/examples_arguments_syntax/diverging_stacked_bar_chart.py
similarity index 100%
rename from altair/examples/diverging_stacked_bar_chart.py
rename to tests/examples_arguments_syntax/diverging_stacked_bar_chart.py
diff --git a/altair/examples/donut_chart.py b/tests/examples_arguments_syntax/donut_chart.py
similarity index 100%
rename from altair/examples/donut_chart.py
rename to tests/examples_arguments_syntax/donut_chart.py
diff --git a/altair/examples/dot_dash_plot.py b/tests/examples_arguments_syntax/dot_dash_plot.py
similarity index 91%
rename from altair/examples/dot_dash_plot.py
rename to tests/examples_arguments_syntax/dot_dash_plot.py
index 4554082..72d73d2 100644
--- a/altair/examples/dot_dash_plot.py
+++ b/tests/examples_arguments_syntax/dot_dash_plot.py
@@ -4,15 +4,15 @@ Dot Dash Plot
 How to make the dot-dash plot presented in Edward Tufte's `Visual Display of Quantitative Information <https://www.edwardtufte.com/tufte/books_vdqi>`_. Based
 on a JavaScript implementation by `g3o2 <https://bl.ocks.org/g3o2/bd4362574137061c243a2994ba648fb8>`_.
 """
-# category: scatter plots
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
 source = data.cars()
 
 # Configure the options common to all layers
-brush = alt.selection(type='interval')
-base = alt.Chart(source).add_selection(brush)
+brush = alt.selection_interval()
+base = alt.Chart(source).add_params(brush)
 
 # Configure the points
 points = base.mark_point().encode(
diff --git a/tests/examples_arguments_syntax/empirical_cumulative_distribution_function.py b/tests/examples_arguments_syntax/empirical_cumulative_distribution_function.py
new file mode 100644
index 0000000..2563943
--- /dev/null
+++ b/tests/examples_arguments_syntax/empirical_cumulative_distribution_function.py
@@ -0,0 +1,20 @@
+"""
+Empirical Cumulative Distribution Function
+------------------------------------------
+This example shows an empirical cumulative distribution function.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+alt.Chart(source).transform_window(
+    ecdf="cume_dist()",
+    sort=[{"field": "IMDB_Rating"}],
+).mark_line(
+    interpolate="step-after"
+).encode(
+    x="IMDB_Rating:Q",
+    y="ecdf:Q"
+)
diff --git a/altair/examples/errorbars_with_ci.py b/tests/examples_arguments_syntax/errorbars_with_ci.py
similarity index 90%
rename from altair/examples/errorbars_with_ci.py
rename to tests/examples_arguments_syntax/errorbars_with_ci.py
index ec70b27..55c706e 100644
--- a/altair/examples/errorbars_with_ci.py
+++ b/tests/examples_arguments_syntax/errorbars_with_ci.py
@@ -1,11 +1,11 @@
 """
-Error Bars showing Confidence Interval
+Error Bars with Confidence Interval
 ======================================
 This example shows how to show error bars using confidence intervals.
 The confidence intervals are computed internally in vega by a non-parametric
 `bootstrap of the mean <https://github.com/vega/vega-statistics/blob/master/src/bootstrapCI.js>`_.
 """
-# category: other charts
+# category: uncertainties and trends
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/errorbars_with_std.py b/tests/examples_arguments_syntax/errorbars_with_std.py
similarity index 82%
rename from altair/examples/errorbars_with_std.py
rename to tests/examples_arguments_syntax/errorbars_with_std.py
index 1864e0e..167bc72 100644
--- a/altair/examples/errorbars_with_std.py
+++ b/tests/examples_arguments_syntax/errorbars_with_std.py
@@ -1,10 +1,10 @@
 """
-Error Bar with Standard Deviation
----------------------------------
+Error Bars with Standard Deviation
+----------------------------------
 This example shows how to show error bars with standard deviation using crop yields data of different
 in the years of 1930s.
 """
-# category: other charts
+# category: uncertainties and trends
 import altair as alt
 from vega_datasets import data
 
diff --git a/tests/examples_arguments_syntax/falkensee.py b/tests/examples_arguments_syntax/falkensee.py
new file mode 100644
index 0000000..3744dff
--- /dev/null
+++ b/tests/examples_arguments_syntax/falkensee.py
@@ -0,0 +1,78 @@
+"""
+Population of Falkensee from 1875 to 2014
+-----------------------------------------
+This example is a reproduction of the Falkensee plot found in the Vega-Lite examples.
+"""
+# category: case studies
+import altair as alt
+import pandas as pd
+
+source = [
+    {"year": "1875", "population": 1309},
+    {"year": "1890", "population": 1558},
+    {"year": "1910", "population": 4512},
+    {"year": "1925", "population": 8180},
+    {"year": "1933", "population": 15915},
+    {"year": "1939", "population": 24824},
+    {"year": "1946", "population": 28275},
+    {"year": "1950", "population": 29189},
+    {"year": "1964", "population": 29881},
+    {"year": "1971", "population": 26007},
+    {"year": "1981", "population": 24029},
+    {"year": "1985", "population": 23340},
+    {"year": "1989", "population": 22307},
+    {"year": "1990", "population": 22087},
+    {"year": "1991", "population": 22139},
+    {"year": "1992", "population": 22105},
+    {"year": "1993", "population": 22242},
+    {"year": "1994", "population": 22801},
+    {"year": "1995", "population": 24273},
+    {"year": "1996", "population": 25640},
+    {"year": "1997", "population": 27393},
+    {"year": "1998", "population": 29505},
+    {"year": "1999", "population": 32124},
+    {"year": "2000", "population": 33791},
+    {"year": "2001", "population": 35297},
+    {"year": "2002", "population": 36179},
+    {"year": "2003", "population": 36829},
+    {"year": "2004", "population": 37493},
+    {"year": "2005", "population": 38376},
+    {"year": "2006", "population": 39008},
+    {"year": "2007", "population": 39366},
+    {"year": "2008", "population": 39821},
+    {"year": "2009", "population": 40179},
+    {"year": "2010", "population": 40511},
+    {"year": "2011", "population": 40465},
+    {"year": "2012", "population": 40905},
+    {"year": "2013", "population": 41258},
+    {"year": "2014", "population": 41777},
+]
+
+source2 = [
+    {"start": "1933", "end": "1945", "event": "Nazi Rule"},
+    {"start": "1948", "end": "1989", "event": "GDR (East Germany)"},
+]
+
+
+source_df = pd.DataFrame(source)
+source2_df = pd.DataFrame(source2)
+
+
+line = alt.Chart(source_df).mark_line(color="#333").encode(
+    x=alt.X("year:T", axis=alt.Axis(format="%Y"), title="Year"),
+    y=alt.Y("population", title="Population"),
+)
+
+point = line.mark_point(color="#333")
+
+rect = alt.Chart(source2_df).mark_rect().encode(
+    x="start:T",
+    x2="end:T",
+    color=alt.Color("event:N", title="Event")
+)
+
+(rect + line + point).properties(
+    title="Population of Falkensee from 1875 to 2014",
+    width=500,
+    height=300
+)
diff --git a/altair/examples/filled_step_chart.py b/tests/examples_arguments_syntax/filled_step_chart.py
similarity index 100%
rename from altair/examples/filled_step_chart.py
rename to tests/examples_arguments_syntax/filled_step_chart.py
diff --git a/altair/examples/gantt_chart.py b/tests/examples_arguments_syntax/gantt_chart.py
similarity index 91%
rename from altair/examples/gantt_chart.py
rename to tests/examples_arguments_syntax/gantt_chart.py
index 6368890..f64bb4b 100644
--- a/altair/examples/gantt_chart.py
+++ b/tests/examples_arguments_syntax/gantt_chart.py
@@ -3,7 +3,7 @@ Gantt Chart
 -----------------
 This example shows how to make a simple Gantt chart.
 """
-# category: other charts
+# category: advanced calculations
 import altair as alt
 import pandas as pd
 
diff --git a/altair/examples/gapminder_bubble_plot.py b/tests/examples_arguments_syntax/gapminder_bubble_plot.py
similarity index 100%
rename from altair/examples/gapminder_bubble_plot.py
rename to tests/examples_arguments_syntax/gapminder_bubble_plot.py
diff --git a/altair/examples/airports_count.py b/tests/examples_arguments_syntax/groupby-map.py
similarity index 79%
rename from altair/examples/airports_count.py
rename to tests/examples_arguments_syntax/groupby-map.py
index be4c6b9..adb4e02 100644
--- a/altair/examples/airports_count.py
+++ b/tests/examples_arguments_syntax/groupby-map.py
@@ -1,8 +1,7 @@
 """
-Locations of US Airports
-========================
-This is a layered geographic visualization that shows the positions of US
-airports on a background of US states.
+Grouped Points with Proportional Symbols Map
+============================================
+This is a layered geographic visualization that groups points by state.
 """
 # category: maps
 import altair as alt
@@ -20,7 +19,7 @@ background = alt.Chart(states).mark_geoshape(
     height=300
 ).project('albersUsa')
 
-# airport positions on background
+# Airports grouped by state
 points = alt.Chart(airports).transform_aggregate(
     latitude='mean(latitude)',
     longitude='mean(longitude)',
diff --git a/altair/examples/grouped_bar_chart.py b/tests/examples_arguments_syntax/grouped_bar_chart.py
similarity index 100%
rename from altair/examples/grouped_bar_chart.py
rename to tests/examples_arguments_syntax/grouped_bar_chart.py
diff --git a/tests/examples_arguments_syntax/grouped_bar_chart2.py b/tests/examples_arguments_syntax/grouped_bar_chart2.py
new file mode 100644
index 0000000..74e9551
--- /dev/null
+++ b/tests/examples_arguments_syntax/grouped_bar_chart2.py
@@ -0,0 +1,20 @@
+"""
+Grouped Bar Chart with xOffset
+------------------------------
+Like :ref:`gallery_grouped_bar_chart`, this example shows a grouped bar chart.  Whereas :ref:`gallery_grouped_bar_chart` used the ``column`` encoding channel, this example uses the ``xOffset`` encoding channel.  This is adapted from a corresponding Vega-Lite Example:
+`Grouped Bar Chart <https://vega.github.io/vega-lite/examples/bar_grouped.html>`_.
+"""
+# category: bar charts
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame({"Category":list("AAABBBCCC"),
+                     "Group":list("xyzxyzxyz"),
+                     "Value":[0.1, 0.6, 0.9, 0.7, 0.2, 1.1, 0.6, 0.1, 0.2]})
+
+alt.Chart(source).mark_bar().encode(
+    x="Category:N",
+    y="Value:Q",
+    xOffset="Group:N",
+    color="Group:N"
+)
diff --git a/altair/examples/grouped_bar_chart_horizontal.py b/tests/examples_arguments_syntax/grouped_bar_chart_horizontal.py
similarity index 100%
rename from altair/examples/grouped_bar_chart_horizontal.py
rename to tests/examples_arguments_syntax/grouped_bar_chart_horizontal.py
diff --git a/altair/examples/grouped_bar_chart_with_error_bars.py b/tests/examples_arguments_syntax/grouped_bar_chart_with_error_bars.py
similarity index 100%
rename from altair/examples/grouped_bar_chart_with_error_bars.py
rename to tests/examples_arguments_syntax/grouped_bar_chart_with_error_bars.py
diff --git a/tests/examples_arguments_syntax/heat_lane.py b/tests/examples_arguments_syntax/heat_lane.py
new file mode 100644
index 0000000..7239c1f
--- /dev/null
+++ b/tests/examples_arguments_syntax/heat_lane.py
@@ -0,0 +1,44 @@
+"""
+Heat Lane Chart
+---------------
+This example shows how to make an alternative form of a histogram `designed at Google <https://www.smashingmagazine.com/2022/07/accessibility-first-approach-chart-visual-design/>`_ with the goal of increasing accessibility.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.cars.url
+
+chart = alt.Chart(source, title="Car horsepower", height=100, width=300).encode(
+    x=alt.X(
+        "bin_Horsepower_start:Q",
+        title="Horsepower",
+        axis=alt.Axis(grid=False)
+    ),
+    x2="bin_Horsepower_end:Q",
+    y=alt.Y("y:O", axis=None),
+    y2="y2",
+).transform_bin(
+    ["bin_Horsepower_start", "bin_Horsepower_end"],
+    field='Horsepower'
+).transform_aggregate(
+    count='count()',
+    groupby=["bin_Horsepower_start", "bin_Horsepower_end"]
+).transform_bin(
+    ["bin_count_start", "bin_count_end"],
+    field='count'
+).transform_calculate(
+    y="datum.bin_count_end/2",
+    y2="-datum.bin_count_end/2",
+).transform_joinaggregate(
+    max_bin_count_end="max(bin_count_end)",
+)
+
+layer1 = chart.mark_bar(xOffset=1, x2Offset=-1, cornerRadius=3).encode(
+    color=alt.Color("max_bin_count_end:O", scale=alt.Scale(scheme="lighttealblue"), title="Number of models")
+)
+layer2 = chart.mark_bar(xOffset=1, x2Offset=-1, yOffset=-3, y2Offset=3).encode(
+    color=alt.Color("bin_count_end:O", title="Number of models")
+)
+
+layer1 + layer2
diff --git a/altair/examples/hexbins.py b/tests/examples_arguments_syntax/hexbins.py
similarity index 97%
rename from altair/examples/hexbins.py
rename to tests/examples_arguments_syntax/hexbins.py
index 974630e..a8d91ac 100644
--- a/altair/examples/hexbins.py
+++ b/tests/examples_arguments_syntax/hexbins.py
@@ -1,8 +1,9 @@
 """
 Hexbin Chart
------------------
+------------
 This example shows a hexbin chart.
 """
+# category: tables
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/binned_heatmap.py b/tests/examples_arguments_syntax/histogram_heatmap.py
similarity index 84%
rename from altair/examples/binned_heatmap.py
rename to tests/examples_arguments_syntax/histogram_heatmap.py
index ecdaab8..e284449 100644
--- a/altair/examples/binned_heatmap.py
+++ b/tests/examples_arguments_syntax/histogram_heatmap.py
@@ -1,9 +1,9 @@
 """
-Binned Heatmap
---------------
+2D Histogram Heatmap
+--------------------
 This example shows how to make a heatmap from binned quantitative data.
 """
-# category: other charts
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/histogram_responsive.py b/tests/examples_arguments_syntax/histogram_responsive.py
similarity index 93%
rename from altair/examples/histogram_responsive.py
rename to tests/examples_arguments_syntax/histogram_responsive.py
index c8af4e7..8e3cfdc 100644
--- a/altair/examples/histogram_responsive.py
+++ b/tests/examples_arguments_syntax/histogram_responsive.py
@@ -5,7 +5,7 @@ This shows an example of a histogram with bins that are responsive to a
 selection domain. Click and drag on the bottom panel to see the bins
 change on the top panel.
 """
-# category: histograms
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
@@ -31,5 +31,5 @@ alt.vconcat(
   ),
   base.encode(
     alt.X('time:Q', bin=alt.Bin(maxbins=30)),
-  ).add_selection(brush)
-)
\ No newline at end of file
+  ).add_params(brush)
+)
diff --git a/altair/examples/binned_scatterplot.py b/tests/examples_arguments_syntax/histogram_scatterplot.py
similarity index 63%
rename from altair/examples/binned_scatterplot.py
rename to tests/examples_arguments_syntax/histogram_scatterplot.py
index 413aacb..482eee7 100644
--- a/altair/examples/binned_scatterplot.py
+++ b/tests/examples_arguments_syntax/histogram_scatterplot.py
@@ -1,9 +1,9 @@
 """
-Binned Scatterplot
-------------------
-This example shows how to make a binned scatterplot.
+2D Histogram Scatter Plot
+-------------------------
+This example shows how to make a 2d histogram scatter plot.
 """
-# category: scatter plots
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/histogram_with_a_global_mean_overlay.py b/tests/examples_arguments_syntax/histogram_with_a_global_mean_overlay.py
similarity index 94%
rename from altair/examples/histogram_with_a_global_mean_overlay.py
rename to tests/examples_arguments_syntax/histogram_with_a_global_mean_overlay.py
index 8d4d67c..f2cc9a3 100644
--- a/altair/examples/histogram_with_a_global_mean_overlay.py
+++ b/tests/examples_arguments_syntax/histogram_with_a_global_mean_overlay.py
@@ -3,7 +3,7 @@ Histogram with a Global Mean Overlay
 ------------------------------------
 This example shows a histogram with a global mean overlay.
 """
-# category: histograms
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/horizon_graph.py b/tests/examples_arguments_syntax/horizon_graph.py
similarity index 100%
rename from altair/examples/horizon_graph.py
rename to tests/examples_arguments_syntax/horizon_graph.py
diff --git a/altair/examples/horizontal_stacked_bar_chart.py b/tests/examples_arguments_syntax/horizontal_stacked_bar_chart.py
similarity index 100%
rename from altair/examples/horizontal_stacked_bar_chart.py
rename to tests/examples_arguments_syntax/horizontal_stacked_bar_chart.py
diff --git a/altair/examples/image_tooltip.py b/tests/examples_arguments_syntax/image_tooltip.py
similarity index 64%
rename from altair/examples/image_tooltip.py
rename to tests/examples_arguments_syntax/image_tooltip.py
index 9b818c6..8077f1b 100644
--- a/altair/examples/image_tooltip.py
+++ b/tests/examples_arguments_syntax/image_tooltip.py
@@ -1,11 +1,13 @@
 """
-Image tooltip
+Image Tooltip
 -------------
 This example shows how to render images in tooltips.
 Either URLs or local file paths can be used to reference
-the images.
+the images. To render the image, you must use the special
+column name "image" in your data and pass it as a list to
+the tooltip encoding.
 """
-# category: other charts
+# category: interactive charts
 
 import altair as alt
 import pandas as pd
@@ -17,5 +19,5 @@ source = pd.DataFrame.from_records(
 alt.Chart(source).mark_circle(size=200).encode(
     x='a',
     y='b',
-    tooltip=['image']  # Must be a list for the image to render
+    tooltip=['image']  # Must be a list containing a field called "image"
 )
diff --git a/altair/examples/interactive_brush.py b/tests/examples_arguments_syntax/interactive_brush.py
similarity index 88%
rename from altair/examples/interactive_brush.py
rename to tests/examples_arguments_syntax/interactive_brush.py
index cbeec1b..2cfd660 100644
--- a/altair/examples/interactive_brush.py
+++ b/tests/examples_arguments_syntax/interactive_brush.py
@@ -10,10 +10,10 @@ import altair as alt
 from vega_datasets import data
 
 source = data.cars()
-brush = alt.selection(type='interval')
+brush = alt.selection_interval()
 
 alt.Chart(source).mark_point().encode(
     x='Horsepower:Q',
     y='Miles_per_Gallon:Q',
     color=alt.condition(brush, 'Cylinders:O', alt.value('grey')),
-).add_selection(brush)
+).add_params(brush)
diff --git a/altair/examples/interactive_cross_highlight.py b/tests/examples_arguments_syntax/interactive_cross_highlight.py
similarity index 94%
rename from altair/examples/interactive_cross_highlight.py
rename to tests/examples_arguments_syntax/interactive_cross_highlight.py
index 1ba80cf..796dc31 100644
--- a/altair/examples/interactive_cross_highlight.py
+++ b/tests/examples_arguments_syntax/interactive_cross_highlight.py
@@ -11,7 +11,7 @@ from vega_datasets import data
 
 source = data.movies.url
 
-pts = alt.selection(type="single", encodings=['x'])
+pts = alt.selection_point(encodings=['x'])
 
 rect = alt.Chart(data.movies.url).mark_rect().encode(
     alt.X('IMDB_Rating:Q', bin=True),
@@ -38,7 +38,7 @@ bar = alt.Chart(source).mark_bar().encode(
 ).properties(
     width=550,
     height=200
-).add_selection(pts)
+).add_params(pts)
 
 alt.vconcat(
     rect + circ,
diff --git a/altair/examples/interactive_layered_crossfilter.py b/tests/examples_arguments_syntax/interactive_layered_crossfilter.py
similarity index 93%
rename from altair/examples/interactive_layered_crossfilter.py
rename to tests/examples_arguments_syntax/interactive_layered_crossfilter.py
index edde195..2980929 100644
--- a/altair/examples/interactive_layered_crossfilter.py
+++ b/tests/examples_arguments_syntax/interactive_layered_crossfilter.py
@@ -14,7 +14,7 @@ source = alt.UrlData(
     format={'parse': {'date': 'date'}}
 )
 
-brush = alt.selection(type='interval', encodings=['x'])
+brush = alt.selection_interval(encodings=['x'])
 
 # Define the base chart, with the common parts of the
 # background and highlights
@@ -29,7 +29,7 @@ base = alt.Chart().mark_bar().encode(
 # gray background with selection
 background = base.encode(
     color=alt.value('#ddd')
-).add_selection(brush)
+).add_params(brush)
 
 # blue highlights on the transformed data
 highlight = base.transform_filter(brush)
diff --git a/altair/examples/interactive_legend.py b/tests/examples_arguments_syntax/interactive_legend.py
similarity index 78%
rename from altair/examples/interactive_legend.py
rename to tests/examples_arguments_syntax/interactive_legend.py
index 040d80b..bd8b14b 100644
--- a/altair/examples/interactive_legend.py
+++ b/tests/examples_arguments_syntax/interactive_legend.py
@@ -3,8 +3,7 @@ Interactive Legend
 ------------------
 The following shows how to create a chart with an interactive legend, by
 binding the selection to ``"legend"``. Such a binding only works with
-``selection_single`` or ``selection_multi`` when projected over a single
-field or encoding.
+``selection_point`` when projected over a single field or encoding.
 """
 # category: interactive charts
 import altair as alt
@@ -12,13 +11,13 @@ from vega_datasets import data
 
 source = data.unemployment_across_industries.url
 
-selection = alt.selection_multi(fields=['series'], bind='legend')
+selection = alt.selection_point(fields=['series'], bind='legend')
 
 alt.Chart(source).mark_area().encode(
     alt.X('yearmonth(date):T', axis=alt.Axis(domain=False, format='%Y', tickSize=0)),
     alt.Y('sum(count):Q', stack='center', axis=None),
     alt.Color('series:N', scale=alt.Scale(scheme='category20b')),
     opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
-).add_selection(
+).add_params(
     selection
-)
\ No newline at end of file
+)
diff --git a/altair/examples/interactive_scatter_plot.py b/tests/examples_arguments_syntax/interactive_scatter_plot.py
similarity index 62%
rename from altair/examples/interactive_scatter_plot.py
rename to tests/examples_arguments_syntax/interactive_scatter_plot.py
index 69be3fe..a6e7fc3 100644
--- a/altair/examples/interactive_scatter_plot.py
+++ b/tests/examples_arguments_syntax/interactive_scatter_plot.py
@@ -1,7 +1,7 @@
 """
-Simple Interactive Colored Scatterplot
---------------------------------------
-This example shows how to make an interactive scatterplot.
+Simple Interactive Colored Scatter Plot
+---------------------------------------
+This example shows how to make an interactive scatter plot.
 """
 # category: interactive charts
 import altair as alt
diff --git a/altair/examples/interval_selection.py b/tests/examples_arguments_syntax/interval_selection.py
similarity index 79%
rename from altair/examples/interval_selection.py
rename to tests/examples_arguments_syntax/interval_selection.py
index 55853d9..e32ba3f 100644
--- a/altair/examples/interval_selection.py
+++ b/tests/examples_arguments_syntax/interval_selection.py
@@ -1,6 +1,6 @@
 """
-Interval Selection Example
-==========================
+Interval Selection
+==================
 
 This is an example of creating a stacked chart for which the domain of the
 top chart can be selected by interacting with the bottom chart.
@@ -11,7 +11,7 @@ from vega_datasets import data
 
 source = data.sp500.url
 
-brush = alt.selection(type='interval', encodings=['x'])
+brush = alt.selection_interval(encodings=['x'])
 
 base = alt.Chart(source).mark_area().encode(
     x = 'date:T',
@@ -27,6 +27,6 @@ upper = base.encode(
 
 lower = base.properties(
     height=60
-).add_selection(brush)
+).add_params(brush)
 
 upper & lower
diff --git a/altair/examples/iowa_electricity.py b/tests/examples_arguments_syntax/iowa_electricity.py
similarity index 95%
rename from altair/examples/iowa_electricity.py
rename to tests/examples_arguments_syntax/iowa_electricity.py
index dfb4e82..0f2081d 100644
--- a/altair/examples/iowa_electricity.py
+++ b/tests/examples_arguments_syntax/iowa_electricity.py
@@ -1,5 +1,5 @@
 """
-Iowa's renewable energy boom
+Iowa's Renewable Energy Boom
 ----------------------------
 This example is a fully developed stacked chart using the sample dataset of Iowa's electricity sources.
 """
diff --git a/altair/examples/isotype.py b/tests/examples_arguments_syntax/isotype.py
similarity index 99%
rename from altair/examples/isotype.py
rename to tests/examples_arguments_syntax/isotype.py
index 0764411..23da6f4 100644
--- a/altair/examples/isotype.py
+++ b/tests/examples_arguments_syntax/isotype.py
@@ -5,7 +5,7 @@ Isotype Visualization shows the distribution of animals across UK and US.
 Inspired by `Only An Ocean Between, 1943 <http://www.thomwhite.co.uk/?p=1303>`_. Population Live Stock, p.13.
 This is adapted from Vega-Lite example https://vega.github.io/editor/#/examples/vega-lite/isotype_bar_chart
 '''
-# category: case studies
+# category: advanced calculations
 import altair as alt
 import pandas as pd
 
diff --git a/altair/examples/isotype_emoji.py b/tests/examples_arguments_syntax/isotype_emoji.py
similarity index 98%
rename from altair/examples/isotype_emoji.py
rename to tests/examples_arguments_syntax/isotype_emoji.py
index 3469070..92ab0f3 100644
--- a/altair/examples/isotype_emoji.py
+++ b/tests/examples_arguments_syntax/isotype_emoji.py
@@ -5,7 +5,7 @@ Isotype Visualization shows the distribution of animals across UK and US, using
 marks rather than custom SVG paths (see https://altair-viz.github.io/gallery/isotype.html).
 This is adapted from Vega-Lite example https://vega.github.io/vega-lite/examples/isotype_bar_chart_emoji.html.
 '''
-# category: case studies
+# category:advanced calculations
 import altair as alt
 import pandas as pd
 
diff --git a/altair/examples/isotype_grid.py b/tests/examples_arguments_syntax/isotype_grid.py
similarity index 96%
rename from altair/examples/isotype_grid.py
rename to tests/examples_arguments_syntax/isotype_grid.py
index fd446e4..f90e9e8 100644
--- a/altair/examples/isotype_grid.py
+++ b/tests/examples_arguments_syntax/isotype_grid.py
@@ -3,7 +3,7 @@ Isotype Grid
 ------------
 This example is a grid of isotype figures.
 """
-# category: other charts
+# category: advanced calculations
 import altair as alt
 import pandas as pd
 
diff --git a/tests/examples_arguments_syntax/lasagna_plot.py b/tests/examples_arguments_syntax/lasagna_plot.py
new file mode 100644
index 0000000..6f603b8
--- /dev/null
+++ b/tests/examples_arguments_syntax/lasagna_plot.py
@@ -0,0 +1,33 @@
+"""
+Lasagna Plot (Dense Time-Series Heatmap)
+----------------------------------------
+"""
+# category: tables
+import altair as alt
+from vega_datasets import data
+
+source = data.stocks()
+
+color_condition = alt.condition(
+    "month(datum.value) == 1 && date(datum.value) == 1",
+    alt.value("black"),
+    alt.value(None),
+)
+
+alt.Chart(source, width=300, height=100).transform_filter(
+    alt.datum.symbol != "GOOG"
+).mark_rect().encode(
+    x=alt.X(
+        "yearmonthdate(date):O",
+        axis=alt.Axis(
+            format="%Y",
+            labelAngle=0,
+            labelOverlap=False,
+            labelColor=color_condition,
+            tickColor=color_condition,
+        ),
+        title="Time",
+    ),
+    y=alt.Y("symbol:N", title=None),
+    color=alt.Color("sum(price)", title="Price"),
+)
diff --git a/altair/examples/layer_line_color_rule.py b/tests/examples_arguments_syntax/layer_line_color_rule.py
similarity index 100%
rename from altair/examples/layer_line_color_rule.py
rename to tests/examples_arguments_syntax/layer_line_color_rule.py
diff --git a/altair/examples/layered_area_chart.py b/tests/examples_arguments_syntax/layered_area_chart.py
similarity index 100%
rename from altair/examples/layered_area_chart.py
rename to tests/examples_arguments_syntax/layered_area_chart.py
diff --git a/altair/examples/layered_bar_chart.py b/tests/examples_arguments_syntax/layered_bar_chart.py
similarity index 100%
rename from altair/examples/layered_bar_chart.py
rename to tests/examples_arguments_syntax/layered_bar_chart.py
diff --git a/altair/examples/layered_chart_bar_mark.py b/tests/examples_arguments_syntax/layered_chart_bar_mark.py
similarity index 100%
rename from altair/examples/layered_chart_bar_mark.py
rename to tests/examples_arguments_syntax/layered_chart_bar_mark.py
diff --git a/altair/examples/layered_chart_with_dual_axis.py b/tests/examples_arguments_syntax/layered_chart_with_dual_axis.py
similarity index 95%
rename from altair/examples/layered_chart_with_dual_axis.py
rename to tests/examples_arguments_syntax/layered_chart_with_dual_axis.py
index f01b94a..8ef8f09 100644
--- a/altair/examples/layered_chart_with_dual_axis.py
+++ b/tests/examples_arguments_syntax/layered_chart_with_dual_axis.py
@@ -3,7 +3,7 @@ Layered chart with Dual-Axis
 ----------------------------
 This example shows how to create a second independent y axis.
 """
-# category: other charts
+# category: advanced calculations
 
 import altair as alt
 from vega_datasets import data
diff --git a/altair/examples/layered_heatmap_text.py b/tests/examples_arguments_syntax/layered_heatmap_text.py
similarity index 57%
rename from altair/examples/layered_heatmap_text.py
rename to tests/examples_arguments_syntax/layered_heatmap_text.py
index 396f50b..dc912ed 100644
--- a/altair/examples/layered_heatmap_text.py
+++ b/tests/examples_arguments_syntax/layered_heatmap_text.py
@@ -4,38 +4,39 @@ Text over a Heatmap
 
 An example of a layered chart of text over a heatmap using the cars dataset.
 """
-# category: other charts
+# category: tables
 import altair as alt
 from vega_datasets import data
 
 source = data.cars()
 
-# Configure common options
+# Configure common options. We specify the aggregation
+# as a transform here so we can reuse it in both layers.
 base = alt.Chart(source).transform_aggregate(
-    num_cars='count()',
+    mean_horsepower='mean(Horsepower)',
     groupby=['Origin', 'Cylinders']
 ).encode(
-    alt.X('Cylinders:O', scale=alt.Scale(paddingInner=0)),
-    alt.Y('Origin:O', scale=alt.Scale(paddingInner=0)),
+    alt.X('Cylinders:O'),
+    alt.Y('Origin:O'),
 )
 
 # Configure heatmap
 heatmap = base.mark_rect().encode(
-    color=alt.Color('num_cars:Q',
+    color=alt.Color('mean_horsepower:Q',
         scale=alt.Scale(scheme='viridis'),
-        legend=alt.Legend(direction='horizontal')
+        legend=alt.Legend(title="Mean of Horsepower"),
     )
 )
 
 # Configure text
 text = base.mark_text(baseline='middle').encode(
-    text='num_cars:Q',
+    text=alt.Text('mean_horsepower:Q', format=".0f"),
     color=alt.condition(
-        alt.datum.num_cars > 100,
+        alt.datum.mean_horsepower > 150,
         alt.value('black'),
         alt.value('white')
     )
 )
 
 # Draw the chart
-heatmap + text
\ No newline at end of file
+heatmap + text
diff --git a/altair/examples/layered_histogram.py b/tests/examples_arguments_syntax/layered_histogram.py
similarity index 96%
rename from altair/examples/layered_histogram.py
rename to tests/examples_arguments_syntax/layered_histogram.py
index 4dca759..f1af326 100644
--- a/altair/examples/layered_histogram.py
+++ b/tests/examples_arguments_syntax/layered_histogram.py
@@ -3,7 +3,7 @@ Layered Histogram
 =================
 This example shows how to use opacity to make a layered histogram in Altair.
 """
-# category: histograms
+# category: distributions
 import pandas as pd
 import altair as alt
 import numpy as np
diff --git a/altair/examples/line_chart_with_color_datum.py b/tests/examples_arguments_syntax/line_chart_with_color_datum.py
similarity index 95%
rename from altair/examples/line_chart_with_color_datum.py
rename to tests/examples_arguments_syntax/line_chart_with_color_datum.py
index 912b32a..17d3a1c 100644
--- a/altair/examples/line_chart_with_color_datum.py
+++ b/tests/examples_arguments_syntax/line_chart_with_color_datum.py
@@ -1,5 +1,5 @@
 """
-Line Chart with datum for color
+Line Chart with Datum for Color
 -------------------------------
 An example of using ``datum`` and ``repeat`` to color a multi-series line chart.
 This is adapted from this corresponding Vega-Lite Example:
diff --git a/altair/examples/line_chart_with_cumsum.py b/tests/examples_arguments_syntax/line_chart_with_cumsum.py
similarity index 100%
rename from altair/examples/line_chart_with_cumsum.py
rename to tests/examples_arguments_syntax/line_chart_with_cumsum.py
diff --git a/tests/examples_arguments_syntax/line_chart_with_custom_legend.py b/tests/examples_arguments_syntax/line_chart_with_custom_legend.py
new file mode 100644
index 0000000..9921282
--- /dev/null
+++ b/tests/examples_arguments_syntax/line_chart_with_custom_legend.py
@@ -0,0 +1,40 @@
+"""
+Line Chart with Custom Legend
+-----------------------------
+This example uses the argmax aggregation function in order to create a custom
+legend for a line chart.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+
+source = data.stocks()
+
+base = alt.Chart(source).encode(
+    color=alt.Color("symbol", legend=None)
+).transform_filter(
+    "datum.symbol !== 'IBM'"
+).properties(
+    width=500
+)
+
+line = base.mark_line().encode(x="date", y="price")
+
+
+last_price = base.mark_circle().encode(
+    x=alt.X("last_date['date']:T"),
+    y=alt.Y("last_date['price']:Q")
+).transform_aggregate(
+    last_date="argmax(date)",
+    groupby=["symbol"]
+)
+
+company_name = last_price.mark_text(align="left", dx=4).encode(text="symbol")
+
+chart = (line + last_price + company_name).encode(
+    x=alt.X(title="date"),
+    y=alt.Y(title="price")
+)
+
+chart
diff --git a/altair/examples/line_chart_with_datum.py b/tests/examples_arguments_syntax/line_chart_with_datum.py
similarity index 97%
rename from altair/examples/line_chart_with_datum.py
rename to tests/examples_arguments_syntax/line_chart_with_datum.py
index 490bd0d..94489c0 100644
--- a/altair/examples/line_chart_with_datum.py
+++ b/tests/examples_arguments_syntax/line_chart_with_datum.py
@@ -1,5 +1,5 @@
 """
-Line Chart with datum
+Line Chart with Datum
 ---------------------------------
 An example of using ``datum`` to highlight certain values, including a ``DateTime`` value.
 This is adapted from two corresponding Vega-Lite Examples:
diff --git a/altair/examples/line_chart_with_generator.py b/tests/examples_arguments_syntax/line_chart_with_generator.py
similarity index 100%
rename from altair/examples/line_chart_with_generator.py
rename to tests/examples_arguments_syntax/line_chart_with_generator.py
diff --git a/tests/examples_arguments_syntax/line_chart_with_interpolation.py b/tests/examples_arguments_syntax/line_chart_with_interpolation.py
new file mode 100644
index 0000000..4da9623
--- /dev/null
+++ b/tests/examples_arguments_syntax/line_chart_with_interpolation.py
@@ -0,0 +1,16 @@
+"""
+Line Chart with Interpolation
+-----------------------------
+This chart shows a line chart with the path interpolated. A full list of interpolation methods is available `in the documentation <https://altair-viz.github.io/user_guide/generated/core/altair.LineConfig.html?highlight=interpolate#altair-lineconfig>`_.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+source = data.stocks()
+
+alt.Chart(source).mark_line(interpolate="monotone").encode(
+    x="date:T",
+    y="price:Q",
+    color="symbol:N"
+)
diff --git a/altair/examples/multiple_marks.py b/tests/examples_arguments_syntax/line_chart_with_points.py
similarity index 54%
rename from altair/examples/multiple_marks.py
rename to tests/examples_arguments_syntax/line_chart_with_points.py
index e262dd3..1cd8efa 100644
--- a/altair/examples/multiple_marks.py
+++ b/tests/examples_arguments_syntax/line_chart_with_points.py
@@ -1,10 +1,9 @@
 """
-Multiple Marks
-==============
-This example demonstrates creating a single chart with multiple markers
-representing the same data.
+Line Chart with Point Markers
+-----------------------------
+This chart shows a simple line chart with points marking each value.
 """
-# category: other charts
+# category: line charts
 import altair as alt
 from vega_datasets import data
 
@@ -14,4 +13,4 @@ alt.Chart(source).mark_line(point=True).encode(
     x='date:T',
     y='price:Q',
     color='symbol:N'
-)
+)
\ No newline at end of file
diff --git a/tests/examples_arguments_syntax/line_chart_with_points_stroked.py b/tests/examples_arguments_syntax/line_chart_with_points_stroked.py
new file mode 100644
index 0000000..fd990d9
--- /dev/null
+++ b/tests/examples_arguments_syntax/line_chart_with_points_stroked.py
@@ -0,0 +1,18 @@
+"""
+Line Chart with Stroked Point Markers
+-------------------------------------
+This example shows a simple line chart with points in a different color.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+source = data.stocks()
+
+alt.Chart(source).mark_line(
+    point=alt.OverlayMarkDef(filled=False, fill="white")
+).encode(
+    x='date:T',
+    y='price:Q',
+    color='symbol:N'
+)
diff --git a/altair/examples/line_percent.py b/tests/examples_arguments_syntax/line_percent.py
similarity index 100%
rename from altair/examples/line_percent.py
rename to tests/examples_arguments_syntax/line_percent.py
diff --git a/altair/examples/line_with_ci.py b/tests/examples_arguments_syntax/line_with_ci.py
similarity index 92%
rename from altair/examples/line_with_ci.py
rename to tests/examples_arguments_syntax/line_with_ci.py
index 410cbfe..5db9791 100644
--- a/altair/examples/line_with_ci.py
+++ b/tests/examples_arguments_syntax/line_with_ci.py
@@ -3,7 +3,7 @@ Line Chart with Confidence Interval Band
 ----------------------------------------
 How to make a line chart with a bootstrapped 95% confidence interval band.
 """
-# category: line charts
+# category: uncertainties and trends
 import altair as alt
 from vega_datasets import data
 
diff --git a/tests/examples_arguments_syntax/line_with_last_value_labeled.py b/tests/examples_arguments_syntax/line_with_last_value_labeled.py
new file mode 100644
index 0000000..bc9fda7
--- /dev/null
+++ b/tests/examples_arguments_syntax/line_with_last_value_labeled.py
@@ -0,0 +1,38 @@
+"""
+Line Chart with Last Value Labeled
+----------------------------------
+This chart shows a line chart with a label annotating the final value 
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+# Import example data
+source = data.stocks()
+
+# Create a common chart object
+# Use `transform_filter` to reduce the dataset to clarify our example. Not required.
+chart = (
+    alt.Chart(source)
+    .transform_filter(alt.datum.symbol != "IBM")
+    .encode(color=alt.Color("symbol", legend=None))
+)
+
+# Draw the line
+line = chart.mark_line().encode(x="date:T", y="price:Q")
+
+# Use the `argmax` aggregate to limit the dataset to the final value
+label = chart.encode(
+    x=alt.X("max(date):T"),
+    y=alt.Y("price:Q", aggregate=alt.ArgmaxDef(argmax="date")),
+    text="symbol",
+)
+
+# Create a text label
+text = label.mark_text(align="left", dx=4)
+
+# Create a circle annotation
+circle = label.mark_circle()
+
+# Draw the chart with all the layers combined
+line + circle + text
diff --git a/altair/examples/line_with_log_scale.py b/tests/examples_arguments_syntax/line_with_log_scale.py
similarity index 100%
rename from altair/examples/line_with_log_scale.py
rename to tests/examples_arguments_syntax/line_with_log_scale.py
diff --git a/altair/examples/london_tube.py b/tests/examples_arguments_syntax/london_tube.py
similarity index 100%
rename from altair/examples/london_tube.py
rename to tests/examples_arguments_syntax/london_tube.py
diff --git a/tests/examples_arguments_syntax/mosaic_with_labels.py b/tests/examples_arguments_syntax/mosaic_with_labels.py
new file mode 100644
index 0000000..2db0baf
--- /dev/null
+++ b/tests/examples_arguments_syntax/mosaic_with_labels.py
@@ -0,0 +1,87 @@
+"""
+Mosaic Chart with Labels
+------------------------
+"""
+# category: tables
+
+import altair as alt
+from vega_datasets import data
+
+source = data.cars()
+
+base = (
+    alt.Chart(source)
+    .transform_aggregate(count_="count()", groupby=["Origin", "Cylinders"])
+    .transform_stack(
+        stack="count_",
+        as_=["stack_count_Origin1", "stack_count_Origin2"],
+        offset="normalize",
+        sort=[alt.SortField("Origin", "ascending")],
+        groupby=[],
+    )
+    .transform_window(
+        x="min(stack_count_Origin1)",
+        x2="max(stack_count_Origin2)",
+        rank_Cylinders="dense_rank()",
+        distinct_Cylinders="distinct(Cylinders)",
+        groupby=["Origin"],
+        frame=[None, None],
+        sort=[alt.SortField("Cylinders", "ascending")],
+    )
+    .transform_window(
+        rank_Origin="dense_rank()",
+        frame=[None, None],
+        sort=[alt.SortField("Origin", "ascending")],
+    )
+    .transform_stack(
+        stack="count_",
+        groupby=["Origin"],
+        as_=["y", "y2"],
+        offset="normalize",
+        sort=[alt.SortField("Cylinders", "ascending")],
+    )
+    .transform_calculate(
+        ny="datum.y + (datum.rank_Cylinders - 1) * datum.distinct_Cylinders * 0.01 / 3",
+        ny2="datum.y2 + (datum.rank_Cylinders - 1) * datum.distinct_Cylinders * 0.01 / 3",
+        nx="datum.x + (datum.rank_Origin - 1) * 0.01",
+        nx2="datum.x2 + (datum.rank_Origin - 1) * 0.01",
+        xc="(datum.nx+datum.nx2)/2",
+        yc="(datum.ny+datum.ny2)/2",
+    )
+)
+
+
+rect = base.mark_rect().encode(
+    x=alt.X("nx:Q", axis=None),
+    x2="nx2",
+    y="ny:Q",
+    y2="ny2",
+    color=alt.Color("Origin:N", legend=None),
+    opacity=alt.Opacity("Cylinders:Q", legend=None),
+    tooltip=["Origin:N", "Cylinders:Q"],
+)
+
+
+text = base.mark_text(baseline="middle").encode(
+    x=alt.X("xc:Q", axis=None), y=alt.Y("yc:Q", title="Cylinders"), text="Cylinders:N"
+)
+
+
+mosaic = rect + text
+
+origin_labels = base.mark_text(baseline="middle", align="center").encode(
+    x=alt.X(
+        "min(xc):Q",
+        axis=alt.Axis(title="Origin", orient="top"),
+    ),
+    color=alt.Color("Origin", legend=None),
+    text="Origin",
+)
+
+(
+    (origin_labels & mosaic)
+    .resolve_scale(x="shared")
+    .configure_view(stroke="")
+    .configure_concat(spacing=10)
+    .configure_axis(domain=False, ticks=False, labels=False, grid=False)
+)
diff --git a/tests/examples_arguments_syntax/multi_series_line.py b/tests/examples_arguments_syntax/multi_series_line.py
new file mode 100644
index 0000000..024ffb6
--- /dev/null
+++ b/tests/examples_arguments_syntax/multi_series_line.py
@@ -0,0 +1,17 @@
+"""
+Multiple Series Line Chart
+--------------------------
+
+This example shows how to make a line chart with multiple series of data.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+source = data.stocks()
+
+alt.Chart(source).mark_line().encode(
+    x='date:T',
+    y='price:Q',
+    color='symbol:N',
+)
diff --git a/altair/examples/multifeature_scatter_plot.py b/tests/examples_arguments_syntax/multifeature_scatter_plot.py
similarity index 100%
rename from altair/examples/multifeature_scatter_plot.py
rename to tests/examples_arguments_syntax/multifeature_scatter_plot.py
diff --git a/altair/examples/multiline_highlight.py b/tests/examples_arguments_syntax/multiline_highlight.py
similarity index 91%
rename from altair/examples/multiline_highlight.py
rename to tests/examples_arguments_syntax/multiline_highlight.py
index 231ff73..7fcd4d7 100644
--- a/altair/examples/multiline_highlight.py
+++ b/tests/examples_arguments_syntax/multiline_highlight.py
@@ -12,7 +12,7 @@ from vega_datasets import data
 
 source = data.stocks()
 
-highlight = alt.selection(type='single', on='mouseover',
+highlight = alt.selection_point(on='mouseover',
                           fields=['symbol'], nearest=True)
 
 base = alt.Chart(source).encode(
@@ -23,7 +23,7 @@ base = alt.Chart(source).encode(
 
 points = base.mark_circle().encode(
     opacity=alt.value(0)
-).add_selection(
+).add_params(
     highlight
 ).properties(
     width=600
diff --git a/altair/examples/multiline_tooltip.py b/tests/examples_arguments_syntax/multiline_tooltip.py
similarity index 93%
rename from altair/examples/multiline_tooltip.py
rename to tests/examples_arguments_syntax/multiline_tooltip.py
index 84d06d8..7bdefd6 100644
--- a/altair/examples/multiline_tooltip.py
+++ b/tests/examples_arguments_syntax/multiline_tooltip.py
@@ -23,8 +23,8 @@ source = pd.DataFrame(np.cumsum(np.random.randn(100, 3), 0).round(2),
 source = source.reset_index().melt('x', var_name='category', value_name='y')
 
 # Create a selection that chooses the nearest point & selects based on x-value
-nearest = alt.selection(type='single', nearest=True, on='mouseover',
-                        fields=['x'], empty='none')
+nearest = alt.selection_point(nearest=True, on='mouseover',
+                        fields=['x'], empty=False)
 
 # The basic line
 line = alt.Chart(source).mark_line(interpolate='basis').encode(
@@ -38,7 +38,7 @@ line = alt.Chart(source).mark_line(interpolate='basis').encode(
 selectors = alt.Chart(source).mark_point().encode(
     x='x:Q',
     opacity=alt.value(0),
-).add_selection(
+).add_params(
     nearest
 )
 
diff --git a/altair/examples/multiple_interactions.py b/tests/examples_arguments_syntax/multiple_interactions.py
similarity index 60%
rename from altair/examples/multiple_interactions.py
rename to tests/examples_arguments_syntax/multiple_interactions.py
index 2588b7e..8fbc428 100644
--- a/altair/examples/multiple_interactions.py
+++ b/tests/examples_arguments_syntax/multiple_interactions.py
@@ -38,53 +38,55 @@ base = alt.Chart(movies, width=200, height=200).mark_point(filled=True).transfor
 )
 
 # A slider filter
-year_slider = alt.binding_range(min=1969, max=2018, step=1)
-slider_selection = alt.selection_single(bind=year_slider, fields=['Release_Year'], name="Release Year_")
+year_slider = alt.binding_range(min=1969, max=2018, step=1, name="Release Year")
+slider_selection = alt.selection_point(bind=year_slider, fields=['Release_Year'])
 
-
-filter_year = base.add_selection(
+filter_year = base.add_params(
     slider_selection
 ).transform_filter(
     slider_selection
 ).properties(title="Slider Filtering")
 
 # A dropdown filter
-genre_dropdown = alt.binding_select(options=genres)
-genre_select = alt.selection_single(fields=['Major_Genre'], bind=genre_dropdown, name="Genre")
+genre_dropdown = alt.binding_select(options=genres, name="Genre")
+genre_select = alt.selection_point(fields=['Major_Genre'], bind=genre_dropdown)
 
-filter_genres = base.add_selection(
+filter_genres = base.add_params(
     genre_select
 ).transform_filter(
     genre_select
 ).properties(title="Dropdown Filtering")
 
 #color changing marks
-rating_radio = alt.binding_radio(options=ratings)
+rating_radio = alt.binding_radio(options=ratings, name="Rating")
+rating_select = alt.selection_point(fields=['MPAA_Rating'], bind=rating_radio)
 
-rating_select = alt.selection_single(fields=['MPAA_Rating'], bind=rating_radio, name="Rating")
-rating_color_condition = alt.condition(rating_select,
-                      alt.Color('MPAA_Rating:N', legend=None),
-                      alt.value('lightgray'))
+rating_color_condition = alt.condition(
+    rating_select,
+    alt.Color('MPAA_Rating:N', legend=None),
+    alt.value('lightgray')
+)
 
-highlight_ratings = base.add_selection(
+highlight_ratings = base.add_params(
     rating_select
 ).encode(
     color=rating_color_condition
 ).properties(title="Radio Button Highlighting")
 
 # Boolean selection for format changes
-input_checkbox = alt.binding_checkbox()
-checkbox_selection = alt.selection_single(bind=input_checkbox, name="Big Budget Films")
+input_checkbox = alt.binding_checkbox(name="Big Budget Films ")
+checkbox_selection = alt.param(bind=input_checkbox)
 
-size_checkbox_condition = alt.condition(checkbox_selection,
-                                        alt.SizeValue(25),
-                                        alt.Size('Hundred_Million_Production:Q')
-                                       )
+size_checkbox_condition = alt.condition(
+    checkbox_selection,
+    alt.Size('Hundred_Million_Production:Q'),
+    alt.SizeValue(25)
+)
 
-budget_sizing = base.add_selection(
+budget_sizing = base.add_params(
     checkbox_selection
 ).encode(
     size=size_checkbox_condition
 ).properties(title="Checkbox Formatting")
 
-( filter_year | filter_genres) &  (highlight_ratings | budget_sizing  )
+(filter_year | filter_genres) & (highlight_ratings | budget_sizing)
diff --git a/tests/examples_arguments_syntax/natural_disasters.py b/tests/examples_arguments_syntax/natural_disasters.py
new file mode 100644
index 0000000..890580a
--- /dev/null
+++ b/tests/examples_arguments_syntax/natural_disasters.py
@@ -0,0 +1,52 @@
+"""
+Global Deaths from Natural Disasters
+------------------------------------
+This example shows a proportional symbols visualization of deaths from natural disasters by year and type.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.disasters.url
+
+alt.Chart(source).transform_filter(
+    alt.datum.Entity != 'All natural disasters'
+).mark_circle(
+    opacity=0.8,
+    stroke='black',
+    strokeWidth=1,
+    strokeOpacity=0.4
+).encode(
+    x=alt.X('Year:T', title=None, scale=alt.Scale(domain=['1899','2018'])),
+    y=alt.Y(
+        'Entity:N',
+        sort=alt.EncodingSortField(field="Deaths", op="sum", order='descending'),
+        title=None
+    ),
+    size=alt.Size('Deaths:Q',
+        scale=alt.Scale(range=[0, 2500]),
+        legend=alt.Legend(title='Deaths', clipHeight=30, format='s')
+    ),
+    color=alt.Color('Entity:N', legend=None),
+    tooltip=[
+        "Entity:N", 
+        alt.Tooltip("Year:T", format='%Y'), 
+        alt.Tooltip("Deaths:Q", format='~s')
+    ],
+).properties(
+    width=450,
+    height=320,
+    title=alt.Title(
+        text="Global Deaths from Natural Disasters (1900-2017)",
+        subtitle="The size of the bubble represents the total death count per year, by type of disaster",
+        anchor='start'
+    )
+).configure_axisY(
+    domain=False,
+    ticks=False,
+    offset=10
+).configure_axisX(
+    grid=False,
+).configure_view(
+    stroke=None
+)
diff --git a/altair/examples/normalized_stacked_area_chart.py b/tests/examples_arguments_syntax/normalized_stacked_area_chart.py
similarity index 100%
rename from altair/examples/normalized_stacked_area_chart.py
rename to tests/examples_arguments_syntax/normalized_stacked_area_chart.py
diff --git a/altair/examples/normalized_stacked_bar_chart.py b/tests/examples_arguments_syntax/normalized_stacked_bar_chart.py
similarity index 100%
rename from altair/examples/normalized_stacked_bar_chart.py
rename to tests/examples_arguments_syntax/normalized_stacked_bar_chart.py
diff --git a/altair/examples/normed_parallel_coordinates.py b/tests/examples_arguments_syntax/normed_parallel_coordinates.py
similarity index 91%
rename from altair/examples/normed_parallel_coordinates.py
rename to tests/examples_arguments_syntax/normed_parallel_coordinates.py
index 88cd45c..594aac7 100644
--- a/altair/examples/normed_parallel_coordinates.py
+++ b/tests/examples_arguments_syntax/normed_parallel_coordinates.py
@@ -1,6 +1,6 @@
 """
-Normalized Parallel Coordinates Example
----------------------------------------
+Normalized Parallel Coordinates
+-------------------------------
 A `Parallel Coordinates <https://en.wikipedia.org/wiki/Parallel_coordinates>`_
 chart is a chart that lets you visualize the individual data points by drawing
 a single line for each of them.
@@ -12,7 +12,7 @@ This example shows a modified parallel coordinates chart with the Iris dataset,
 where the y-axis shows the value after min-max rather than the raw value. It's a
 simplified Altair version of `the VegaLite version <https://vega.github.io/vega-lite/examples/parallel_coordinate.html>`_
 """
-# category: other charts
+# category: advanced calculations
 import altair as alt
 from vega_datasets import data
 from altair import datum
diff --git a/altair/examples/one_dot_per_zipcode.py b/tests/examples_arguments_syntax/one_dot_per_zipcode.py
similarity index 100%
rename from altair/examples/one_dot_per_zipcode.py
rename to tests/examples_arguments_syntax/one_dot_per_zipcode.py
diff --git a/altair/examples/pacman_chart.py b/tests/examples_arguments_syntax/pacman_chart.py
similarity index 100%
rename from altair/examples/pacman_chart.py
rename to tests/examples_arguments_syntax/pacman_chart.py
diff --git a/altair/examples/parallel_coordinates.py b/tests/examples_arguments_syntax/parallel_coordinates.py
similarity index 89%
rename from altair/examples/parallel_coordinates.py
rename to tests/examples_arguments_syntax/parallel_coordinates.py
index 2f977db..c46bc01 100644
--- a/altair/examples/parallel_coordinates.py
+++ b/tests/examples_arguments_syntax/parallel_coordinates.py
@@ -1,6 +1,6 @@
 """
-Parallel Coordinates Example
-----------------------------
+Parallel Coordinates
+--------------------
 A `Parallel Coordinates <https://en.wikipedia.org/wiki/Parallel_coordinates>`_
 chart is a chart that lets you visualize the individual data points by drawing
 a single line for each of them.
@@ -8,7 +8,7 @@ Such a chart can be created in Altair by first transforming the data into a
 suitable representation.
 This example shows a parallel coordinates chart with the Iris dataset.
 """
-# category: other charts
+# category: advanced calculations
 
 import altair as alt
 from vega_datasets import data
diff --git a/altair/examples/percentage_of_total.py b/tests/examples_arguments_syntax/percentage_of_total.py
similarity index 100%
rename from altair/examples/percentage_of_total.py
rename to tests/examples_arguments_syntax/percentage_of_total.py
diff --git a/altair/examples/pie_chart.py b/tests/examples_arguments_syntax/pie_chart.py
similarity index 100%
rename from altair/examples/pie_chart.py
rename to tests/examples_arguments_syntax/pie_chart.py
diff --git a/altair/examples/pie_chart_with_labels.py b/tests/examples_arguments_syntax/pie_chart_with_labels.py
similarity index 100%
rename from altair/examples/pie_chart_with_labels.py
rename to tests/examples_arguments_syntax/pie_chart_with_labels.py
diff --git a/altair/examples/airports.py b/tests/examples_arguments_syntax/point_map.py
similarity index 75%
rename from altair/examples/airports.py
rename to tests/examples_arguments_syntax/point_map.py
index 8efa498..d468cb4 100644
--- a/altair/examples/airports.py
+++ b/tests/examples_arguments_syntax/point_map.py
@@ -1,14 +1,16 @@
 """
-Locations of US Airports
-========================
-This is a layered geographic visualization that shows the positions of US
-airports on a background of US states.
+Point map
+=========
+This is a layered map that shows the positions of airports on a background of U.S. states.
 """
-# category: case studies
+# category: maps
 import altair as alt
 from vega_datasets import data
 
+# Read in points
 airports = data.airports()
+
+# Read in polygons from topojson
 states = alt.topo_feature(data.us_10m.url, feature='states')
 
 # US states background
diff --git a/altair/examples/poly_fit_regression.py b/tests/examples_arguments_syntax/poly_fit_regression.py
similarity index 95%
rename from altair/examples/poly_fit_regression.py
rename to tests/examples_arguments_syntax/poly_fit_regression.py
index 0e71053..77163c9 100644
--- a/altair/examples/poly_fit_regression.py
+++ b/tests/examples_arguments_syntax/poly_fit_regression.py
@@ -4,7 +4,7 @@ Polynomial Fit Plot with Regression Transform
 This example shows how to overlay data with multiple fitted polynomials using
 the regression transform.
 """
-# category: scatter plots
+# category: uncertainties and trends
 
 import numpy as np
 import pandas as pd
diff --git a/altair/examples/pyramid.py b/tests/examples_arguments_syntax/pyramid.py
similarity index 96%
rename from altair/examples/pyramid.py
rename to tests/examples_arguments_syntax/pyramid.py
index a53b90e..676d77e 100644
--- a/altair/examples/pyramid.py
+++ b/tests/examples_arguments_syntax/pyramid.py
@@ -3,6 +3,7 @@ Pyramid Pie Chart
 -----------------
 Altair reproduction of http://robslink.com/SAS/democd91/pyramid_pie.htm
 """
+# category: case studies
 import altair as alt
 import pandas as pd
 
@@ -16,4 +17,4 @@ alt.Chart(df).mark_arc(outerRadius=80).encode(
         scale=alt.Scale(domain=category, range=color),
         legend=alt.Legend(title=None, orient='none', legendX=160, legendY=50)),
     order='value:Q'
-).properties(width=150, height=150).configure_view(strokeOpacity=0)
\ No newline at end of file
+).properties(width=150, height=150).configure_view(strokeOpacity=0)
diff --git a/altair/examples/radial_chart.py b/tests/examples_arguments_syntax/radial_chart.py
similarity index 100%
rename from altair/examples/radial_chart.py
rename to tests/examples_arguments_syntax/radial_chart.py
diff --git a/altair/examples/ranged_dot_plot.py b/tests/examples_arguments_syntax/ranged_dot_plot.py
similarity index 66%
rename from altair/examples/ranged_dot_plot.py
rename to tests/examples_arguments_syntax/ranged_dot_plot.py
index 7696733..d7efcf7 100644
--- a/altair/examples/ranged_dot_plot.py
+++ b/tests/examples_arguments_syntax/ranged_dot_plot.py
@@ -1,15 +1,15 @@
 """
 Ranged Dot Plot
------------------
-This example shows a ranged dot plot that uses 'layer' to convey changing life expectancy for the five most populous countries (between 1955 and 2000).
+---------------
+This example shows a ranged dot plot to convey changing life expectancy for the five most populous countries (between 1955 and 2000).
 """
-# category: other charts
+# category: advanced calculations
 import altair as alt
 from vega_datasets import data
 
 source = data.countries.url
 
-chart = alt.layer(
+chart = alt.Chart(
     data=source
 ).transform_filter(
     filter={"field": 'country',
@@ -19,13 +19,13 @@ chart = alt.layer(
             "oneOf": [1955, 2000]}
 )
 
-chart += alt.Chart().mark_line(color='#db646f').encode(
+line = chart.mark_line(color='#db646f').encode(
     x='life_expect:Q',
     y='country:N',
     detail='country:N'
 )
 # Add points for life expectancy in 1955 & 2000
-chart += alt.Chart().mark_point(
+points = chart.mark_point(
     size=100,
     opacity=1,
     filled=True
@@ -34,10 +34,10 @@ chart += alt.Chart().mark_point(
     y='country:N',
     color=alt.Color('year:O',
         scale=alt.Scale(
-            domain=['1955', '2000'],
+            domain=[1955, 2000],
             range=['#e6959c', '#911a24']
         )
     )
 ).interactive()
 
-chart
+(line + points)
diff --git a/altair/examples/ridgeline_plot.py b/tests/examples_arguments_syntax/ridgeline_plot.py
similarity index 94%
rename from altair/examples/ridgeline_plot.py
rename to tests/examples_arguments_syntax/ridgeline_plot.py
index e6425b9..54c1d6f 100644
--- a/altair/examples/ridgeline_plot.py
+++ b/tests/examples_arguments_syntax/ridgeline_plot.py
@@ -1,15 +1,15 @@
 """
-Ridgeline plot Example
-----------------------
+Ridgeline plot
+--------------
 A `Ridgeline plot <https://serialmentor.com/blog/2017/9/15/goodbye-joyplots>`_
-chart is a chart that lets you visualize distribution of a numeric value for 
+chart is a chart that lets you visualize distribution of a numeric value for
 several groups.
 
 Such a chart can be created in Altair by first transforming the data into a
 suitable representation.
 
 """
-# category: other charts
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/scatter_href.py b/tests/examples_arguments_syntax/scatter_href.py
similarity index 100%
rename from altair/examples/scatter_href.py
rename to tests/examples_arguments_syntax/scatter_href.py
diff --git a/altair/examples/scatter_linked_brush.py b/tests/examples_arguments_syntax/scatter_linked_brush.py
similarity index 88%
rename from altair/examples/scatter_linked_brush.py
rename to tests/examples_arguments_syntax/scatter_linked_brush.py
index 47181a3..adf88d3 100644
--- a/altair/examples/scatter_linked_brush.py
+++ b/tests/examples_arguments_syntax/scatter_linked_brush.py
@@ -10,12 +10,12 @@ from vega_datasets import data
 
 source = data.cars()
 
-brush = alt.selection(type='interval', resolve='global')
+brush = alt.selection_interval(resolve='global')
 
 base = alt.Chart(source).mark_point().encode(
     y='Miles_per_Gallon',
     color=alt.condition(brush, 'Origin', alt.ColorValue('gray')),
-).add_selection(
+).add_params(
     brush
 ).properties(
     width=250,
diff --git a/altair/examples/scatter_linked_table.py b/tests/examples_arguments_syntax/scatter_linked_table.py
similarity index 55%
rename from altair/examples/scatter_linked_table.py
rename to tests/examples_arguments_syntax/scatter_linked_table.py
index 3073f33..93777b7 100644
--- a/altair/examples/scatter_linked_table.py
+++ b/tests/examples_arguments_syntax/scatter_linked_table.py
@@ -1,49 +1,55 @@
-"""
-Brushing Scatter Plot to show data on a table
----------------------------------------------
-A scatter plot of the cars dataset, with data tables for horsepower, MPG, and origin. 
-The tables update to reflect the selection on the scatter plot.
-"""
-# category: scatter plots
-
-import altair as alt
-from vega_datasets import data
-
-source = data.cars()
-
-# Brush for selection
-brush = alt.selection(type='interval')
-
-# Scatter Plot
-points = alt.Chart(source).mark_point().encode(
-    x='Horsepower:Q',
-    y='Miles_per_Gallon:Q',
-    color=alt.condition(brush, 'Cylinders:O', alt.value('grey'))
-).add_selection(brush)
-
-# Base chart for data tables
-ranked_text = alt.Chart(source).mark_text().encode(
-    y=alt.Y('row_number:O',axis=None)
-).transform_window(
-    row_number='row_number()'
-).transform_filter(
-    brush
-).transform_window(
-    rank='rank(row_number)'
-).transform_filter(
-    alt.datum.rank<20
-)
-
-# Data Tables
-horsepower = ranked_text.encode(text='Horsepower:N').properties(title='Horsepower')
-mpg = ranked_text.encode(text='Miles_per_Gallon:N').properties(title='MPG')
-origin = ranked_text.encode(text='Origin:N').properties(title='Origin')
-text = alt.hconcat(horsepower, mpg, origin) # Combine data tables
-
-# Build chart
-alt.hconcat(
-    points,
-    text
-).resolve_legend(
-    color="independent"
-)
+"""
+Brushing Scatter Plot to Show Data on a Table
+---------------------------------------------
+A scatter plot of the cars dataset, with data tables for horsepower, MPG, and origin.
+The tables update to reflect the selection on the scatter plot.
+"""
+# category: scatter plots
+
+import altair as alt
+from vega_datasets import data
+
+source = data.cars()
+
+# Brush for selection
+brush = alt.selection_interval()
+
+# Scatter Plot
+points = alt.Chart(source).mark_point().encode(
+    x='Horsepower:Q',
+    y='Miles_per_Gallon:Q',
+    color=alt.condition(brush, alt.value('steelblue'), alt.value('grey'))
+).add_params(brush)
+
+# Base chart for data tables
+ranked_text = alt.Chart(source).mark_text(align='right').encode(
+    y=alt.Y('row_number:O', axis=None)
+).transform_filter(
+    brush
+).transform_window(
+    row_number='row_number()'
+).transform_filter(
+    alt.datum.row_number < 15
+)
+
+# Data Tables
+horsepower = ranked_text.encode(text='Horsepower:N').properties(
+    title=alt.Title(text='Horsepower', align='right')
+)
+mpg = ranked_text.encode(text='Miles_per_Gallon:N').properties(
+    title=alt.Title(text='MPG', align='right')
+)
+origin = ranked_text.encode(text='Origin:N').properties(
+    title=alt.Title(text='Origin', align='right')
+)
+text = alt.hconcat(horsepower, mpg, origin) # Combine data tables
+
+# Build chart
+alt.hconcat(
+    points,
+    text
+).resolve_legend(
+    color="independent"
+).configure_view(
+    stroke=None
+)
diff --git a/altair/examples/scatter_marginal_hist.py b/tests/examples_arguments_syntax/scatter_marginal_hist.py
similarity index 86%
rename from altair/examples/scatter_marginal_hist.py
rename to tests/examples_arguments_syntax/scatter_marginal_hist.py
index ef42e15..52455dc 100644
--- a/altair/examples/scatter_marginal_hist.py
+++ b/tests/examples_arguments_syntax/scatter_marginal_hist.py
@@ -1,11 +1,11 @@
 """
-Facetted Scatterplot with marginal histograms
----------------------------------------------
-This example demonstrates how to generate a facetted scatterplot,
+Facetted Scatter Plot with Marginal Histograms
+----------------------------------------------
+This example demonstrates how to generate a facetted scatter plot,
 with marginal facetted histograms, and how to share their respective
 - x,some y-limits.
 """
-# category: other charts
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/scatter_matrix.py b/tests/examples_arguments_syntax/scatter_matrix.py
similarity index 100%
rename from altair/examples/scatter_matrix.py
rename to tests/examples_arguments_syntax/scatter_matrix.py
diff --git a/altair/examples/scatter_qq.py b/tests/examples_arguments_syntax/scatter_qq.py
similarity index 95%
rename from altair/examples/scatter_qq.py
rename to tests/examples_arguments_syntax/scatter_qq.py
index b8abfe7..09f25ac 100644
--- a/altair/examples/scatter_qq.py
+++ b/tests/examples_arguments_syntax/scatter_qq.py
@@ -3,7 +3,7 @@ Quantile-Quantile Plot
 ----------------------
 A quantile-quantile plot comparing input data to theoretical distributions.
 """
-# category: scatter plots
+# category: distributions
 
 import altair as alt
 from vega_datasets import data
diff --git a/altair/examples/scatter_tooltips.py b/tests/examples_arguments_syntax/scatter_tooltips.py
similarity index 100%
rename from altair/examples/scatter_tooltips.py
rename to tests/examples_arguments_syntax/scatter_tooltips.py
diff --git a/altair/examples/scatter_with_histogram.py b/tests/examples_arguments_syntax/scatter_with_histogram.py
similarity index 94%
rename from altair/examples/scatter_with_histogram.py
rename to tests/examples_arguments_syntax/scatter_with_histogram.py
index 163ede8..dda40de 100644
--- a/altair/examples/scatter_with_histogram.py
+++ b/tests/examples_arguments_syntax/scatter_with_histogram.py
@@ -25,7 +25,7 @@ m = np.random.normal(15, 1, size=100)
 source = pd.DataFrame({"x": x, "y":y, "m":m})
 
 # interval selection in the scatter plot
-pts = alt.selection(type="interval", encodings=["x"])
+pts = alt.selection_interval(encodings=["x"])
 
 # left panel: scatter plot
 points = alt.Chart().mark_point(filled=True, color="black").encode(
@@ -46,7 +46,7 @@ mag = alt.Chart().mark_bar().encode(
 ).properties(
     width=300,
     height=300
-).add_selection(pts)
+).add_params(pts)
 
 # build the chart:
 alt.hconcat(
diff --git a/altair/examples/scatter_with_labels.py b/tests/examples_arguments_syntax/scatter_with_labels.py
similarity index 100%
rename from altair/examples/scatter_with_labels.py
rename to tests/examples_arguments_syntax/scatter_with_labels.py
diff --git a/altair/examples/scatter_with_layered_histogram.py b/tests/examples_arguments_syntax/scatter_with_layered_histogram.py
similarity index 53%
rename from altair/examples/scatter_with_layered_histogram.py
rename to tests/examples_arguments_syntax/scatter_with_layered_histogram.py
index 669d9c9..2268b05 100644
--- a/altair/examples/scatter_with_layered_histogram.py
+++ b/tests/examples_arguments_syntax/scatter_with_layered_histogram.py
@@ -13,16 +13,20 @@ import pandas as pd
 import numpy as np
 
 # generate fake data
-source = pd.DataFrame({'gender': ['M']*1000 + ['F']*1000,
-               'height':np.concatenate((np.random.normal(69, 7, 1000),
-                                       np.random.normal(64, 6, 1000))),
-               'weight': np.concatenate((np.random.normal(195.8, 144, 1000),
-                                        np.random.normal(167, 100, 1000))),
-               'age': np.concatenate((np.random.normal(45, 8, 1000),
-                                        np.random.normal(51, 6, 1000)))
-        })
-
-selector = alt.selection_single(empty='all', fields=['gender'])
+source = pd.DataFrame({
+    'gender': ['M']*1000 + ['F']*1000,
+    'height':np.concatenate((
+        np.random.normal(69, 7, 1000), np.random.normal(64, 6, 1000)
+    )),
+    'weight': np.concatenate((
+        np.random.normal(195.8, 144, 1000), np.random.normal(167, 100, 1000)
+    )),
+    'age': np.concatenate((
+        np.random.normal(45, 8, 1000), np.random.normal(51, 6, 1000)
+        ))
+    })
+
+selector = alt.selection_point(fields=['gender'])
 
 color_scale = alt.Scale(domain=['M', 'F'],
                         range=['#1FC3AA', '#8624F5'])
@@ -30,17 +34,16 @@ color_scale = alt.Scale(domain=['M', 'F'],
 base = alt.Chart(source).properties(
     width=250,
     height=250
-).add_selection(selector)
+).add_params(selector)
 
 points = base.mark_point(filled=True, size=200).encode(
-    x=alt.X('mean(height):Q',
-            scale=alt.Scale(domain=[0,84])),
-    y=alt.Y('mean(weight):Q',
-            scale=alt.Scale(domain=[0,250])),
-    color=alt.condition(selector,
-                        'gender:N',
-                        alt.value('lightgray'),
-                        scale=color_scale),
+    x=alt.X('mean(height):Q', scale=alt.Scale(domain=[0,84])),
+    y=alt.Y('mean(weight):Q', scale=alt.Scale(domain=[0,250])),
+    color=alt.condition(
+        selector,
+        'gender:N',
+        alt.value('lightgray'),
+        scale=color_scale),
 )
 
 hists = base.mark_bar(opacity=0.5, thickness=100).encode(
diff --git a/altair/examples/scatter_with_loess.py b/tests/examples_arguments_syntax/scatter_with_loess.py
similarity index 86%
rename from altair/examples/scatter_with_loess.py
rename to tests/examples_arguments_syntax/scatter_with_loess.py
index 5e76fda..d8bcaf5 100644
--- a/altair/examples/scatter_with_loess.py
+++ b/tests/examples_arguments_syntax/scatter_with_loess.py
@@ -2,9 +2,9 @@
 Scatter Plot with LOESS Lines
 -----------------------------
 This example shows how to add a trend line to a scatter plot using 
-the LOESS transform (LOcally Estimated Scatterplot Smoothing).
+the LOESS transform (LOcally Estimated Scatter Plot Smoothing).
 """
-# category: scatter plots
+# category: uncertainties and trends
 
 import altair as alt
 import pandas as pd
diff --git a/altair/examples/scatter_with_minimap.py b/tests/examples_arguments_syntax/scatter_with_minimap.py
similarity index 83%
rename from altair/examples/scatter_with_minimap.py
rename to tests/examples_arguments_syntax/scatter_with_minimap.py
index 7de894c..a18a599 100644
--- a/altair/examples/scatter_with_minimap.py
+++ b/tests/examples_arguments_syntax/scatter_with_minimap.py
@@ -17,7 +17,7 @@ zoom = alt.selection_interval(encodings=["x", "y"])
 minimap = (
     alt.Chart(source)
     .mark_point()
-    .add_selection(zoom)
+    .add_params(zoom)
     .encode(
         x="date:T",
         y="temp_max:Q",
@@ -35,11 +35,11 @@ detail = (
     .mark_point()
     .encode(
         x=alt.X(
-            "date:T", scale=alt.Scale(domain={"selection": zoom.name, "encoding": "x"})
+            "date:T", scale=alt.Scale(domain={"param": zoom.name, "encoding": "x"})
         ),
         y=alt.Y(
             "temp_max:Q",
-            scale=alt.Scale(domain={"selection": zoom.name, "encoding": "y"}),
+            scale=alt.Scale(domain={"param": zoom.name, "encoding": "y"}),
         ),
         color="weather",
     )
diff --git a/altair/examples/scatter_with_rolling_mean.py b/tests/examples_arguments_syntax/scatter_with_rolling_mean.py
similarity index 100%
rename from altair/examples/scatter_with_rolling_mean.py
rename to tests/examples_arguments_syntax/scatter_with_rolling_mean.py
diff --git a/altair/examples/seattle_weather_interactive.py b/tests/examples_arguments_syntax/seattle_weather_interactive.py
similarity index 95%
rename from altair/examples/seattle_weather_interactive.py
rename to tests/examples_arguments_syntax/seattle_weather_interactive.py
index cf65fbf..798cc47 100644
--- a/altair/examples/seattle_weather_interactive.py
+++ b/tests/examples_arguments_syntax/seattle_weather_interactive.py
@@ -19,7 +19,7 @@ color = alt.Color('weather:N', scale=scale)
 # - a brush that is active on the top panel
 # - a multi-click that is active on the bottom panel
 brush = alt.selection_interval(encodings=['x'])
-click = alt.selection_multi(encodings=['color'])
+click = alt.selection_point(encodings=['color'])
 
 # Top panel is scatter plot of temperature vs time
 points = alt.Chart().mark_point().encode(
@@ -33,7 +33,7 @@ points = alt.Chart().mark_point().encode(
 ).properties(
     width=550,
     height=300
-).add_selection(
+).add_params(
     brush
 ).transform_filter(
     click
@@ -48,7 +48,7 @@ bars = alt.Chart().mark_bar().encode(
     brush
 ).properties(
     width=550,
-).add_selection(
+).add_params(
     click
 )
 
diff --git a/altair/examples/select_detail.py b/tests/examples_arguments_syntax/select_detail.py
similarity index 93%
rename from altair/examples/select_detail.py
rename to tests/examples_arguments_syntax/select_detail.py
index f5230c8..a6b558d 100644
--- a/altair/examples/select_detail.py
+++ b/tests/examples_arguments_syntax/select_detail.py
@@ -1,6 +1,6 @@
 """
-Selection Detail Example
-========================
+Selection Detail
+================
 This example shows a selection that links two views of data: the left panel
 contains one point per object, and the right panel contains one line per
 object. Clicking on either the points or lines will select the corresponding
@@ -41,12 +41,12 @@ data = pd.merge(timeseries, locations, on='id')
 
 # Data is prepared, now make a chart
 
-selector = alt.selection_single(empty='all', fields=['id'])
+selector = alt.selection_point(fields=['id'])
 
 base = alt.Chart(data).properties(
     width=250,
     height=250
-).add_selection(selector)
+).add_params(selector)
 
 points = base.mark_point(filled=True, size=200).encode(
     x='mean(x)',
diff --git a/altair/examples/select_mark_area.py b/tests/examples_arguments_syntax/select_mark_area.py
similarity index 84%
rename from altair/examples/select_mark_area.py
rename to tests/examples_arguments_syntax/select_mark_area.py
index 2e09759..4cd8839 100644
--- a/altair/examples/select_mark_area.py
+++ b/tests/examples_arguments_syntax/select_mark_area.py
@@ -1,30 +1,30 @@
-"""
-Using Selection Interval with mark_area
-=========================================
-
-Because area is considered one object, just using the plain 
-selector will select the entire area instead of just one part of it.
-
-This example shows how to use two areas, one on top of the other, and a
-`transform_filter` to fake out this effect.
-
-"""
-# category: interactive charts
-import altair as alt
-from vega_datasets import data
-
-source = data.unemployment_across_industries.url
-
-base = alt.Chart(source).mark_area(
-    color='goldenrod',
-    opacity=0.3
-).encode(
-    x='yearmonth(date):T',
-    y='sum(count):Q',
-)
-
-brush = alt.selection_interval(encodings=['x'],empty='all')
-background = base.add_selection(brush)
-selected = base.transform_filter(brush).mark_area(color='goldenrod')
-
-background + selected
+"""
+Using Selection Interval with mark_area
+=========================================
+
+Because area is considered one object, just using the plain 
+selector will select the entire area instead of just one part of it.
+
+This example shows how to use two areas, one on top of the other, and a
+`transform_filter` to fake out this effect.
+
+"""
+# category: interactive charts
+import altair as alt
+from vega_datasets import data
+
+source = data.unemployment_across_industries.url
+
+base = alt.Chart(source).mark_area(
+    color='goldenrod',
+    opacity=0.3
+).encode(
+    x='yearmonth(date):T',
+    y='sum(count):Q',
+)
+
+brush = alt.selection_interval(encodings=['x'])
+background = base.add_params(brush)
+selected = base.transform_filter(brush).mark_area(color='goldenrod')
+
+background + selected
diff --git a/altair/examples/selection_histogram.py b/tests/examples_arguments_syntax/selection_histogram.py
similarity index 92%
rename from altair/examples/selection_histogram.py
rename to tests/examples_arguments_syntax/selection_histogram.py
index 9362178..dc0ccab 100644
--- a/altair/examples/selection_histogram.py
+++ b/tests/examples_arguments_syntax/selection_histogram.py
@@ -11,13 +11,13 @@ from vega_datasets import data
 
 source = data.cars()
 
-brush = alt.selection(type='interval')
+brush = alt.selection_interval()
 
 points = alt.Chart(source).mark_point().encode(
     x='Horsepower:Q',
     y='Miles_per_Gallon:Q',
     color=alt.condition(brush, 'Origin:N', alt.value('lightgray'))
-).add_selection(
+).add_params(
     brush
 )
 
diff --git a/altair/examples/selection_layer_bar_month.py b/tests/examples_arguments_syntax/selection_layer_bar_month.py
similarity index 91%
rename from altair/examples/selection_layer_bar_month.py
rename to tests/examples_arguments_syntax/selection_layer_bar_month.py
index 96dbe82..43f4e97 100644
--- a/altair/examples/selection_layer_bar_month.py
+++ b/tests/examples_arguments_syntax/selection_layer_bar_month.py
@@ -10,13 +10,13 @@ import altair as alt
 from vega_datasets import data
 
 source = data.seattle_weather()
-brush = alt.selection(type='interval', encodings=['x'])
+brush = alt.selection_interval(encodings=['x'])
 
 bars = alt.Chart().mark_bar().encode(
     x='month(date):O',
     y='mean(precipitation):Q',
     opacity=alt.condition(brush, alt.OpacityValue(1), alt.OpacityValue(0.7)),
-).add_selection(
+).add_params(
     brush
 )
 
diff --git a/altair/examples/simple_bar_chart.py b/tests/examples_arguments_syntax/simple_bar_chart.py
similarity index 100%
rename from altair/examples/simple_bar_chart.py
rename to tests/examples_arguments_syntax/simple_bar_chart.py
diff --git a/altair/examples/simple_heatmap.py b/tests/examples_arguments_syntax/simple_heatmap.py
similarity index 100%
rename from altair/examples/simple_heatmap.py
rename to tests/examples_arguments_syntax/simple_heatmap.py
diff --git a/altair/examples/simple_histogram.py b/tests/examples_arguments_syntax/simple_histogram.py
similarity index 100%
rename from altair/examples/simple_histogram.py
rename to tests/examples_arguments_syntax/simple_histogram.py
diff --git a/altair/examples/simple_line_chart.py b/tests/examples_arguments_syntax/simple_line_chart.py
similarity index 100%
rename from altair/examples/simple_line_chart.py
rename to tests/examples_arguments_syntax/simple_line_chart.py
diff --git a/altair/examples/simple_scatter_with_errorbars.py b/tests/examples_arguments_syntax/simple_scatter_with_errorbars.py
similarity index 95%
rename from altair/examples/simple_scatter_with_errorbars.py
rename to tests/examples_arguments_syntax/simple_scatter_with_errorbars.py
index 4a23228..691f3d8 100644
--- a/altair/examples/simple_scatter_with_errorbars.py
+++ b/tests/examples_arguments_syntax/simple_scatter_with_errorbars.py
@@ -3,7 +3,7 @@ Simple Scatter Plot with Errorbars
 ----------------------------------
 A simple scatter plot of a data set with errorbars.
 """
-# category: scatter plots
+# category: uncertainties and trends
 import altair as alt
 import pandas as pd
 import numpy as np
diff --git a/altair/examples/simple_stacked_area_chart.py b/tests/examples_arguments_syntax/simple_stacked_area_chart.py
similarity index 100%
rename from altair/examples/simple_stacked_area_chart.py
rename to tests/examples_arguments_syntax/simple_stacked_area_chart.py
diff --git a/tests/examples_arguments_syntax/slider_cutoff.py b/tests/examples_arguments_syntax/slider_cutoff.py
new file mode 100644
index 0000000..19db774
--- /dev/null
+++ b/tests/examples_arguments_syntax/slider_cutoff.py
@@ -0,0 +1,30 @@
+"""
+Slider Cutoff
+=============
+This example shows how to bind a variable parameter to a slider, and how to use the corresponding bound value to color data points.  This example is based on an example from the Altair 4 documentation for Interactions, in which the  interactivity was accomplished using a selection.  The version below has been simplified significantly through the use of a variable parameter.  Variable parameters were added in Altair 5.
+"""
+# category: interactive charts
+import altair as alt
+import pandas as pd
+import numpy as np
+
+rand = np.random.RandomState(42)
+
+df = pd.DataFrame({
+    'xval': range(100),
+    'yval': rand.randn(100).cumsum()
+})
+
+slider = alt.binding_range(min=0, max=100, step=1)
+cutoff = alt.param(bind=slider, value=50)
+
+alt.Chart(df).mark_point().encode(
+    x='xval',
+    y='yval',
+    color=alt.condition(
+        alt.datum.xval < cutoff,
+        alt.value('red'), alt.value('blue')
+    )
+).add_params(
+    cutoff
+)
\ No newline at end of file
diff --git a/altair/examples/slope_graph.py b/tests/examples_arguments_syntax/slope_graph.py
similarity index 100%
rename from altair/examples/slope_graph.py
rename to tests/examples_arguments_syntax/slope_graph.py
diff --git a/altair/examples/sorted_error_bars_with_ci.py b/tests/examples_arguments_syntax/sorted_error_bars_with_ci.py
similarity index 95%
rename from altair/examples/sorted_error_bars_with_ci.py
rename to tests/examples_arguments_syntax/sorted_error_bars_with_ci.py
index 8dd5821..2baac1e 100644
--- a/altair/examples/sorted_error_bars_with_ci.py
+++ b/tests/examples_arguments_syntax/sorted_error_bars_with_ci.py
@@ -3,7 +3,7 @@ Sorted Error Bars showing Confidence Interval
 =============================================
 This example shows how to show error bars using confidence intervals, while also sorting the y-axis based on x-axis values. 
 """
-# category: other charts
+# category: advanced calculations
 
 import altair as alt
 from vega_datasets import data
diff --git a/altair/examples/stacked_bar_chart.py b/tests/examples_arguments_syntax/stacked_bar_chart.py
similarity index 100%
rename from altair/examples/stacked_bar_chart.py
rename to tests/examples_arguments_syntax/stacked_bar_chart.py
diff --git a/altair/examples/stacked_bar_chart_sorted_segments.py b/tests/examples_arguments_syntax/stacked_bar_chart_sorted_segments.py
similarity index 100%
rename from altair/examples/stacked_bar_chart_sorted_segments.py
rename to tests/examples_arguments_syntax/stacked_bar_chart_sorted_segments.py
diff --git a/altair/examples/stacked_bar_chart_with_text.py b/tests/examples_arguments_syntax/stacked_bar_chart_with_text.py
similarity index 100%
rename from altair/examples/stacked_bar_chart_with_text.py
rename to tests/examples_arguments_syntax/stacked_bar_chart_with_text.py
diff --git a/altair/examples/stem_and_leaf.py b/tests/examples_arguments_syntax/stem_and_leaf.py
similarity index 96%
rename from altair/examples/stem_and_leaf.py
rename to tests/examples_arguments_syntax/stem_and_leaf.py
index ad24eda..cd8f717 100644
--- a/altair/examples/stem_and_leaf.py
+++ b/tests/examples_arguments_syntax/stem_and_leaf.py
@@ -3,7 +3,7 @@ Stem and Leaf Plot
 ------------------
 This example shows how to make a stem and leaf plot.
 """
-# category: other charts
+# category: advanced calculations
 import altair as alt
 import pandas as pd
 import numpy as np
diff --git a/altair/examples/step_chart.py b/tests/examples_arguments_syntax/step_chart.py
similarity index 100%
rename from altair/examples/step_chart.py
rename to tests/examples_arguments_syntax/step_chart.py
diff --git a/altair/examples/streamgraph.py b/tests/examples_arguments_syntax/streamgraph.py
similarity index 100%
rename from altair/examples/streamgraph.py
rename to tests/examples_arguments_syntax/streamgraph.py
diff --git a/altair/examples/strip_plot.py b/tests/examples_arguments_syntax/strip_plot.py
similarity index 100%
rename from altair/examples/strip_plot.py
rename to tests/examples_arguments_syntax/strip_plot.py
diff --git a/tests/examples_arguments_syntax/strip_plot_jitter.py b/tests/examples_arguments_syntax/strip_plot_jitter.py
new file mode 100644
index 0000000..e0b7d16
--- /dev/null
+++ b/tests/examples_arguments_syntax/strip_plot_jitter.py
@@ -0,0 +1,37 @@
+"""
+Strip Plot with Jitter
+----------------------
+In this chart, we encode the ``Major_Genre`` column from the ``movies`` dataset
+in the ``y``-channel. In the default presentation of this data, it would be
+difficult to gauge the relative frequencies with which different values occur
+because there would be so much overlap. To address this, we use the ``yOffset``
+channel to incorporate a random offset (jittering). The example is shown twice,
+on the left side using normally distributed and on the right side using
+uniformally distributed jitter.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+gaussian_jitter = alt.Chart(source, title='Normally distributed jitter').mark_circle(size=8).encode(
+    y="Major_Genre:N",
+    x="IMDB_Rating:Q",
+    yOffset="jitter:Q",
+    color=alt.Color('Major_Genre:N', legend=None)
+).transform_calculate(
+    # Generate Gaussian jitter with a Box-Muller transform
+    jitter="sqrt(-2*log(random()))*cos(2*PI*random())"
+)
+
+uniform_jitter = gaussian_jitter.transform_calculate(
+    # Generate uniform jitter
+    jitter='random()'
+).encode(
+    y=alt.Y('Major_Genre:N', axis=None)
+).properties(
+    title='Uniformly distributed jitter'
+)
+
+(gaussian_jitter | uniform_jitter).resolve_scale(yOffset='independent')
diff --git a/altair/examples/table_bubble_plot_github.py b/tests/examples_arguments_syntax/table_bubble_plot_github.py
similarity index 93%
rename from altair/examples/table_bubble_plot_github.py
rename to tests/examples_arguments_syntax/table_bubble_plot_github.py
index 80683cc..2720596 100644
--- a/altair/examples/table_bubble_plot_github.py
+++ b/tests/examples_arguments_syntax/table_bubble_plot_github.py
@@ -3,7 +3,7 @@ Table Bubble Plot (Github Punch Card)
 -------------------------------------
 This example shows github contributions by the day of week and hour of the day.
 """
-# category: scatter plots
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/top_k_items.py b/tests/examples_arguments_syntax/top_k_items.py
similarity index 94%
rename from altair/examples/top_k_items.py
rename to tests/examples_arguments_syntax/top_k_items.py
index c0cf1e7..0c8ade3 100644
--- a/altair/examples/top_k_items.py
+++ b/tests/examples_arguments_syntax/top_k_items.py
@@ -5,7 +5,7 @@ This example shows how to use the window and transformation filter to display
 the Top items of a long list of items in decreasing order.
 Here we sort the top 10 highest ranking movies of IMDB.
 """
-# category: case studies
+# category: advanced calculations
 import altair as alt
 from vega_datasets import data
 
@@ -24,4 +24,4 @@ alt.Chart(
     sort=[alt.SortField('IMDB_Rating', order='descending')]
 ).transform_filter(
     (alt.datum.rank < 10)
-)
\ No newline at end of file
+)
diff --git a/altair/examples/top_k_letters.py b/tests/examples_arguments_syntax/top_k_letters.py
similarity index 97%
rename from altair/examples/top_k_letters.py
rename to tests/examples_arguments_syntax/top_k_letters.py
index acab708..b08fcc3 100644
--- a/altair/examples/top_k_letters.py
+++ b/tests/examples_arguments_syntax/top_k_letters.py
@@ -5,7 +5,7 @@ This example shows how to use a window transform in order to display only the
 top K categories by number of entries. In this case, we rank the characters in
 the first paragraph of Dickens' *A Tale of Two Cities* by number of occurances.
 """
-# category: case studies
+# category: advanced calculations
 import altair as alt
 import pandas as pd
 import numpy as np
diff --git a/altair/examples/top_k_with_others.py b/tests/examples_arguments_syntax/top_k_with_others.py
similarity index 94%
rename from altair/examples/top_k_with_others.py
rename to tests/examples_arguments_syntax/top_k_with_others.py
index aebec02..28cda24 100644
--- a/altair/examples/top_k_with_others.py
+++ b/tests/examples_arguments_syntax/top_k_with_others.py
@@ -1,11 +1,11 @@
 """
-Top-K plot with Others
+Top-K Plot with Others
 ----------------------
 This example shows how to use aggregate, window, and calculate transfromations
 to display the top-k directors by average worldwide gross while grouping the 
 remaining directors as 'All Others'.
 """
-# category: case studies
+# category: advanced calculations
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/trail_marker.py b/tests/examples_arguments_syntax/trail_marker.py
similarity index 100%
rename from altair/examples/trail_marker.py
rename to tests/examples_arguments_syntax/trail_marker.py
diff --git a/altair/examples/trellis_area.py b/tests/examples_arguments_syntax/trellis_area.py
similarity index 100%
rename from altair/examples/trellis_area.py
rename to tests/examples_arguments_syntax/trellis_area.py
diff --git a/altair/examples/trellis_area_sort_array.py b/tests/examples_arguments_syntax/trellis_area_sort_array.py
similarity index 100%
rename from altair/examples/trellis_area_sort_array.py
rename to tests/examples_arguments_syntax/trellis_area_sort_array.py
diff --git a/altair/examples/trellis_histogram.py b/tests/examples_arguments_syntax/trellis_histogram.py
similarity index 93%
rename from altair/examples/trellis_histogram.py
rename to tests/examples_arguments_syntax/trellis_histogram.py
index cba1c69..c124f2c 100644
--- a/altair/examples/trellis_histogram.py
+++ b/tests/examples_arguments_syntax/trellis_histogram.py
@@ -4,7 +4,7 @@ Trellis Histogram
 This example shows how to make a basic trellis histogram.
 https://vega.github.io/vega-lite/examples/trellis_bar_histogram.html
 """
-# category: histograms
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/altair/examples/trellis_scatter_plot.py b/tests/examples_arguments_syntax/trellis_scatter_plot.py
similarity index 100%
rename from altair/examples/trellis_scatter_plot.py
rename to tests/examples_arguments_syntax/trellis_scatter_plot.py
diff --git a/altair/examples/trellis_stacked_bar_chart.py b/tests/examples_arguments_syntax/trellis_stacked_bar_chart.py
similarity index 95%
rename from altair/examples/trellis_stacked_bar_chart.py
rename to tests/examples_arguments_syntax/trellis_stacked_bar_chart.py
index f7d65a7..7fa5d8c 100644
--- a/altair/examples/trellis_stacked_bar_chart.py
+++ b/tests/examples_arguments_syntax/trellis_stacked_bar_chart.py
@@ -10,7 +10,7 @@ from vega_datasets import data
 source = data.barley()
 
 alt.Chart(source).mark_bar().encode(
-    column='year',
+    column='year:O',
     x='yield',
     y='variety',
     color='site'
diff --git a/altair/examples/us_employment.py b/tests/examples_arguments_syntax/us_employment.py
similarity index 95%
rename from altair/examples/us_employment.py
rename to tests/examples_arguments_syntax/us_employment.py
index 719eecf..51f5699 100644
--- a/altair/examples/us_employment.py
+++ b/tests/examples_arguments_syntax/us_employment.py
@@ -1,5 +1,5 @@
 """
-The U.S. employment crash during the Great Recession
+The U.S. Employment Crash During the Great Recession
 ----------------------------------------------------
 This example is a fully developed bar chart with negative values using the sample dataset of U.S. employment changes during the Great Recession.
 """
@@ -50,7 +50,6 @@ text = alt.Chart(presidents).mark_text(
     size=11
 ).encode(
     x='start:T',
-    x2='end:T',
     text='president',
     color=alt.value('#000000')
 )
diff --git a/altair/examples/us_incomebrackets_by_state_facet.py b/tests/examples_arguments_syntax/us_incomebrackets_by_state_facet.py
similarity index 100%
rename from altair/examples/us_incomebrackets_by_state_facet.py
rename to tests/examples_arguments_syntax/us_incomebrackets_by_state_facet.py
diff --git a/tests/examples_arguments_syntax/us_population_over_time.py b/tests/examples_arguments_syntax/us_population_over_time.py
new file mode 100644
index 0000000..db74036
--- /dev/null
+++ b/tests/examples_arguments_syntax/us_population_over_time.py
@@ -0,0 +1,41 @@
+"""
+US Population by Age and Sex
+============================
+This chart visualizes the age distribution of the US population over time.
+It uses a slider widget that is bound to the year to visualize the age
+distribution over time.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.population.url
+
+select_year = alt.selection_point(
+    name="Year",
+    fields=["year"],
+    bind=alt.binding_range(min=1900, max=2000, step=10, name="Year"),
+    value={"year": 2000},
+)
+
+alt.Chart(source).mark_bar().encode(
+    x=alt.X("sex:N", axis=alt.Axis(labels=False, title=None, ticks=False)),
+    y=alt.Y("people:Q", scale=alt.Scale(domain=(0, 12000000)), title="Population"),
+    color=alt.Color(
+        "sex:N",
+        scale=alt.Scale(domain=("Male", "Female"), range=["steelblue", "salmon"]),
+        title="Sex",
+    ),
+    column=alt.Column("age:O", title="Age"),
+).properties(
+    width=20,
+    title="U.S. Population by Age and Sex"
+).add_params(
+    select_year
+).transform_calculate(
+    "sex", alt.expr.if_(alt.datum.sex == 1, "Male", "Female")
+).transform_filter(
+    select_year
+).configure_facet(
+    spacing=8
+)
diff --git a/altair/examples/us_population_over_time_facet.py b/tests/examples_arguments_syntax/us_population_over_time_facet.py
similarity index 100%
rename from altair/examples/us_population_over_time_facet.py
rename to tests/examples_arguments_syntax/us_population_over_time_facet.py
diff --git a/altair/examples/us_population_pyramid_over_time.py b/tests/examples_arguments_syntax/us_population_pyramid_over_time.py
similarity index 86%
rename from altair/examples/us_population_pyramid_over_time.py
rename to tests/examples_arguments_syntax/us_population_pyramid_over_time.py
index 624db71..4857adf 100644
--- a/altair/examples/us_population_pyramid_over_time.py
+++ b/tests/examples_arguments_syntax/us_population_pyramid_over_time.py
@@ -12,10 +12,10 @@ from vega_datasets import data
 source = data.population.url
 
 slider = alt.binding_range(min=1850, max=2000, step=10)
-select_year = alt.selection_single(name='year', fields=['year'],
-                                   bind=slider, init={'year': 2000})
+select_year = alt.selection_point(name='year', fields=['year'],
+                                   bind=slider, value={'year': 2000})
 
-base = alt.Chart(source).add_selection(
+base = alt.Chart(source).add_params(
     select_year
 ).transform_filter(
     select_year
@@ -52,4 +52,4 @@ right = base.transform_filter(
     color=alt.Color('gender:N', scale=color_scale, legend=None)
 ).mark_bar().properties(title='Male')
 
-alt.concat(left, middle, right, spacing=5)
\ No newline at end of file
+alt.concat(left, middle, right, spacing=5)
diff --git a/altair/examples/us_state_capitals.py b/tests/examples_arguments_syntax/us_state_capitals.py
similarity index 87%
rename from altair/examples/us_state_capitals.py
rename to tests/examples_arguments_syntax/us_state_capitals.py
index ff528a7..66ffffc 100644
--- a/altair/examples/us_state_capitals.py
+++ b/tests/examples_arguments_syntax/us_state_capitals.py
@@ -1,5 +1,5 @@
 """
-U.S. state capitals overlayed on a map of the U.S
+U.S. State Capitals Overlayed on a Map of the U.S
 -------------------------------------------------
 This is a layered geographic visualization that shows US capitals
 overlayed on a map.
@@ -22,7 +22,7 @@ background = alt.Chart(states).mark_geoshape(
 ).project('albersUsa')
 
 # Points and text
-hover = alt.selection(type='single', on='mouseover', nearest=True,
+hover = alt.selection_point(on='mouseover', nearest=True,
                       fields=['lat', 'lon'])
 
 base = alt.Chart(capitals).encode(
@@ -38,6 +38,6 @@ text = base.mark_text(dy=-5, align='right').encode(
 points = base.mark_point().encode(
     color=alt.value('black'),
     size=alt.condition(~hover, alt.value(30), alt.value(100))
-).add_selection(hover)
+).add_params(hover)
 
 background + points + text
diff --git a/altair/examples/violin_plot.py b/tests/examples_arguments_syntax/violin_plot.py
similarity index 97%
rename from altair/examples/violin_plot.py
rename to tests/examples_arguments_syntax/violin_plot.py
index 66cab47..09977b8 100644
--- a/altair/examples/violin_plot.py
+++ b/tests/examples_arguments_syntax/violin_plot.py
@@ -3,7 +3,7 @@ Violin Plot
 -----------
 This example shows how to make a Violin Plot using Altair's density transform.
 """
-# category: other charts
+# category: distributions
 import altair as alt
 from vega_datasets import data
 
diff --git a/tests/examples_arguments_syntax/waterfall_chart.py b/tests/examples_arguments_syntax/waterfall_chart.py
new file mode 100644
index 0000000..50f8718
--- /dev/null
+++ b/tests/examples_arguments_syntax/waterfall_chart.py
@@ -0,0 +1,106 @@
+"""
+Waterfall Chart
+---------------
+This example shows how to recreate a Vega-Lite implementation of a waterfall chart.
+Original inspiration is from https://vega.github.io/vega-lite/examples/waterfall_chart.html
+"""
+# category: advanced calculations
+
+import altair as alt
+import pandas as pd
+
+data = [
+    {"label": "Begin", "amount": 4000},
+    {"label": "Jan", "amount": 1707},
+    {"label": "Feb", "amount": -1425},
+    {"label": "Mar", "amount": -1030},
+    {"label": "Apr", "amount": 1812},
+    {"label": "May", "amount": -1067},
+    {"label": "Jun", "amount": -1481},
+    {"label": "Jul", "amount": 1228},
+    {"label": "Aug", "amount": 1176},
+    {"label": "Sep", "amount": 1146},
+    {"label": "Oct", "amount": 1205},
+    {"label": "Nov", "amount": -1388},
+    {"label": "Dec", "amount": 1492},
+    {"label": "End", "amount": 0},
+]
+source = pd.DataFrame(data)
+
+# The "base_chart" defines the transform_window, transform_calculate, and X axis
+base_chart = alt.Chart(source).transform_window(
+    window_sum_amount="sum(amount)",
+    window_lead_label="lead(label)",
+).transform_calculate(
+    calc_lead="datum.window_lead_label === null ? datum.label : datum.window_lead_label",
+    calc_prev_sum="datum.label === 'End' ? 0 : datum.window_sum_amount - datum.amount",
+    calc_amount="datum.label === 'End' ? datum.window_sum_amount : datum.amount",
+    calc_text_amount="(datum.label !== 'Begin' && datum.label !== 'End' && datum.calc_amount > 0 ? '+' : '') + datum.calc_amount",
+    calc_center="(datum.window_sum_amount + datum.calc_prev_sum) / 2",
+    calc_sum_dec="datum.window_sum_amount < datum.calc_prev_sum ? datum.window_sum_amount : ''",
+    calc_sum_inc="datum.window_sum_amount > datum.calc_prev_sum ? datum.window_sum_amount : ''",
+).encode(
+    x=alt.X(
+        "label:O",
+        axis=alt.Axis(title="Months", labelAngle=0),
+        sort=None,
+    )
+)
+
+# alt.condition does not support multiple if else conditions which is why
+# we use a dictionary instead. See https://stackoverflow.com/a/66109641
+# for more information
+color_coding = {
+    "condition": [
+        {"test": "datum.label === 'Begin' || datum.label === 'End'", "value": "#878d96"},
+        {"test": "datum.calc_amount < 0", "value": "#24a148"},
+    ],
+    "value": "#fa4d56",
+}
+
+bar = base_chart.mark_bar(size=45).encode(
+    y=alt.Y("calc_prev_sum:Q", title="Amount"),
+    y2=alt.Y2("window_sum_amount:Q"),
+    color=color_coding,
+)
+
+# The "rule" chart is for the horizontal lines that connect the bars
+rule = base_chart.mark_rule(
+    xOffset=-22.5,
+    x2Offset=22.5,
+).encode(
+    y="window_sum_amount:Q",
+    x2="calc_lead",
+)
+
+# Add values as text
+text_pos_values_top_of_bar = base_chart.mark_text(
+    baseline="bottom",
+    dy=-4
+).encode(
+    text=alt.Text("calc_sum_inc:N"),
+    y="calc_sum_inc:Q"
+)
+text_neg_values_bot_of_bar = base_chart.mark_text(
+    baseline="top",
+    dy=4
+).encode(
+    text=alt.Text("calc_sum_dec:N"),
+    y="calc_sum_dec:Q"
+)
+text_bar_values_mid_of_bar = base_chart.mark_text(baseline="middle").encode(
+    text=alt.Text("calc_text_amount:N"),
+    y="calc_center:Q",
+    color=alt.value("white"),
+)
+
+alt.layer(
+    bar,
+    rule,
+    text_pos_values_top_of_bar,
+    text_neg_values_bot_of_bar,
+    text_bar_values_mid_of_bar
+).properties(
+    width=800,
+    height=450
+)
\ No newline at end of file
diff --git a/altair/examples/wheat_wages.py b/tests/examples_arguments_syntax/wheat_wages.py
similarity index 100%
rename from altair/examples/wheat_wages.py
rename to tests/examples_arguments_syntax/wheat_wages.py
diff --git a/altair/examples/wilkinson-dot-plot.py b/tests/examples_arguments_syntax/wilkinson-dot-plot.py
similarity index 94%
rename from altair/examples/wilkinson-dot-plot.py
rename to tests/examples_arguments_syntax/wilkinson-dot-plot.py
index 05a5786..d8a9889 100644
--- a/altair/examples/wilkinson-dot-plot.py
+++ b/tests/examples_arguments_syntax/wilkinson-dot-plot.py
@@ -3,7 +3,7 @@ Wilkinson Dot Plot
 ------------------
 An example of a `Wilkinson Dot Plot <https://en.wikipedia.org/wiki/Dot_plot_(statistics)>`_
 """
-# category: other charts
+# category: advanced calculations
 
 import altair as alt
 import pandas as pd
diff --git a/tests/examples_arguments_syntax/wind_vector_map.py b/tests/examples_arguments_syntax/wind_vector_map.py
new file mode 100644
index 0000000..225f7b4
--- /dev/null
+++ b/tests/examples_arguments_syntax/wind_vector_map.py
@@ -0,0 +1,60 @@
+"""
+Wind Vector Map
+---------------
+An example showing a vector array map showing wind speed and direction using ``wedge``
+as shape for ``mark_point`` and ``angle`` encoding for the wind direction.
+This is adapted from this corresponding Vega-Lite Example:
+`Wind Vector Map <https://vega.github.io/vega-lite/examples/point_angle_windvector.html>`_
+with an added base map.
+"""
+# category: maps
+import altair as alt
+from vega_datasets import data
+
+df_wind = data.windvectors()
+data_world = alt.topo_feature(data.world_110m.url, "countries")
+
+wedge = (
+    alt.Chart(df_wind)
+    .mark_point(shape="wedge", filled=True)
+    .encode(
+        latitude="latitude",
+        longitude="longitude",
+        color=alt.Color(
+            "dir", scale=alt.Scale(domain=[0, 360], scheme="rainbow"), legend=None
+        ),
+        angle=alt.Angle("dir", scale=alt.Scale(domain=[0, 360], range=[180, 540])),
+        size=alt.Size("speed", scale=alt.Scale(rangeMax=500)),
+    )
+    .project("equalEarth")
+)
+
+xmin, xmax, ymin, ymax = (
+    df_wind.longitude.min(),
+    df_wind.longitude.max(),
+    df_wind.latitude.min(),
+    df_wind.latitude.max(),
+)
+
+# extent as feature or featurecollection
+extent = {
+    "type": "Feature", 
+    "geometry": {"type": "Polygon", 
+                 "coordinates": [[
+                     [xmax, ymax],
+                     [xmax, ymin],
+                     [xmin, ymin],
+                     [xmin, ymax],
+                     [xmax, ymax]]]
+                },
+    "properties": {}
+}
+
+# use fit combined with clip=True
+base = (
+    alt.Chart(data_world)
+    .mark_geoshape(clip=True, fill="lightgray", stroke="black", strokeWidth=0.5)
+    .project(type="equalEarth", fit=extent)
+)
+
+base + wedge
\ No newline at end of file
diff --git a/altair/examples/window_rank.py b/tests/examples_arguments_syntax/window_rank.py
similarity index 98%
rename from altair/examples/window_rank.py
rename to tests/examples_arguments_syntax/window_rank.py
index d362d40..1e33fac 100644
--- a/altair/examples/window_rank.py
+++ b/tests/examples_arguments_syntax/window_rank.py
@@ -4,7 +4,7 @@ Window Rank Line Chart
 This example shows the Group F rankings in the 2018 World Cup after each matchday. 
 A window transformation is used to rank each after each match day, sorting by points and difference.
 """
-# category: case studies
+# category: line charts
 import altair as alt
 import pandas as pd
 
diff --git a/altair/examples/world_map.py b/tests/examples_arguments_syntax/world_map.py
similarity index 100%
rename from altair/examples/world_map.py
rename to tests/examples_arguments_syntax/world_map.py
diff --git a/altair/examples/world_projections.py b/tests/examples_arguments_syntax/world_projections.py
similarity index 100%
rename from altair/examples/world_projections.py
rename to tests/examples_arguments_syntax/world_projections.py
diff --git a/tests/examples_methods_syntax/__init__.py b/tests/examples_methods_syntax/__init__.py
new file mode 100644
index 0000000..1ab7847
--- /dev/null
+++ b/tests/examples_methods_syntax/__init__.py
@@ -0,0 +1,25 @@
+import os
+from typing import Set
+
+# Set of the names of examples that should have SVG static images.
+# This is for examples that VlConvert's PNG export does not support.
+SVG_EXAMPLES: Set[str] = {"isotype_emoji"}
+
+
+def iter_examples_methods_syntax():
+    """Iterate over the examples in this directory.
+
+    Each item is a dict with the following keys:
+    - "name" : the unique name of the example
+    - "filename" : the full file path to the example
+    """
+    examples_methods_syntax_dir = os.path.abspath(os.path.dirname(__file__))
+    for filename in os.listdir(examples_methods_syntax_dir):
+        name, ext = os.path.splitext(filename)
+        if name.startswith("_") or ext != ".py":
+            continue
+        yield {
+            "name": name,
+            "filename": os.path.join(examples_methods_syntax_dir, filename),
+            "use_svg": name in SVG_EXAMPLES
+        }
diff --git a/tests/examples_methods_syntax/airport_connections.py b/tests/examples_methods_syntax/airport_connections.py
new file mode 100644
index 0000000..0b54db4
--- /dev/null
+++ b/tests/examples_methods_syntax/airport_connections.py
@@ -0,0 +1,70 @@
+"""
+Connections Among U.S. Airports Interactive
+-------------------------------------------
+This example shows all the connections between major U.S. airports. Lookup transformations
+are used to find the coordinates of each airport and connecting airports. Connections
+are displayed on mouseover via a single selection.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+# Since these data are each more than 5,000 rows we'll import from the URLs
+airports = data.airports.url
+flights_airport = data.flights_airport.url
+
+states = alt.topo_feature(data.us_10m.url, feature="states")
+
+# Create mouseover selection
+select_city = alt.selection_point(
+    on="mouseover", nearest=True, fields=["origin"], empty=False
+)
+
+# Define which attributes to lookup from airports.csv
+lookup_data = alt.LookupData(
+    airports, key="iata", fields=["state", "latitude", "longitude"]
+)
+
+background = alt.Chart(states).mark_geoshape(
+    fill="lightgray",
+    stroke="white"
+).properties(
+    width=750,
+    height=500
+).project("albersUsa")
+
+connections = alt.Chart(flights_airport).mark_rule(opacity=0.35).encode(
+    latitude="latitude:Q",
+    longitude="longitude:Q",
+    latitude2="lat2:Q",
+    longitude2="lon2:Q"
+).transform_lookup(
+    lookup="origin",
+    from_=lookup_data
+).transform_lookup(
+    lookup="destination",
+    from_=lookup_data,
+    as_=["state", "lat2", "lon2"]
+).transform_filter(
+    select_city
+)
+
+points = alt.Chart(flights_airport).mark_circle().encode(
+    latitude="latitude:Q",
+    longitude="longitude:Q",
+    size=alt.Size("routes:Q").legend(None).scale(range=[0, 1000]),
+    order=alt.Order("routes:Q").sort("descending"),
+    tooltip=["origin:N", "routes:Q"]
+).transform_aggregate(
+    routes="count()",
+    groupby=["origin"]
+).transform_lookup(
+    lookup="origin",
+    from_=lookup_data
+).transform_filter(
+    (alt.datum.state != "PR") & (alt.datum.state != "VI")
+).add_params(
+    select_city
+)
+
+(background + connections + points).configure_view(stroke=None)
diff --git a/tests/examples_methods_syntax/annual_weather_heatmap.py b/tests/examples_methods_syntax/annual_weather_heatmap.py
new file mode 100644
index 0000000..d96b1e0
--- /dev/null
+++ b/tests/examples_methods_syntax/annual_weather_heatmap.py
@@ -0,0 +1,24 @@
+"""
+Annual Weather Heatmap
+----------------------
+"""
+# category: tables
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather()
+
+alt.Chart(source, title="Daily Max Temperatures (C) in Seattle, WA").mark_rect().encode(
+    alt.X("date(date):O").title("Day").axis(format="%e", labelAngle=0),
+    alt.Y("month(date):O").title("Month"),
+    alt.Color("max(temp_max)").title(None),
+    tooltip=[
+        alt.Tooltip("monthdate(date)", title="Date"),
+        alt.Tooltip("max(temp_max)", title="Max Temp"),
+    ],
+).configure_view(
+    step=13,
+    strokeWidth=0
+).configure_axis(
+    domain=False
+)
diff --git a/tests/examples_methods_syntax/anscombe_plot.py b/tests/examples_methods_syntax/anscombe_plot.py
new file mode 100644
index 0000000..906f15e
--- /dev/null
+++ b/tests/examples_methods_syntax/anscombe_plot.py
@@ -0,0 +1,20 @@
+"""
+Anscombe's Quartet
+------------------
+
+This example shows how to use the column channel to make a trellis plot. Anscombe's Quartet is a famous dataset constructed by Francis Anscombe. Common summary statistics are identical for each subset of the data, despite the subsets having vastly different characteristics.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.anscombe()
+
+alt.Chart(source).mark_circle().encode(
+    alt.X('X').scale(zero=False),
+    alt.Y('Y').scale(zero=False),
+    alt.Facet('Series', columns=2),
+).properties(
+    width=180,
+    height=180,
+)
diff --git a/tests/examples_methods_syntax/bar_chart_sorted.py b/tests/examples_methods_syntax/bar_chart_sorted.py
new file mode 100644
index 0000000..ab61f8c
--- /dev/null
+++ b/tests/examples_methods_syntax/bar_chart_sorted.py
@@ -0,0 +1,15 @@
+"""
+Sorted Bar Chart
+================
+This example shows a bar chart sorted by a calculated value.
+"""
+# category: bar charts
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+alt.Chart(source).mark_bar().encode(
+    x='sum(yield):Q',
+    y=alt.Y('site:N').sort('-x')
+)
diff --git a/tests/examples_methods_syntax/bar_chart_trellis_compact.py b/tests/examples_methods_syntax/bar_chart_trellis_compact.py
new file mode 100644
index 0000000..2cb0e4b
--- /dev/null
+++ b/tests/examples_methods_syntax/bar_chart_trellis_compact.py
@@ -0,0 +1,48 @@
+"""
+Compact Trellis Grid of Bar Charts
+==================================
+This example shows a simple grid of bar charts to compare performance data..
+"""
+# category: bar charts
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame(
+    [
+        {"a": "a1", "b": "b1", "c": "x", "p": "0.14"},
+        {"a": "a1", "b": "b1", "c": "y", "p": "0.60"},
+        {"a": "a1", "b": "b1", "c": "z", "p": "0.03"},
+        {"a": "a1", "b": "b2", "c": "x", "p": "0.80"},
+        {"a": "a1", "b": "b2", "c": "y", "p": "0.38"},
+        {"a": "a1", "b": "b2", "c": "z", "p": "0.55"},
+        {"a": "a1", "b": "b3", "c": "x", "p": "0.11"},
+        {"a": "a1", "b": "b3", "c": "y", "p": "0.58"},
+        {"a": "a1", "b": "b3", "c": "z", "p": "0.79"},
+        {"a": "a2", "b": "b1", "c": "x", "p": "0.83"},
+        {"a": "a2", "b": "b1", "c": "y", "p": "0.87"},
+        {"a": "a2", "b": "b1", "c": "z", "p": "0.67"},
+        {"a": "a2", "b": "b2", "c": "x", "p": "0.97"},
+        {"a": "a2", "b": "b2", "c": "y", "p": "0.84"},
+        {"a": "a2", "b": "b2", "c": "z", "p": "0.90"},
+        {"a": "a2", "b": "b3", "c": "x", "p": "0.74"},
+        {"a": "a2", "b": "b3", "c": "y", "p": "0.64"},
+        {"a": "a2", "b": "b3", "c": "z", "p": "0.19"},
+        {"a": "a3", "b": "b1", "c": "x", "p": "0.57"},
+        {"a": "a3", "b": "b1", "c": "y", "p": "0.35"},
+        {"a": "a3", "b": "b1", "c": "z", "p": "0.49"},
+        {"a": "a3", "b": "b2", "c": "x", "p": "0.91"},
+        {"a": "a3", "b": "b2", "c": "y", "p": "0.38"},
+        {"a": "a3", "b": "b2", "c": "z", "p": "0.91"},
+        {"a": "a3", "b": "b3", "c": "x", "p": "0.99"},
+        {"a": "a3", "b": "b3", "c": "y", "p": "0.80"},
+        {"a": "a3", "b": "b3", "c": "z", "p": "0.37"},
+    ]
+)
+
+alt.Chart(source, width=60, height=alt.Step(8)).mark_bar().encode(
+    alt.Y("c:N").axis(None),
+    alt.X("p:Q").title(None).axis(format="%"),
+    alt.Color("c:N").title("settings").legend(orient="bottom", titleOrient="left"),
+    alt.Row("a:N").title("Factor A").header(labelAngle=0),
+    alt.Column("b:N").title("Factor B"),
+)
diff --git a/tests/examples_methods_syntax/beckers_barley_trellis_plot.py b/tests/examples_methods_syntax/beckers_barley_trellis_plot.py
new file mode 100644
index 0000000..9f7c688
--- /dev/null
+++ b/tests/examples_methods_syntax/beckers_barley_trellis_plot.py
@@ -0,0 +1,28 @@
+"""
+Becker's Barley Trellis Plot
+----------------------------
+The example demonstrates the trellis charts created by Richard Becker, William Cleveland and others in the 1990s. Using the visualization technique below they identified an anomoly in a widely used agriculatural dataset, which they termed `"The Morris Mistake." <http://ml.stat.purdue.edu/stat695t/writings/Trellis.User.pdf>`_. It became their favored way of showcasing the power of this pioneering plot.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+alt.Chart(source, title="The Morris Mistake").mark_point().encode(
+    alt.X('yield:Q')
+        .title("Barley Yield (bushels/acre)")
+        .scale(zero=False)
+        .axis(grid=False),
+    alt.Y('variety:N')
+        .title("")
+        .sort('-x')
+        .axis(grid=True),
+    alt.Color('year:N')
+        .legend(title="Year"),
+    alt.Row('site:N')
+        .title("")
+        .sort(alt.EncodingSortField(field='yield', op='sum', order='descending'))
+).properties(
+    height=alt.Step(20)
+).configure_view(stroke="transparent")
diff --git a/tests/examples_methods_syntax/beckers_barley_wrapped_facet.py b/tests/examples_methods_syntax/beckers_barley_wrapped_facet.py
new file mode 100644
index 0000000..1b36dfb
--- /dev/null
+++ b/tests/examples_methods_syntax/beckers_barley_wrapped_facet.py
@@ -0,0 +1,22 @@
+"""
+Becker's Barley Trellis Plot (Wrapped Facet)
+--------------------------------------------
+The example demonstrates the trellis charts created by Richard Becker, William Cleveland and others in the 1990s. 
+This is the Altair replicate of `the VegaLite version <https://vega.github.io/vega-lite/docs/facet.html#facet-full>`_ 
+demonstrating the usage of `columns` argument to create wrapped facet.
+"""
+# category: advanced calculations
+import altair as alt
+from vega_datasets import data
+
+source = data.barley.url
+
+alt.Chart(source).mark_point().encode(
+    alt.X('median(yield):Q').scale(zero=False),
+    y='variety:O',
+    color='year:N',
+    facet=alt.Facet('site:O', columns=2),
+).properties(
+    width=200,
+    height=100,
+)
diff --git a/tests/examples_methods_syntax/bump_chart.py b/tests/examples_methods_syntax/bump_chart.py
new file mode 100644
index 0000000..03f88c8
--- /dev/null
+++ b/tests/examples_methods_syntax/bump_chart.py
@@ -0,0 +1,29 @@
+"""
+Bump Chart
+----------
+This example shows a bump chart.  The data is first grouped into six-month
+intervals using pandas. The ranks are computed by Altair using a 
+window transform.
+"""
+# category: line charts
+
+import altair as alt
+from vega_datasets import data
+import pandas as pd
+
+stocks = data.stocks()
+source = stocks.groupby([pd.Grouper(key="date", freq="6M"),"symbol"]).mean().reset_index()
+
+alt.Chart(source).mark_line(point=True).encode(
+    x=alt.X("date:O").timeUnit("yearmonth").title("date"),
+    y="rank:O",
+    color=alt.Color("symbol:N")
+).transform_window(
+    rank="rank()",
+    sort=[alt.SortField("price", order="descending")],
+    groupby=["date"]
+).properties(
+    title="Bump Chart for Stock Prices",
+    width=600,
+    height=150,
+)
diff --git a/tests/examples_methods_syntax/candlestick_chart.py b/tests/examples_methods_syntax/candlestick_chart.py
new file mode 100644
index 0000000..47e713a
--- /dev/null
+++ b/tests/examples_methods_syntax/candlestick_chart.py
@@ -0,0 +1,40 @@
+"""
+Candlestick Chart
+=================
+A candlestick chart inspired from `Protovis <http://mbostock.github.io/protovis/ex/candlestick.html>`_. 
+This example shows the performance of the Chicago Board Options Exchange `Volatility Index <https://en.wikipedia.org/wiki/VIX>`_ (VIX) 
+in the summer of 2009. The thick bar represents the opening and closing prices, 
+while the thin bar shows intraday high and low prices; if the index closed higher on a given day, the bars are colored green rather than red.
+"""
+# category: advanced calculations
+import altair as alt
+from vega_datasets import data
+
+source = data.ohlc()
+
+open_close_color = alt.condition(
+    "datum.open <= datum.close",
+    alt.value("#06982d"),
+    alt.value("#ae1325")
+)
+
+base = alt.Chart(source).encode(
+    alt.X('date:T')
+        .axis(format='%m/%d', labelAngle=-45)
+        .title('Date in 2009'),
+    color=open_close_color
+)
+
+rule = base.mark_rule().encode(
+    alt.Y('low:Q')
+        .title('Price')
+        .scale(zero=False),
+    alt.Y2('high:Q')
+)
+
+bar = base.mark_bar().encode(
+    alt.Y('open:Q'),
+    alt.Y2('close:Q')
+)
+
+rule + bar
diff --git a/tests/examples_methods_syntax/co2_concentration.py b/tests/examples_methods_syntax/co2_concentration.py
new file mode 100644
index 0000000..e82f830
--- /dev/null
+++ b/tests/examples_methods_syntax/co2_concentration.py
@@ -0,0 +1,64 @@
+"""
+Atmospheric CO2 Concentration
+-----------------------------
+This example is a fully developed line chart that uses a window transformation.
+It was inspired by `Gregor Aisch's work at datawrapper
+<https://www.datawrapper.de/_/OHgEm/>`_.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.co2_concentration.url
+
+base = alt.Chart(
+    source,
+    title="Carbon Dioxide in the Atmosphere"
+).transform_calculate(
+    year="year(datum.Date)"
+).transform_calculate(
+    decade="floor(datum.year / 10)"
+).transform_calculate(
+    scaled_date="(datum.year % 10) + (month(datum.Date)/12)"
+).transform_window(
+    first_date='first_value(scaled_date)',
+    last_date='last_value(scaled_date)',
+    sort=[{"field": "scaled_date", "order": "ascending"}],
+    groupby=['decade'],
+    frame=[None, None]
+).transform_calculate(
+  end=(
+      "datum.first_date === datum.scaled_date ? 'first'"
+      ": datum.last_date === datum.scaled_date ? 'last'"
+      ": null"
+  )
+).encode(
+    alt.X("scaled_date:Q")
+        .title("Year into Decade")
+        .axis(tickCount=11),
+    alt.Y("CO2:Q")
+        .title("CO2 concentration in ppm")
+        .scale(zero=False)
+)
+
+line = base.mark_line().encode(
+    alt.Color("decade:O")
+        .scale(scheme="magma")
+        .legend(None)
+)
+
+text = base.encode(text="year:N")
+
+start_year = text.transform_filter(
+  alt.datum.end == 'first'
+).mark_text(baseline="top")
+
+end_year = text.transform_filter(
+  alt.datum.end == 'last'
+).mark_text(baseline="bottom")
+
+(line + start_year + end_year).configure_text(
+    align="left",
+    dx=1,
+    dy=3
+).properties(width=600, height=375)
diff --git a/tests/examples_methods_syntax/comet_chart.py b/tests/examples_methods_syntax/comet_chart.py
new file mode 100644
index 0000000..b8edff7
--- /dev/null
+++ b/tests/examples_methods_syntax/comet_chart.py
@@ -0,0 +1,44 @@
+"""
+Comet Chart
+-----------
+Inspired by `Zan Armstrong's comet chart <https://www.zanarmstrong.com/infovisresearch>`_
+this plot uses ``mark_trail`` to visualize change of grouped data over time.
+A more elaborate example and explanation of creating comet charts in Altair
+is shown in `this blogpost <https://medium.com/de-dataverbinders/comet-charts-in-python-visualizing-statistical-mix-effects-and-simpsons-paradox-with-altair-6cd51fb58b7c>`_.
+"""
+# category: advanced calculations
+
+import altair as alt
+import vega_datasets
+
+alt.Chart(
+    vega_datasets.data.barley.url,
+    title='Barley Yield comparison between 1932 and 1931'
+).mark_trail().encode(
+    alt.X('year:O').title(None),
+    alt.Y('variety:N').title('Variety'),
+    alt.Size('yield:Q')
+        .scale(range=[0, 12])
+        .legend(values=[20, 60])
+        .title('Barley Yield (bushels/acre)'),
+    alt.Color('delta:Q')
+        .scale(domainMid=0)
+        .title('Yield Delta (%)'),
+    alt.Tooltip(['year:O', 'yield:Q']),
+    alt.Column('site:N').title('Site')
+).transform_pivot(
+    "year",
+    value="yield",
+    groupby=["variety", "site"]
+).transform_fold(
+    ["1931", "1932"],
+    as_=["year", "yield"]
+).transform_calculate(
+    calculate="datum['1932'] - datum['1931']",
+    as_="delta"
+).configure_legend(
+    orient='bottom',
+    direction='horizontal'
+).configure_view(
+    stroke=None
+)
diff --git a/tests/examples_methods_syntax/connected_scatterplot.py b/tests/examples_methods_syntax/connected_scatterplot.py
new file mode 100644
index 0000000..a590284
--- /dev/null
+++ b/tests/examples_methods_syntax/connected_scatterplot.py
@@ -0,0 +1,18 @@
+"""
+Connected Scatter Plot (Lines with Custom Paths)
+------------------------------------------------
+
+This example show how the order encoding can be used to draw a custom path. The dataset tracks miles driven per capita along with gas prices annually from 1956 to 2010.
+It is based on Hannah Fairfield's article 'Driving Shifts Into Reverse'. See https://archive.nytimes.com/www.nytimes.com/imagepages/2010/05/02/business/02metrics.html for the original.
+"""
+# category: scatter plots
+import altair as alt
+from vega_datasets import data
+
+source = data.driving()
+
+alt.Chart(source).mark_line(point=True).encode(
+    alt.X('miles').scale(zero=False),
+    alt.Y('gas').scale(zero=False),
+    order='year'
+)
diff --git a/tests/examples_methods_syntax/density_stack.py b/tests/examples_methods_syntax/density_stack.py
new file mode 100644
index 0000000..56b0161
--- /dev/null
+++ b/tests/examples_methods_syntax/density_stack.py
@@ -0,0 +1,35 @@
+"""
+Stacked Density Estimates
+-------------------------
+To plot a stacked graph of estimates, use a shared ``extent`` and a fixed
+number of subdivision ``steps`` to ensure that the points for each area align
+well.  Density estimates of measurements for each iris flower feature are plot
+in a stacked method.  In addition, setting ``counts`` to true multiplies the
+densities by the number of data points in each group, preserving proportional
+differences.
+"""
+# category: distributions
+
+import altair as alt
+from vega_datasets import data
+
+source = data.iris()
+
+alt.Chart(source).transform_fold(
+    ['petalWidth', 
+     'petalLength', 
+     'sepalWidth', 
+     'sepalLength'], 
+    as_ = ['Measurement_type', 'value']
+).transform_density(
+    density='value', 
+    bandwidth=0.3, 
+    groupby=['Measurement_type'], 
+    extent= [0, 8], 
+    counts = True, 
+    steps=200
+).mark_area().encode(
+    alt.X('value:Q'), 
+    alt.Y('density:Q').stack('zero'),
+    alt.Color('Measurement_type:N')
+).properties(width=400, height=100)
diff --git a/tests/examples_methods_syntax/diverging_stacked_bar_chart.py b/tests/examples_methods_syntax/diverging_stacked_bar_chart.py
new file mode 100644
index 0000000..19ddc1d
--- /dev/null
+++ b/tests/examples_methods_syntax/diverging_stacked_bar_chart.py
@@ -0,0 +1,363 @@
+"""
+Diverging Stacked Bar Chart
+---------------------------
+This example shows a diverging stacked bar chart for sentiments towards a set of eight questions, displayed as percentages with neutral responses straddling the 0% mark.
+"""
+# category: bar charts
+import altair as alt
+
+source = alt.pd.DataFrame([
+      {
+        "question": "Question 1",
+        "type": "Strongly disagree",
+        "value": 24,
+        "percentage": 0.7,
+        "percentage_start": -19.1,
+        "percentage_end": -18.4
+      },
+      {
+        "question": "Question 1",
+        "type": "Disagree",
+        "value": 294,
+        "percentage": 9.1,
+        "percentage_start": -18.4,
+        "percentage_end": -9.2
+      },
+      {
+        "question": "Question 1",
+        "type": "Neither agree nor disagree",
+        "value": 594,
+        "percentage": 18.5,
+        "percentage_start": -9.2,
+        "percentage_end": 9.2
+      },
+      {
+        "question": "Question 1",
+        "type": "Agree",
+        "value": 1927,
+        "percentage": 59.9,
+        "percentage_start": 9.2,
+        "percentage_end": 69.2
+      },
+      {
+        "question": "Question 1",
+        "type": "Strongly agree",
+        "value": 376,
+        "percentage": 11.7,
+        "percentage_start": 69.2,
+        "percentage_end": 80.9
+      },
+
+      {
+        "question": "Question 2",
+        "type": "Strongly disagree",
+        "value": 2,
+        "percentage": 18.2,
+        "percentage_start": -36.4,
+        "percentage_end": -18.2
+      },
+      {
+        "question": "Question 2",
+        "type": "Disagree",
+        "value": 2,
+        "percentage": 18.2,
+        "percentage_start": -18.2,
+        "percentage_end": 0
+      },
+      {
+        "question": "Question 2",
+        "type": "Neither agree nor disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": 0,
+        "percentage_end": 0
+      },
+      {
+        "question": "Question 2",
+        "type": "Agree",
+        "value": 7,
+        "percentage": 63.6,
+        "percentage_start": 0,
+        "percentage_end": 63.6
+      },
+      {
+        "question": "Question 2",
+        "type": "Strongly agree",
+        "value": 11,
+        "percentage": 0,
+        "percentage_start": 63.6,
+        "percentage_end": 63.6
+      },
+
+      {
+        "question": "Question 3",
+        "type": "Strongly disagree",
+        "value": 2,
+        "percentage": 20,
+        "percentage_start": -30,
+        "percentage_end": -10
+      },
+      {
+        "question": "Question 3",
+        "type": "Disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": -10,
+        "percentage_end": -10
+      },
+      {
+        "question": "Question 3",
+        "type": "Neither agree nor disagree",
+        "value": 2,
+        "percentage": 20,
+        "percentage_start": -10,
+        "percentage_end": 10
+      },
+      {
+        "question": "Question 3",
+        "type": "Agree",
+        "value": 4,
+        "percentage": 40,
+        "percentage_start": 10,
+        "percentage_end": 50
+      },
+      {
+        "question": "Question 3",
+        "type": "Strongly agree",
+        "value": 2,
+        "percentage": 20,
+        "percentage_start": 50,
+        "percentage_end": 70
+      },
+
+      {
+        "question": "Question 4",
+        "type": "Strongly disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": -15.6,
+        "percentage_end": -15.6
+      },
+      {
+        "question": "Question 4",
+        "type": "Disagree",
+        "value": 2,
+        "percentage": 12.5,
+        "percentage_start": -15.6,
+        "percentage_end": -3.1
+      },
+      {
+        "question": "Question 4",
+        "type": "Neither agree nor disagree",
+        "value": 1,
+        "percentage": 6.3,
+        "percentage_start": -3.1,
+        "percentage_end": 3.1
+      },
+      {
+        "question": "Question 4",
+        "type": "Agree",
+        "value": 7,
+        "percentage": 43.8,
+        "percentage_start": 3.1,
+        "percentage_end": 46.9
+      },
+      {
+        "question": "Question 4",
+        "type": "Strongly agree",
+        "value": 6,
+        "percentage": 37.5,
+        "percentage_start": 46.9,
+        "percentage_end": 84.4
+      },
+
+      {
+        "question": "Question 5",
+        "type": "Strongly disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": -10.4,
+        "percentage_end": -10.4
+      },
+      {
+        "question": "Question 5",
+        "type": "Disagree",
+        "value": 1,
+        "percentage": 4.2,
+        "percentage_start": -10.4,
+        "percentage_end": -6.3
+      },
+      {
+        "question": "Question 5",
+        "type": "Neither agree nor disagree",
+        "value": 3,
+        "percentage": 12.5,
+        "percentage_start": -6.3,
+        "percentage_end": 6.3
+      },
+      {
+        "question": "Question 5",
+        "type": "Agree",
+        "value": 16,
+        "percentage": 66.7,
+        "percentage_start": 6.3,
+        "percentage_end": 72.9
+      },
+      {
+        "question": "Question 5",
+        "type": "Strongly agree",
+        "value": 4,
+        "percentage": 16.7,
+        "percentage_start": 72.9,
+        "percentage_end": 89.6
+      },
+
+      {
+        "question": "Question 6",
+        "type": "Strongly disagree",
+        "value": 1,
+        "percentage": 6.3,
+        "percentage_start": -18.8,
+        "percentage_end": -12.5
+      },
+      {
+        "question": "Question 6",
+        "type": "Disagree",
+        "value": 1,
+        "percentage": 6.3,
+        "percentage_start": -12.5,
+        "percentage_end": -6.3
+      },
+      {
+        "question": "Question 6",
+        "type": "Neither agree nor disagree",
+        "value": 2,
+        "percentage": 12.5,
+        "percentage_start": -6.3,
+        "percentage_end": 6.3
+      },
+      {
+        "question": "Question 6",
+        "type": "Agree",
+        "value": 9,
+        "percentage": 56.3,
+        "percentage_start": 6.3,
+        "percentage_end": 62.5
+      },
+      {
+        "question": "Question 6",
+        "type": "Strongly agree",
+        "value": 3,
+        "percentage": 18.8,
+        "percentage_start": 62.5,
+        "percentage_end": 81.3
+      },
+
+      {
+        "question": "Question 7",
+        "type": "Strongly disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": -10,
+        "percentage_end": -10
+      },
+      {
+        "question": "Question 7",
+        "type": "Disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": -10,
+        "percentage_end": -10
+      },
+      {
+        "question": "Question 7",
+        "type": "Neither agree nor disagree",
+        "value": 1,
+        "percentage": 20,
+        "percentage_start": -10,
+        "percentage_end": 10
+      },
+      {
+        "question": "Question 7",
+        "type": "Agree",
+        "value": 4,
+        "percentage": 80,
+        "percentage_start": 10,
+        "percentage_end": 90
+      },
+      {
+        "question": "Question 7",
+        "type": "Strongly agree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": 90,
+        "percentage_end": 90
+      },
+
+      {
+        "question": "Question 8",
+        "type": "Strongly disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": 0,
+        "percentage_end": 0
+      },
+      {
+        "question": "Question 8",
+        "type": "Disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": 0,
+        "percentage_end": 0
+      },
+      {
+        "question": "Question 8",
+        "type": "Neither agree nor disagree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": 0,
+        "percentage_end": 0
+      },
+      {
+        "question": "Question 8",
+        "type": "Agree",
+        "value": 0,
+        "percentage": 0,
+        "percentage_start": 0,
+        "percentage_end": 0
+      },
+      {
+        "question": "Question 8",
+        "type": "Strongly agree",
+        "value": 2,
+        "percentage": 100,
+        "percentage_start": 0,
+        "percentage_end": 100
+      }
+])
+
+color_scale = alt.Scale(
+    domain=[
+        "Strongly disagree",
+        "Disagree",
+        "Neither agree nor disagree",
+        "Agree",
+        "Strongly agree"
+    ],
+    range=["#c30d24", "#f3a583", "#cccccc", "#94c6da", "#1770ab"]
+)
+
+y_axis = alt.Axis(
+    title='Question',
+    offset=5,
+    ticks=False,
+    minExtent=60,
+    domain=False
+)
+
+alt.Chart(source).mark_bar().encode(
+    x='percentage_start:Q',
+    x2='percentage_end:Q',
+    y=alt.Y('question:N').axis(y_axis),
+    color=alt.Color('type:N').title('Response').scale(color_scale),
+)
diff --git a/tests/examples_methods_syntax/donut_chart.py b/tests/examples_methods_syntax/donut_chart.py
new file mode 100644
index 0000000..a734825
--- /dev/null
+++ b/tests/examples_methods_syntax/donut_chart.py
@@ -0,0 +1,21 @@
+"""
+Donut Chart
+-----------
+This example shows how to make a Donut Chart using ``mark_arc``.
+This is adapted from a corresponding Vega-Lite Example:
+`Donut Chart <https://vega.github.io/vega-lite/examples/arc_donut.html>`_.
+"""
+# category: circular plots
+
+import pandas as pd
+import altair as alt
+
+source = pd.DataFrame({
+    "category": [1, 2, 3, 4, 5, 6],
+    "value": [4, 6, 10, 3, 7, 8]
+})
+
+alt.Chart(source).mark_arc(innerRadius=50).encode(
+    theta="value",
+    color="category:N",
+)
diff --git a/tests/examples_methods_syntax/errorbars_with_ci.py b/tests/examples_methods_syntax/errorbars_with_ci.py
new file mode 100644
index 0000000..af950a4
--- /dev/null
+++ b/tests/examples_methods_syntax/errorbars_with_ci.py
@@ -0,0 +1,24 @@
+"""
+Error Bars with Confidence Interval
+======================================
+This example shows how to show error bars using confidence intervals.
+The confidence intervals are computed internally in vega by a non-parametric
+`bootstrap of the mean <https://github.com/vega/vega-statistics/blob/master/src/bootstrapCI.js>`_.
+"""
+# category: uncertainties and trends
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+error_bars = alt.Chart(source).mark_errorbar(extent='ci').encode(
+  alt.X('yield').scale(zero=False),
+  alt.Y('variety')
+)
+
+points = alt.Chart(source).mark_point(filled=True, color='black').encode(
+  x=alt.X('mean(yield)'),
+  y=alt.Y('variety'),
+)
+
+error_bars + points
diff --git a/tests/examples_methods_syntax/errorbars_with_std.py b/tests/examples_methods_syntax/errorbars_with_std.py
new file mode 100644
index 0000000..d20c154
--- /dev/null
+++ b/tests/examples_methods_syntax/errorbars_with_std.py
@@ -0,0 +1,23 @@
+"""
+Error Bars with Standard Deviation
+----------------------------------
+This example shows how to show error bars with standard deviation using crop yields data of different
+in the years of 1930s.
+"""
+# category: uncertainties and trends
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+error_bars = alt.Chart(source).mark_errorbar(extent='stdev').encode(
+  x=alt.X('yield').scale(zero=False),
+  y=alt.Y('variety')
+)
+
+points = alt.Chart(source).mark_point(filled=True, color='black').encode(
+  x=alt.X('mean(yield)'),
+  y=alt.Y('variety'),
+)
+
+error_bars + points
diff --git a/tests/examples_methods_syntax/falkensee.py b/tests/examples_methods_syntax/falkensee.py
new file mode 100644
index 0000000..ffceeed
--- /dev/null
+++ b/tests/examples_methods_syntax/falkensee.py
@@ -0,0 +1,78 @@
+"""
+Population of Falkensee from 1875 to 2014
+-----------------------------------------
+This example is a reproduction of the Falkensee plot found in the Vega-Lite examples.
+"""
+# category: case studies
+import altair as alt
+import pandas as pd
+
+source = [
+    {"year": "1875", "population": 1309},
+    {"year": "1890", "population": 1558},
+    {"year": "1910", "population": 4512},
+    {"year": "1925", "population": 8180},
+    {"year": "1933", "population": 15915},
+    {"year": "1939", "population": 24824},
+    {"year": "1946", "population": 28275},
+    {"year": "1950", "population": 29189},
+    {"year": "1964", "population": 29881},
+    {"year": "1971", "population": 26007},
+    {"year": "1981", "population": 24029},
+    {"year": "1985", "population": 23340},
+    {"year": "1989", "population": 22307},
+    {"year": "1990", "population": 22087},
+    {"year": "1991", "population": 22139},
+    {"year": "1992", "population": 22105},
+    {"year": "1993", "population": 22242},
+    {"year": "1994", "population": 22801},
+    {"year": "1995", "population": 24273},
+    {"year": "1996", "population": 25640},
+    {"year": "1997", "population": 27393},
+    {"year": "1998", "population": 29505},
+    {"year": "1999", "population": 32124},
+    {"year": "2000", "population": 33791},
+    {"year": "2001", "population": 35297},
+    {"year": "2002", "population": 36179},
+    {"year": "2003", "population": 36829},
+    {"year": "2004", "population": 37493},
+    {"year": "2005", "population": 38376},
+    {"year": "2006", "population": 39008},
+    {"year": "2007", "population": 39366},
+    {"year": "2008", "population": 39821},
+    {"year": "2009", "population": 40179},
+    {"year": "2010", "population": 40511},
+    {"year": "2011", "population": 40465},
+    {"year": "2012", "population": 40905},
+    {"year": "2013", "population": 41258},
+    {"year": "2014", "population": 41777},
+]
+
+source2 = [
+    {"start": "1933", "end": "1945", "event": "Nazi Rule"},
+    {"start": "1948", "end": "1989", "event": "GDR (East Germany)"},
+]
+
+
+source_df = pd.DataFrame(source)
+source2_df = pd.DataFrame(source2)
+
+
+line = alt.Chart(source_df).mark_line(color="#333").encode(
+    alt.X("year:T").axis(format="%Y").title("Year"),
+    alt.Y("population").title("Population"),
+)
+
+point = line.mark_point(color="#333")
+
+rect = alt.Chart(source2_df).mark_rect().encode(
+    x="start:T",
+    x2="end:T",
+    color=alt.Color("event:N").title("Event")
+)
+
+(rect + line + point).properties(
+    title="Population of Falkensee from 1875 to 2014",
+    width=500,
+    height=300
+)
diff --git a/tests/examples_methods_syntax/gapminder_bubble_plot.py b/tests/examples_methods_syntax/gapminder_bubble_plot.py
new file mode 100644
index 0000000..8392128
--- /dev/null
+++ b/tests/examples_methods_syntax/gapminder_bubble_plot.py
@@ -0,0 +1,18 @@
+"""
+Gapminder Bubble Plot
+=====================
+This example shows how to make a bubble plot showing the correlation between
+health and income for 187 countries in the world (modified from an example
+in Lisa Charlotte Rost's blog post `'One Chart, Twelve Charting Libraries' <http://lisacharlotterost.github.io/2016/05/17/one-chart-code/>`_.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.gapminder_health_income.url
+
+alt.Chart(source).mark_circle().encode(
+    alt.X('income:Q').scale(type='log'),
+    alt.Y('health:Q').scale(zero=False),
+    size='population:Q'
+)
diff --git a/tests/examples_methods_syntax/groupby-map.py b/tests/examples_methods_syntax/groupby-map.py
new file mode 100644
index 0000000..20f0817
--- /dev/null
+++ b/tests/examples_methods_syntax/groupby-map.py
@@ -0,0 +1,36 @@
+"""
+Grouped Points with Proportional Symbols Map
+============================================
+This is a layered geographic visualization that groups points by state.
+"""
+# category: maps
+import altair as alt
+from vega_datasets import data
+
+airports = data.airports.url
+states = alt.topo_feature(data.us_10m.url, feature='states')
+
+# US states background
+background = alt.Chart(states).mark_geoshape(
+    fill='lightgray',
+    stroke='white'
+).properties(
+    width=500,
+    height=300
+).project('albersUsa')
+
+# Airports grouped by state
+points = alt.Chart(airports, title='Number of airports in US').transform_aggregate( 
+    latitude='mean(latitude)',
+    longitude='mean(longitude)',
+    count='count()',
+    groupby=['state']
+).mark_circle().encode(
+    longitude='longitude:Q',
+    latitude='latitude:Q',
+    size=alt.Size('count:Q').title('Number of Airports'),
+    color=alt.value('steelblue'),
+    tooltip=['state:N','count:Q']
+)
+
+background + points
diff --git a/tests/examples_methods_syntax/grouped_bar_chart2.py b/tests/examples_methods_syntax/grouped_bar_chart2.py
new file mode 100644
index 0000000..671f83e
--- /dev/null
+++ b/tests/examples_methods_syntax/grouped_bar_chart2.py
@@ -0,0 +1,22 @@
+"""
+Grouped Bar Chart with xOffset
+------------------------------
+Like :ref:`gallery_grouped_bar_chart`, this example shows a grouped bar chart.  Whereas :ref:`gallery_grouped_bar_chart` used the ``column`` encoding channel, this example uses the ``xOffset`` encoding channel.  This is adapted from a corresponding Vega-Lite Example:
+`Grouped Bar Chart <https://vega.github.io/vega-lite/examples/bar_grouped.html>`_.
+"""
+# category: bar charts
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame({
+    "Category":list("AAABBBCCC"),
+    "Group":list("xyzxyzxyz"),
+    "Value":[0.1, 0.6, 0.9, 0.7, 0.2, 1.1, 0.6, 0.1, 0.2]
+})
+
+alt.Chart(source).mark_bar().encode(
+    x="Category:N",
+    y="Value:Q",
+    xOffset="Group:N",
+    color="Group:N"
+)
diff --git a/tests/examples_methods_syntax/grouped_bar_chart_with_error_bars.py b/tests/examples_methods_syntax/grouped_bar_chart_with_error_bars.py
new file mode 100644
index 0000000..4ef796f
--- /dev/null
+++ b/tests/examples_methods_syntax/grouped_bar_chart_with_error_bars.py
@@ -0,0 +1,25 @@
+"""
+Grouped Bar Chart with Error Bars
+---------------------------------
+This example shows a grouped bar chart with error bars.
+"""
+# category: bar charts
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+bars = alt.Chart().mark_bar().encode(
+    x='year:O',
+    y=alt.Y('mean(yield):Q').title('Mean Yield'),
+    color='year:N',
+)
+
+error_bars = alt.Chart().mark_errorbar(extent='ci').encode(
+    x='year:O',
+    y='yield:Q'
+)
+
+alt.layer(bars, error_bars, data=source).facet(
+    column='site:N'
+)
diff --git a/tests/examples_methods_syntax/heat_lane.py b/tests/examples_methods_syntax/heat_lane.py
new file mode 100644
index 0000000..63d8dd9
--- /dev/null
+++ b/tests/examples_methods_syntax/heat_lane.py
@@ -0,0 +1,44 @@
+"""
+Heat Lane Chart
+---------------
+This example shows how to make an alternative form of a histogram `designed at Google <https://www.smashingmagazine.com/2022/07/accessibility-first-approach-chart-visual-design/>`_ with the goal of increasing accessibility.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.cars.url
+
+chart = alt.Chart(source, title="Car horsepower", height=100, width=300).encode(
+    alt.X("bin_Horsepower_start:Q")
+        .title("Horsepower")
+        .axis(grid=False),
+    alt.X2("bin_Horsepower_end:Q"),
+    alt.Y("y:O").axis(None),
+    alt.Y2("y2"),
+).transform_bin(
+    ["bin_Horsepower_start", "bin_Horsepower_end"],
+    field='Horsepower'
+).transform_aggregate(
+    count='count()',
+    groupby=["bin_Horsepower_start", "bin_Horsepower_end"]
+).transform_bin(
+    ["bin_count_start", "bin_count_end"],
+    field='count'
+).transform_calculate(
+    y="datum.bin_count_end/2",
+    y2="-datum.bin_count_end/2",
+).transform_joinaggregate(
+    max_bin_count_end="max(bin_count_end)",
+)
+
+layer1 = chart.mark_bar(xOffset=1, x2Offset=-1, cornerRadius=3).encode(
+    alt.Color("max_bin_count_end:O")
+        .title("Number of models")
+        .scale(scheme="lighttealblue")
+)
+layer2 = chart.mark_bar(xOffset=1, x2Offset=-1, yOffset=-3, y2Offset=3).encode(
+    alt.Color("bin_count_end:O").title("Number of models")
+)
+
+layer1 + layer2
diff --git a/tests/examples_methods_syntax/hexbins.py b/tests/examples_methods_syntax/hexbins.py
new file mode 100644
index 0000000..26f3890
--- /dev/null
+++ b/tests/examples_methods_syntax/hexbins.py
@@ -0,0 +1,46 @@
+"""
+Hexbin Chart
+------------
+This example shows a hexbin chart.
+"""
+# category: tables
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather()
+
+# Size of the hexbins
+size = 15
+# Count of distinct x features
+xFeaturesCount = 12
+# Count of distinct y features
+yFeaturesCount = 7
+# Name of the x field
+xField = 'date'
+# Name of the y field
+yField = 'date'
+
+# the shape of a hexagon
+hexagon = "M0,-2.3094010768L2,-1.1547005384 2,1.1547005384 0,2.3094010768 -2,1.1547005384 -2,-1.1547005384Z"
+
+alt.Chart(source).mark_point(size=size**2, shape=hexagon).encode(
+    alt.X('xFeaturePos:Q')
+        .title('Month')
+        .axis(grid=False, tickOpacity=0, domainOpacity=0),
+    alt.Y('day(' + yField + '):O')
+        .title('Weekday')
+        .axis(labelPadding=20, tickOpacity=0, domainOpacity=0),
+    stroke=alt.value('black'),
+    strokeWidth=alt.value(0.2),
+    fill=alt.Color('mean(temp_max):Q').scale(scheme='darkblue'),
+    tooltip=['month(' + xField + '):O', 'day(' + yField + '):O', 'mean(temp_max):Q']
+).transform_calculate(
+    # This field is required for the hexagonal X-Offset
+    xFeaturePos='(day(datum.' + yField + ') % 2) / 2 + month(datum.' + xField + ')'
+).properties(
+    # Exact scaling factors to make the hexbins fit
+    width=size * xFeaturesCount * 2,
+    height=size * yFeaturesCount * 1.7320508076,  # 1.7320508076 is approx. sin(60°)*2
+).configure_view(
+    strokeWidth=0
+)
diff --git a/tests/examples_methods_syntax/histogram_heatmap.py b/tests/examples_methods_syntax/histogram_heatmap.py
new file mode 100644
index 0000000..c697d1d
--- /dev/null
+++ b/tests/examples_methods_syntax/histogram_heatmap.py
@@ -0,0 +1,16 @@
+"""
+2D Histogram Heatmap
+--------------------
+This example shows how to make a heatmap from binned quantitative data.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+alt.Chart(source).mark_rect().encode(
+    alt.X('IMDB_Rating:Q').bin(maxbins=60),
+    alt.Y('Rotten_Tomatoes_Rating:Q').bin(maxbins=40),
+    alt.Color('count():Q').scale(scheme='greenblue')
+)
diff --git a/tests/examples_methods_syntax/histogram_responsive.py b/tests/examples_methods_syntax/histogram_responsive.py
new file mode 100644
index 0000000..e8ce16c
--- /dev/null
+++ b/tests/examples_methods_syntax/histogram_responsive.py
@@ -0,0 +1,34 @@
+"""
+Histogram with Responsive Bins
+------------------------------
+This shows an example of a histogram with bins that are responsive to a
+selection domain. Click and drag on the bottom panel to see the bins
+change on the top panel.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.flights_5k.url
+
+brush = alt.selection_interval(encodings=['x'])
+
+base = alt.Chart(source).transform_calculate(
+    time="hours(datum.date) + minutes(datum.date) / 60"
+).mark_bar().encode(
+    y='count():Q'
+).properties(
+    width=600,
+    height=100
+)
+
+alt.vconcat(
+  base.encode(
+    alt.X('time:Q')
+      .bin(maxbins=30, extent=brush)
+      .scale(domain=brush)
+  ),
+  base.encode(
+    alt.X('time:Q').bin(maxbins=30),
+  ).add_params(brush)
+)
diff --git a/tests/examples_methods_syntax/histogram_scatterplot.py b/tests/examples_methods_syntax/histogram_scatterplot.py
new file mode 100644
index 0000000..6286b61
--- /dev/null
+++ b/tests/examples_methods_syntax/histogram_scatterplot.py
@@ -0,0 +1,16 @@
+"""
+2D Histogram Scatter Plot
+-------------------------
+This example shows how to make a 2d histogram scatter plot.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+alt.Chart(source).mark_circle().encode(
+    alt.X('IMDB_Rating:Q').bin(),
+    alt.Y('Rotten_Tomatoes_Rating:Q').bin(),
+    size='count()'
+)
diff --git a/tests/examples_methods_syntax/histogram_with_a_global_mean_overlay.py b/tests/examples_methods_syntax/histogram_with_a_global_mean_overlay.py
new file mode 100644
index 0000000..bcb91a2
--- /dev/null
+++ b/tests/examples_methods_syntax/histogram_with_a_global_mean_overlay.py
@@ -0,0 +1,24 @@
+"""
+Histogram with a Global Mean Overlay
+------------------------------------
+This example shows a histogram with a global mean overlay.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+base = alt.Chart(source)
+
+bar = base.mark_bar().encode(
+    alt.X('IMDB_Rating:Q').bin().axis(None),
+    y='count()'
+)
+
+rule = base.mark_rule(color='red').encode(
+    x='mean(IMDB_Rating):Q',
+    size=alt.value(5)
+)
+
+bar + rule
diff --git a/tests/examples_methods_syntax/horizon_graph.py b/tests/examples_methods_syntax/horizon_graph.py
new file mode 100644
index 0000000..d2f534a
--- /dev/null
+++ b/tests/examples_methods_syntax/horizon_graph.py
@@ -0,0 +1,41 @@
+"""
+Horizon Graph
+-------------
+This example shows how to make a Horizon Graph with 2 layers. (See https://idl.cs.washington.edu/papers/horizon/ for more details on Horizon Graphs.)
+"""
+# category: area charts
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame([
+    {"x": 1,  "y": 28}, {"x": 2,  "y": 55},
+    {"x": 3,  "y": 43}, {"x": 4,  "y": 91},
+    {"x": 5,  "y": 81}, {"x": 6,  "y": 53},
+    {"x": 7,  "y": 19}, {"x": 8,  "y": 87},
+    {"x": 9,  "y": 52}, {"x": 10, "y": 48},
+    {"x": 11, "y": 24}, {"x": 12, "y": 49},
+    {"x": 13, "y": 87}, {"x": 14, "y": 66},
+    {"x": 15, "y": 17}, {"x": 16, "y": 27},
+    {"x": 17, "y": 68}, {"x": 18, "y": 16},
+    {"x": 19, "y": 49}, {"x": 20, "y": 15}
+])
+
+area1 = alt.Chart(source).mark_area(
+    clip=True,
+    interpolate='monotone',
+    opacity=0.6
+).encode(
+    alt.X('x').scale(zero=False, nice=False),
+    alt.Y('y').scale(domain=[0, 50]).title('y'),
+).properties(
+    width=500,
+    height=75
+)
+
+area2 = area1.encode(
+    alt.Y('ny:Q').scale(domain=[0, 50])
+).transform_calculate(
+    "ny", alt.datum.y - 50
+)
+
+area1 + area2
diff --git a/tests/examples_methods_syntax/interactive_cross_highlight.py b/tests/examples_methods_syntax/interactive_cross_highlight.py
new file mode 100644
index 0000000..860a385
--- /dev/null
+++ b/tests/examples_methods_syntax/interactive_cross_highlight.py
@@ -0,0 +1,41 @@
+"""
+Interactive Chart with Cross-Highlight
+======================================
+This example shows an interactive chart where selections in one portion of
+the chart affect what is shown in other panels. Click on the bar chart to
+see a detail of the distribution in the upper panel.
+"""
+# category: interactive charts
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+pts = alt.selection_point(encodings=['x'])
+
+rect = alt.Chart(data.movies.url).mark_rect().encode(
+    alt.X('IMDB_Rating:Q').bin(),
+    alt.Y('Rotten_Tomatoes_Rating:Q').bin(),
+    alt.Color('count()').scale(scheme='greenblue').title('Total Records')
+)
+
+circ = rect.mark_point().encode(
+    alt.ColorValue('grey'),
+    alt.Size('count()').title('Records in Selection')
+).transform_filter(
+    pts
+)
+
+bar = alt.Chart(source, width=550, height=200).mark_bar().encode(
+    x='Major_Genre:N',
+    y='count()',
+    color=alt.condition(pts, alt.ColorValue("steelblue"), alt.ColorValue("grey"))
+).add_params(pts)
+
+alt.vconcat(
+    rect + circ,
+    bar
+).resolve_legend(
+    color="independent",
+    size="independent"
+)
diff --git a/tests/examples_methods_syntax/interactive_layered_crossfilter.py b/tests/examples_methods_syntax/interactive_layered_crossfilter.py
new file mode 100644
index 0000000..bc0003c
--- /dev/null
+++ b/tests/examples_methods_syntax/interactive_layered_crossfilter.py
@@ -0,0 +1,42 @@
+"""
+Interactive Crossfilter
+=======================
+This example shows a multi-panel view of the same data, where you can interactively
+select a portion of the data in any of the panels to highlight that portion in any
+of the other panels.
+"""
+# category: interactive charts
+import altair as alt
+from vega_datasets import data
+
+source = alt.UrlData(
+    data.flights_2k.url,
+    format={'parse': {'date': 'date'}}
+)
+
+brush = alt.selection_interval(encodings=['x'])
+
+# Define the base chart, with the common parts of the
+# background and highlights
+base = alt.Chart(width=160, height=130).mark_bar().encode(
+    x=alt.X(alt.repeat('column')).bin(maxbins=20),
+    y='count()'
+)
+
+# gray background with selection
+background = base.encode(
+    color=alt.value('#ddd')
+).add_params(brush)
+
+# blue highlights on the transformed data
+highlight = base.transform_filter(brush)
+
+# layer the two charts & repeat
+alt.layer(
+    background,
+    highlight,
+    data=source
+).transform_calculate(
+    "time",
+    "hours(datum.date)"
+).repeat(column=["distance", "delay", "time"])
diff --git a/tests/examples_methods_syntax/interactive_legend.py b/tests/examples_methods_syntax/interactive_legend.py
new file mode 100644
index 0000000..80c47cf
--- /dev/null
+++ b/tests/examples_methods_syntax/interactive_legend.py
@@ -0,0 +1,23 @@
+"""
+Interactive Legend
+------------------
+The following shows how to create a chart with an interactive legend, by
+binding the selection to ``"legend"``. Such a binding only works with
+``selection_point`` when projected over a single field or encoding.
+"""
+# category: interactive charts
+import altair as alt
+from vega_datasets import data
+
+source = data.unemployment_across_industries.url
+
+selection = alt.selection_point(fields=['series'], bind='legend')
+
+alt.Chart(source).mark_area().encode(
+    alt.X('yearmonth(date):T').axis(domain=False, format='%Y', tickSize=0),
+    alt.Y('sum(count):Q').stack('center').axis(None),
+    alt.Color('series:N').scale(scheme='category20b'),
+    opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
+).add_params(
+    selection
+)
diff --git a/tests/examples_methods_syntax/interval_selection.py b/tests/examples_methods_syntax/interval_selection.py
new file mode 100644
index 0000000..b77f83b
--- /dev/null
+++ b/tests/examples_methods_syntax/interval_selection.py
@@ -0,0 +1,29 @@
+"""
+Interval Selection
+==================
+
+This is an example of creating a stacked chart for which the domain of the
+top chart can be selected by interacting with the bottom chart.
+"""
+# category: area charts
+import altair as alt
+from vega_datasets import data
+
+source = data.sp500.url
+
+brush = alt.selection_interval(encodings=['x'])
+
+base = alt.Chart(source, width=600, height=200).mark_area().encode(
+    x = 'date:T',
+    y = 'price:Q'
+)
+
+upper = base.encode(
+    alt.X('date:T').scale(domain=brush)
+)
+
+lower = base.properties(
+    height=60
+).add_params(brush)
+
+upper & lower
diff --git a/tests/examples_methods_syntax/iowa_electricity.py b/tests/examples_methods_syntax/iowa_electricity.py
new file mode 100644
index 0000000..7f277df
--- /dev/null
+++ b/tests/examples_methods_syntax/iowa_electricity.py
@@ -0,0 +1,25 @@
+"""
+Iowa's Renewable Energy Boom
+----------------------------
+This example is a fully developed stacked chart using the sample dataset of Iowa's electricity sources.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.iowa_electricity()
+
+alt.Chart(
+    source,
+    title=alt.Title(
+        "Iowa's green energy boom",
+        subtitle="A growing share of the state's energy has come from renewable sources"
+    )
+).mark_area().encode(
+    alt.X("year:T").title("Year"),
+    alt.Y("net_generation:Q")
+        .title("Share of net generation")
+        .stack("normalize")
+        .axis(format=".0%"),
+    alt.Color("source:N").title("Electricity source")
+)
diff --git a/tests/examples_methods_syntax/isotype.py b/tests/examples_methods_syntax/isotype.py
new file mode 100644
index 0000000..92850b7
--- /dev/null
+++ b/tests/examples_methods_syntax/isotype.py
@@ -0,0 +1,81 @@
+'''
+Isotype Visualization
+=====================
+Isotype Visualization shows the distribution of animals across UK and US.
+Inspired by `Only An Ocean Between, 1943 <http://www.thomwhite.co.uk/?p=1303>`_. Population Live Stock, p.13.
+This is adapted from Vega-Lite example https://vega.github.io/editor/#/examples/vega-lite/isotype_bar_chart
+'''
+# category: advanced calculations
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame([
+      {'country': 'Great Britain', 'animal': 'cattle'},
+      {'country': 'Great Britain', 'animal': 'cattle'},
+      {'country': 'Great Britain', 'animal': 'cattle'},
+      {'country': 'Great Britain', 'animal': 'pigs'},
+      {'country': 'Great Britain', 'animal': 'pigs'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'}
+    ])
+
+domains = ['person', 'cattle', 'pigs', 'sheep']
+
+shape_scale = alt.Scale(
+    domain=domains,
+    range=[
+        'M1.7 -1.7h-0.8c0.3 -0.2 0.6 -0.5 0.6 -0.9c0 -0.6 -0.4 -1 -1 -1c-0.6 0 -1 0.4 -1 1c0 0.4 0.2 0.7 0.6 0.9h-0.8c-0.4 0 -0.7 0.3 -0.7 0.6v1.9c0 0.3 0.3 0.6 0.6 0.6h0.2c0 0 0 0.1 0 0.1v1.9c0 0.3 0.2 0.6 0.3 0.6h1.3c0.2 0 0.3 -0.3 0.3 -0.6v-1.8c0 0 0 -0.1 0 -0.1h0.2c0.3 0 0.6 -0.3 0.6 -0.6v-2c0.2 -0.3 -0.1 -0.6 -0.4 -0.6z',
+        'M4 -2c0 0 0.9 -0.7 1.1 -0.8c0.1 -0.1 -0.1 0.5 -0.3 0.7c-0.2 0.2 1.1 1.1 1.1 1.2c0 0.2 -0.2 0.8 -0.4 0.7c-0.1 0 -0.8 -0.3 -1.3 -0.2c-0.5 0.1 -1.3 1.6 -1.5 2c-0.3 0.4 -0.6 0.4 -0.6 0.4c0 0.1 0.3 1.7 0.4 1.8c0.1 0.1 -0.4 0.1 -0.5 0c0 0 -0.6 -1.9 -0.6 -1.9c-0.1 0 -0.3 -0.1 -0.3 -0.1c0 0.1 -0.5 1.4 -0.4 1.6c0.1 0.2 0.1 0.3 0.1 0.3c0 0 -0.4 0 -0.4 0c0 0 -0.2 -0.1 -0.1 -0.3c0 -0.2 0.3 -1.7 0.3 -1.7c0 0 -2.8 -0.9 -2.9 -0.8c-0.2 0.1 -0.4 0.6 -0.4 1c0 0.4 0.5 1.9 0.5 1.9l-0.5 0l-0.6 -2l0 -0.6c0 0 -1 0.8 -1 1c0 0.2 -0.2 1.3 -0.2 1.3c0 0 0.3 0.3 0.2 0.3c0 0 -0.5 0 -0.5 0c0 0 -0.2 -0.2 -0.1 -0.4c0 -0.1 0.2 -1.6 0.2 -1.6c0 0 0.5 -0.4 0.5 -0.5c0 -0.1 0 -2.7 -0.2 -2.7c-0.1 0 -0.4 2 -0.4 2c0 0 0 0.2 -0.2 0.5c-0.1 0.4 -0.2 1.1 -0.2 1.1c0 0 -0.2 -0.1 -0.2 -0.2c0 -0.1 -0.1 -0.7 0 -0.7c0.1 -0.1 0.3 -0.8 0.4 -1.4c0 -0.6 0.2 -1.3 0.4 -1.5c0.1 -0.2 0.6 -0.4 0.6 -0.4z',
+        'M1.2 -2c0 0 0.7 0 1.2 0.5c0.5 0.5 0.4 0.6 0.5 0.6c0.1 0 0.7 0 0.8 0.1c0.1 0 0.2 0.2 0.2 0.2c0 0 -0.6 0.2 -0.6 0.3c0 0.1 0.4 0.9 0.6 0.9c0.1 0 0.6 0 0.6 0.1c0 0.1 0 0.7 -0.1 0.7c-0.1 0 -1.2 0.4 -1.5 0.5c-0.3 0.1 -1.1 0.5 -1.1 0.7c-0.1 0.2 0.4 1.2 0.4 1.2l-0.4 0c0 0 -0.4 -0.8 -0.4 -0.9c0 -0.1 -0.1 -0.3 -0.1 -0.3l-0.2 0l-0.5 1.3l-0.4 0c0 0 -0.1 -0.4 0 -0.6c0.1 -0.1 0.3 -0.6 0.3 -0.7c0 0 -0.8 0 -1.5 -0.1c-0.7 -0.1 -1.2 -0.3 -1.2 -0.2c0 0.1 -0.4 0.6 -0.5 0.6c0 0 0.3 0.9 0.3 0.9l-0.4 0c0 0 -0.4 -0.5 -0.4 -0.6c0 -0.1 -0.2 -0.6 -0.2 -0.5c0 0 -0.4 0.4 -0.6 0.4c-0.2 0.1 -0.4 0.1 -0.4 0.1c0 0 -0.1 0.6 -0.1 0.6l-0.5 0l0 -1c0 0 0.5 -0.4 0.5 -0.5c0 -0.1 -0.7 -1.2 -0.6 -1.4c0.1 -0.1 0.1 -1.1 0.1 -1.1c0 0 -0.2 0.1 -0.2 0.1c0 0 0 0.9 0 1c0 0.1 -0.2 0.3 -0.3 0.3c-0.1 0 0 -0.5 0 -0.9c0 -0.4 0 -0.4 0.2 -0.6c0.2 -0.2 0.6 -0.3 0.8 -0.8c0.3 -0.5 1 -0.6 1 -0.6z',
+        'M-4.1 -0.5c0.2 0 0.2 0.2 0.5 0.2c0.3 0 0.3 -0.2 0.5 -0.2c0.2 0 0.2 0.2 0.4 0.2c0.2 0 0.2 -0.2 0.5 -0.2c0.2 0 0.2 0.2 0.4 0.2c0.2 0 0.2 -0.2 0.4 -0.2c0.1 0 0.2 0.2 0.4 0.1c0.2 0 0.2 -0.2 0.4 -0.3c0.1 0 0.1 -0.1 0.4 0c0.3 0 0.3 -0.4 0.6 -0.4c0.3 0 0.6 -0.3 0.7 -0.2c0.1 0.1 1.4 1 1.3 1.4c-0.1 0.4 -0.3 0.3 -0.4 0.3c-0.1 0 -0.5 -0.4 -0.7 -0.2c-0.3 0.2 -0.1 0.4 -0.2 0.6c-0.1 0.1 -0.2 0.2 -0.3 0.4c0 0.2 0.1 0.3 0 0.5c-0.1 0.2 -0.3 0.2 -0.3 0.5c0 0.3 -0.2 0.3 -0.3 0.6c-0.1 0.2 0 0.3 -0.1 0.5c-0.1 0.2 -0.1 0.2 -0.2 0.3c-0.1 0.1 0.3 1.1 0.3 1.1l-0.3 0c0 0 -0.3 -0.9 -0.3 -1c0 -0.1 -0.1 -0.2 -0.3 -0.2c-0.2 0 -0.3 0.1 -0.4 0.4c0 0.3 -0.2 0.8 -0.2 0.8l-0.3 0l0.3 -1c0 0 0.1 -0.6 -0.2 -0.5c-0.3 0.1 -0.2 -0.1 -0.4 -0.1c-0.2 -0.1 -0.3 0.1 -0.4 0c-0.2 -0.1 -0.3 0.1 -0.5 0c-0.2 -0.1 -0.1 0 -0.3 0.3c-0.2 0.3 -0.4 0.3 -0.4 0.3l0.2 1.1l-0.3 0l-0.2 -1.1c0 0 -0.4 -0.6 -0.5 -0.4c-0.1 0.3 -0.1 0.4 -0.3 0.4c-0.1 -0.1 -0.2 1.1 -0.2 1.1l-0.3 0l0.2 -1.1c0 0 -0.3 -0.1 -0.3 -0.5c0 -0.3 0.1 -0.5 0.1 -0.7c0.1 -0.2 -0.1 -1 -0.2 -1.1c-0.1 -0.2 -0.2 -0.8 -0.2 -0.8c0 0 -0.1 -0.5 0.4 -0.8z'
+    ]
+)
+
+color_scale = alt.Scale(
+    domain=domains,
+    range=['rgb(162,160,152)', 'rgb(194,81,64)', 'rgb(93,93,93)', 'rgb(91,131,149)']
+)
+
+alt.Chart(source).mark_point(filled=True, opacity=1, size=100).encode(
+    alt.X('x:O').axis(None),
+    alt.Y('animal:O').axis(None),
+    alt.Row('country:N').header(title=''),
+    alt.Shape('animal:N').legend(None).scale(shape_scale),
+    alt.Color('animal:N').legend(None).scale(color_scale),
+).transform_window(
+    x='rank()',
+    groupby=['country', 'animal']
+).properties(
+    width=550,
+    height=140
+)
diff --git a/tests/examples_methods_syntax/isotype_emoji.py b/tests/examples_methods_syntax/isotype_emoji.py
new file mode 100644
index 0000000..313af8e
--- /dev/null
+++ b/tests/examples_methods_syntax/isotype_emoji.py
@@ -0,0 +1,66 @@
+'''
+Isotype Visualization with Emoji
+================================
+Isotype Visualization shows the distribution of animals across UK and US, using unicode emoji
+marks rather than custom SVG paths (see https://altair-viz.github.io/gallery/isotype.html).
+This is adapted from Vega-Lite example https://vega.github.io/vega-lite/examples/isotype_bar_chart_emoji.html.
+'''
+# category:advanced calculations
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame([
+      {'country': 'Great Britain', 'animal': 'cattle'},
+      {'country': 'Great Britain', 'animal': 'cattle'},
+      {'country': 'Great Britain', 'animal': 'cattle'},
+      {'country': 'Great Britain', 'animal': 'pigs'},
+      {'country': 'Great Britain', 'animal': 'pigs'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'Great Britain', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'cattle'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'pigs'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'},
+      {'country': 'United States', 'animal': 'sheep'}
+    ])
+
+
+alt.Chart(source).mark_text(size=45, baseline='middle').encode(
+    alt.X('x:O').axis(None),
+    alt.Y('animal:O').axis(None),
+    alt.Row('country:N').title(''),
+    alt.Text('emoji:N')
+).transform_calculate(
+    emoji="{'cattle': '🐄', 'pigs': '🐖', 'sheep': '🐏'}[datum.animal]"
+).transform_window(
+    x='rank()',
+    groupby=['country', 'animal']
+).properties(
+    width=550,
+    height=140
+)
diff --git a/tests/examples_methods_syntax/isotype_grid.py b/tests/examples_methods_syntax/isotype_grid.py
new file mode 100644
index 0000000..d0a9b6d
--- /dev/null
+++ b/tests/examples_methods_syntax/isotype_grid.py
@@ -0,0 +1,38 @@
+"""
+Isotype Grid
+------------
+This example is a grid of isotype figures.
+"""
+# category: advanced calculations
+import altair as alt
+import pandas as pd
+
+data = pd.DataFrame([dict(id=i) for i in range(1, 101)])
+
+person = (
+    "M1.7 -1.7h-0.8c0.3 -0.2 0.6 -0.5 0.6 -0.9c0 -0.6 "
+    "-0.4 -1 -1 -1c-0.6 0 -1 0.4 -1 1c0 0.4 0.2 0.7 0.6 "
+    "0.9h-0.8c-0.4 0 -0.7 0.3 -0.7 0.6v1.9c0 0.3 0.3 0.6 "
+    "0.6 0.6h0.2c0 0 0 0.1 0 0.1v1.9c0 0.3 0.2 0.6 0.3 "
+    "0.6h1.3c0.2 0 0.3 -0.3 0.3 -0.6v-1.8c0 0 0 -0.1 0 "
+    "-0.1h0.2c0.3 0 0.6 -0.3 0.6 -0.6v-2c0.2 -0.3 -0.1 "
+    "-0.6 -0.4 -0.6z"
+)
+
+alt.Chart(data).transform_calculate(
+    row="ceil(datum.id/10)"
+).transform_calculate(
+    col="datum.id - datum.row*10"
+).mark_point(
+    filled=True,
+    size=50
+).encode(
+    alt.X("col:O").axis(None),
+    alt.Y("row:O").axis(None),
+    alt.ShapeValue(person)
+).properties(
+    width=400,
+    height=400
+).configure_view(
+    strokeWidth=0
+)
diff --git a/tests/examples_methods_syntax/lasagna_plot.py b/tests/examples_methods_syntax/lasagna_plot.py
new file mode 100644
index 0000000..0da7c44
--- /dev/null
+++ b/tests/examples_methods_syntax/lasagna_plot.py
@@ -0,0 +1,31 @@
+"""
+Lasagna Plot (Dense Time-Series Heatmap)
+----------------------------------------
+"""
+# category: tables
+import altair as alt
+from vega_datasets import data
+
+source = data.stocks()
+
+color_condition = alt.condition(
+    "month(datum.value) == 1 && date(datum.value) == 1",
+    alt.value("black"),
+    alt.value(None),
+)
+
+alt.Chart(source, width=300, height=100).transform_filter(
+    alt.datum.symbol != "GOOG"
+).mark_rect().encode(
+    alt.X("yearmonthdate(date):O")
+        .title("Time")
+        .axis(
+            format="%Y",
+            labelAngle=0,
+            labelOverlap=False,
+            labelColor=color_condition,
+            tickColor=color_condition,
+        ),
+    alt.Y("symbol:N").title(None),
+    alt.Color("sum(price)").title("Price")
+)
diff --git a/tests/examples_methods_syntax/layered_area_chart.py b/tests/examples_methods_syntax/layered_area_chart.py
new file mode 100644
index 0000000..83eb51b
--- /dev/null
+++ b/tests/examples_methods_syntax/layered_area_chart.py
@@ -0,0 +1,16 @@
+"""
+Layered Area Chart
+------------------
+This example shows a layered area chart.
+"""
+# category: area charts
+import altair as alt
+from vega_datasets import data
+
+source = data.iowa_electricity()
+
+alt.Chart(source).mark_area(opacity=0.3).encode(
+    x="year:T",
+    y=alt.Y("net_generation:Q").stack(None),
+    color="source:N"
+)
diff --git a/tests/examples_methods_syntax/layered_bar_chart.py b/tests/examples_methods_syntax/layered_bar_chart.py
new file mode 100644
index 0000000..ba485fe
--- /dev/null
+++ b/tests/examples_methods_syntax/layered_bar_chart.py
@@ -0,0 +1,16 @@
+"""
+Layered Bar Chart
+-----------------
+This example shows a segmented bar chart that is layered rather than stacked.  
+"""
+# category: bar charts
+import altair as alt
+from vega_datasets import data
+
+source = data.iowa_electricity()
+
+alt.Chart(source).mark_bar(opacity=0.7).encode(
+    x='year:O',
+    y=alt.Y('net_generation:Q').stack(None),
+    color="source",
+)
diff --git a/tests/examples_methods_syntax/layered_chart_with_dual_axis.py b/tests/examples_methods_syntax/layered_chart_with_dual_axis.py
new file mode 100644
index 0000000..d14fbca
--- /dev/null
+++ b/tests/examples_methods_syntax/layered_chart_with_dual_axis.py
@@ -0,0 +1,28 @@
+"""
+Layered chart with Dual-Axis
+----------------------------
+This example shows how to create a second independent y axis.
+"""
+# category: advanced calculations
+
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather()
+
+base = alt.Chart(source).encode(
+    alt.X('month(date):T').axis(title=None)
+)
+
+area = base.mark_area(opacity=0.3, color='#57A44C').encode(
+    alt.Y('average(temp_max)').title('Avg. Temperature (°C)', titleColor='#57A44C'),
+    alt.Y2('average(temp_min)')
+)
+
+line = base.mark_line(stroke='#5276A7', interpolate='monotone').encode(
+    alt.Y('average(precipitation)').title('Precipitation (inches)', titleColor='#5276A7')
+)
+
+alt.layer(area, line).resolve_scale(
+    y='independent'
+)
diff --git a/tests/examples_methods_syntax/layered_heatmap_text.py b/tests/examples_methods_syntax/layered_heatmap_text.py
new file mode 100644
index 0000000..7a61c08
--- /dev/null
+++ b/tests/examples_methods_syntax/layered_heatmap_text.py
@@ -0,0 +1,41 @@
+"""
+Text over a Heatmap
+-------------------
+
+An example of a layered chart of text over a heatmap using the cars dataset.
+"""
+# category: tables
+import altair as alt
+from vega_datasets import data
+
+source = data.cars()
+
+# Configure common options. We specify the aggregation
+# as a transform here so we can reuse it in both layers.
+base = alt.Chart(source).transform_aggregate(
+    mean_horsepower='mean(Horsepower)',
+    groupby=['Origin', 'Cylinders']
+).encode(
+    alt.X('Cylinders:O'),
+    alt.Y('Origin:O'),
+)
+
+# Configure heatmap
+heatmap = base.mark_rect().encode(
+    alt.Color('mean_horsepower:Q')
+        .scale(scheme='viridis')
+        .title("Mean of Horsepower")
+)
+
+# Configure text
+text = base.mark_text(baseline='middle').encode(
+    alt.Text('mean_horsepower:Q', format=".0f"),
+    color=alt.condition(
+        alt.datum.mean_horsepower > 150,
+        alt.value('black'),
+        alt.value('white')
+    )
+)
+
+# Draw the chart
+heatmap + text
diff --git a/tests/examples_methods_syntax/layered_histogram.py b/tests/examples_methods_syntax/layered_histogram.py
new file mode 100644
index 0000000..62c7dcc
--- /dev/null
+++ b/tests/examples_methods_syntax/layered_histogram.py
@@ -0,0 +1,29 @@
+"""
+Layered Histogram
+=================
+This example shows how to use opacity to make a layered histogram in Altair.
+"""
+# category: distributions
+import pandas as pd
+import altair as alt
+import numpy as np
+np.random.seed(42)
+
+# Generating Data
+source = pd.DataFrame({
+    'Trial A': np.random.normal(0, 0.8, 1000),
+    'Trial B': np.random.normal(-2, 1, 1000),
+    'Trial C': np.random.normal(3, 2, 1000)
+})
+
+alt.Chart(source).transform_fold(
+    ['Trial A', 'Trial B', 'Trial C'],
+    as_=['Experiment', 'Measurement']
+).mark_bar(
+    opacity=0.3,
+    binSpacing=0
+).encode(
+    alt.X('Measurement:Q').bin(maxbins=100),
+    alt.Y('count()').stack(None),
+    alt.Color('Experiment:N')
+)
diff --git a/tests/examples_methods_syntax/line_chart_with_color_datum.py b/tests/examples_methods_syntax/line_chart_with_color_datum.py
new file mode 100644
index 0000000..77cad95
--- /dev/null
+++ b/tests/examples_methods_syntax/line_chart_with_color_datum.py
@@ -0,0 +1,23 @@
+"""
+Line Chart with Datum for Color
+-------------------------------
+An example of using ``repeat`` inside ``datum`` to color a multi-series line chart.
+This is adapted from this corresponding Vega-Lite Example:
+`Repeat and Layer to Show Different Movie Measures <https://vega.github.io/vega-lite/examples/repeat_layer.html>`_.
+"""
+# category: line charts
+
+import altair as alt
+from vega_datasets import data
+
+source = data.movies()
+
+alt.Chart(source).mark_line().encode(
+    alt.X("IMDB_Rating").bin(True),
+    alt.Y(alt.repeat("layer"))
+        .aggregate("mean")
+        .title("Mean of US and Worldwide Gross"),
+    color=alt.datum(alt.repeat("layer")),
+).repeat(
+    layer=["US_Gross", "Worldwide_Gross"]
+)
diff --git a/tests/examples_methods_syntax/line_chart_with_cumsum.py b/tests/examples_methods_syntax/line_chart_with_cumsum.py
new file mode 100644
index 0000000..ef3144f
--- /dev/null
+++ b/tests/examples_methods_syntax/line_chart_with_cumsum.py
@@ -0,0 +1,24 @@
+"""
+Line Chart with Cumulative Sum
+------------------------------
+This chart creates a simple line chart from the cumulative sum of a fields.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+source = data.wheat()
+
+alt.Chart(source, width=600).mark_line().transform_window(
+    # Sort the data chronologically
+    sort=[{'field': 'year'}],
+    # Include all previous records before the current record and none after
+    # (This is the default value so you could skip it and it would still work.)
+    frame=[None, 0],
+    # What to add up as you go
+    cumulative_wheat='sum(wheat)'
+).encode(
+    x='year:O',
+    # Plot the calculated field created by the transformation
+    y='cumulative_wheat:Q'
+)
diff --git a/tests/examples_methods_syntax/line_chart_with_custom_legend.py b/tests/examples_methods_syntax/line_chart_with_custom_legend.py
new file mode 100644
index 0000000..2ee6008
--- /dev/null
+++ b/tests/examples_methods_syntax/line_chart_with_custom_legend.py
@@ -0,0 +1,40 @@
+"""
+Line Chart with Custom Legend
+-----------------------------
+This example uses the argmax aggregation function in order to create a custom
+legend for a line chart.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+
+source = data.stocks()
+
+base = alt.Chart(source).encode(
+    alt.Color("symbol").legend(None)
+).transform_filter(
+    "datum.symbol !== 'IBM'"
+).properties(
+    width=500
+)
+
+line = base.mark_line().encode(x="date", y="price")
+
+
+last_price = base.mark_circle().encode(
+    alt.X("last_date['date']:T"),
+    alt.Y("last_date['price']:Q")
+).transform_aggregate(
+    last_date="argmax(date)",
+    groupby=["symbol"]
+)
+
+company_name = last_price.mark_text(align="left", dx=4).encode(text="symbol")
+
+chart = (line + last_price + company_name).encode(
+    x=alt.X().title("date"),
+    y=alt.Y().title("price")
+)
+
+chart
diff --git a/tests/examples_methods_syntax/line_percent.py b/tests/examples_methods_syntax/line_percent.py
new file mode 100644
index 0000000..52e0470
--- /dev/null
+++ b/tests/examples_methods_syntax/line_percent.py
@@ -0,0 +1,18 @@
+"""
+Line Chart with Percent axis
+----------------------------
+This example shows how to format the tick labels of the y-axis of a chart as percentages.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+source = data.jobs.url
+
+alt.Chart(source).mark_line().encode(
+    alt.X('year:O'),
+    alt.Y('perc:Q').axis(format='%'),
+    alt.Color('sex:N')
+).transform_filter(
+    alt.datum.job == 'Welder'
+)
diff --git a/tests/examples_methods_syntax/line_with_ci.py b/tests/examples_methods_syntax/line_with_ci.py
new file mode 100644
index 0000000..744f453
--- /dev/null
+++ b/tests/examples_methods_syntax/line_with_ci.py
@@ -0,0 +1,22 @@
+"""
+Line Chart with Confidence Interval Band
+----------------------------------------
+How to make a line chart with a bootstrapped 95% confidence interval band.
+"""
+# category: uncertainties and trends
+import altair as alt
+from vega_datasets import data
+
+source = data.cars()
+
+line = alt.Chart(source).mark_line().encode(
+    x='Year',
+    y='mean(Miles_per_Gallon)'
+)
+
+band = alt.Chart(source).mark_errorband(extent='ci').encode(
+    x='Year',
+    y=alt.Y('Miles_per_Gallon').title('Miles/Gallon'),
+)
+
+band + line
diff --git a/tests/examples_methods_syntax/line_with_last_value_labeled.py b/tests/examples_methods_syntax/line_with_last_value_labeled.py
new file mode 100644
index 0000000..1bc108a
--- /dev/null
+++ b/tests/examples_methods_syntax/line_with_last_value_labeled.py
@@ -0,0 +1,40 @@
+"""
+Line Chart with Last Value Labeled
+----------------------------------
+This chart shows a line chart with a label annotating the final value 
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+# Import example data
+source = data.stocks()
+
+# Create a common chart object
+chart = alt.Chart(source).transform_filter(
+    alt.datum.symbol != "IBM"  # A reducation of the dataset to clarify our example. Not required.
+).encode(
+    alt.Color("symbol").legend(None)
+)
+
+# Draw the line
+line = chart.mark_line().encode(
+    x="date:T",
+    y="price:Q"
+)
+
+# Use the `argmax` aggregate to limit the dataset to the final value
+label = chart.encode(
+    x='max(date):T',
+    y=alt.Y('price:Q').aggregate(argmax='date'),
+    text='symbol'
+)
+
+# Create a text label
+text = label.mark_text(align='left', dx=4)
+
+# Create a circle annotation
+circle = label.mark_circle()
+
+# Draw the chart with all the layers combined
+line + circle + text
diff --git a/tests/examples_methods_syntax/line_with_log_scale.py b/tests/examples_methods_syntax/line_with_log_scale.py
new file mode 100644
index 0000000..740a670
--- /dev/null
+++ b/tests/examples_methods_syntax/line_with_log_scale.py
@@ -0,0 +1,15 @@
+"""
+Line Chart with Logarithmic Scale
+---------------------------------
+How to make a line chart on a `Logarithmic scale <https://en.wikipedia.org/wiki/Logarithmic_scale>`_.
+"""
+# category: line charts
+import altair as alt
+from vega_datasets import data
+
+source = data.population()
+
+alt.Chart(source).mark_line().encode(
+    x='year:O',
+    y=alt.Y('sum(people)').scale(type="log")
+)
diff --git a/tests/examples_methods_syntax/london_tube.py b/tests/examples_methods_syntax/london_tube.py
new file mode 100644
index 0000000..b19ef9a
--- /dev/null
+++ b/tests/examples_methods_syntax/london_tube.py
@@ -0,0 +1,51 @@
+"""
+London Tube Lines
+=================
+This example shows the London tube lines against the background of the
+borough boundaries. It is based on the vega-lite example at
+https://vega.github.io/vega-lite/examples/geo_layer_line_london.html.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+boroughs = alt.topo_feature(data.londonBoroughs.url, 'boroughs')
+tubelines = alt.topo_feature(data.londonTubeLines.url, 'line')
+centroids = data.londonCentroids.url
+
+background = alt.Chart(boroughs, width=700, height=500).mark_geoshape(
+    stroke='white',
+    strokeWidth=2
+).encode(
+    color=alt.value('#eee'),
+)
+
+labels = alt.Chart(centroids).mark_text().encode(
+    longitude='cx:Q',
+    latitude='cy:Q',
+    text='bLabel:N',
+    size=alt.value(8),
+    opacity=alt.value(0.6)
+).transform_calculate(
+    "bLabel", "indexof (datum.name,' ') > 0  ? substring(datum.name,0,indexof(datum.name, ' ')) : datum.name"
+)
+
+line_scale = alt.Scale(domain=["Bakerloo", "Central", "Circle", "District", "DLR",
+                               "Hammersmith & City", "Jubilee", "Metropolitan", "Northern",
+                               "Piccadilly", "Victoria", "Waterloo & City"],
+                       range=["rgb(137,78,36)", "rgb(220,36,30)", "rgb(255,206,0)",
+                              "rgb(1,114,41)", "rgb(0,175,173)", "rgb(215,153,175)",
+                              "rgb(106,114,120)", "rgb(114,17,84)", "rgb(0,0,0)",
+                              "rgb(0,24,168)", "rgb(0,160,226)", "rgb(106,187,170)"])
+
+lines = alt.Chart(tubelines).mark_geoshape(
+    filled=False,
+    strokeWidth=2
+).encode(
+    alt.Color('id:N')
+        .title(None)
+        .legend(orient='bottom-right', offset=0)
+        .scale(line_scale)
+)
+
+background + labels + lines
diff --git a/tests/examples_methods_syntax/mosaic_with_labels.py b/tests/examples_methods_syntax/mosaic_with_labels.py
new file mode 100644
index 0000000..d77ed05
--- /dev/null
+++ b/tests/examples_methods_syntax/mosaic_with_labels.py
@@ -0,0 +1,85 @@
+"""
+Mosaic Chart with Labels
+------------------------
+"""
+# category: tables
+
+import altair as alt
+from vega_datasets import data
+
+source = data.cars()
+
+base = (
+    alt.Chart(source)
+    .transform_aggregate(count_="count()", groupby=["Origin", "Cylinders"])
+    .transform_stack(
+        stack="count_",
+        as_=["stack_count_Origin1", "stack_count_Origin2"],
+        offset="normalize",
+        sort=[alt.SortField("Origin", "ascending")],
+        groupby=[],
+    )
+    .transform_window(
+        x="min(stack_count_Origin1)",
+        x2="max(stack_count_Origin2)",
+        rank_Cylinders="dense_rank()",
+        distinct_Cylinders="distinct(Cylinders)",
+        groupby=["Origin"],
+        frame=[None, None],
+        sort=[alt.SortField("Cylinders", "ascending")],
+    )
+    .transform_window(
+        rank_Origin="dense_rank()",
+        frame=[None, None],
+        sort=[alt.SortField("Origin", "ascending")],
+    )
+    .transform_stack(
+        stack="count_",
+        groupby=["Origin"],
+        as_=["y", "y2"],
+        offset="normalize",
+        sort=[alt.SortField("Cylinders", "ascending")],
+    )
+    .transform_calculate(
+        ny="datum.y + (datum.rank_Cylinders - 1) * datum.distinct_Cylinders * 0.01 / 3",
+        ny2="datum.y2 + (datum.rank_Cylinders - 1) * datum.distinct_Cylinders * 0.01 / 3",
+        nx="datum.x + (datum.rank_Origin - 1) * 0.01",
+        nx2="datum.x2 + (datum.rank_Origin - 1) * 0.01",
+        xc="(datum.nx+datum.nx2)/2",
+        yc="(datum.ny+datum.ny2)/2",
+    )
+)
+
+
+rect = base.mark_rect().encode(
+    x=alt.X("nx:Q").axis(None),
+    x2="nx2",
+    y="ny:Q",
+    y2="ny2",
+    color=alt.Color("Origin:N").legend(None),
+    opacity=alt.Opacity("Cylinders:Q").legend(None),
+    tooltip=["Origin:N", "Cylinders:Q"],
+)
+
+
+text = base.mark_text(baseline="middle").encode(
+    alt.X("xc:Q").axis(None),
+    alt.Y("yc:Q").title("Cylinders"),
+    text="Cylinders:N"
+)
+
+mosaic = rect + text
+
+origin_labels = base.mark_text(baseline="middle", align="center").encode(
+    alt.X("min(xc):Q").title("Origin").axis(orient="top"),
+    alt.Color("Origin").legend(None),
+    text="Origin",
+)
+
+(
+    (origin_labels & mosaic)
+    .resolve_scale(x="shared")
+    .configure_view(stroke="")
+    .configure_concat(spacing=10)
+    .configure_axis(domain=False, ticks=False, labels=False, grid=False)
+)
diff --git a/tests/examples_methods_syntax/multifeature_scatter_plot.py b/tests/examples_methods_syntax/multifeature_scatter_plot.py
new file mode 100644
index 0000000..164b647
--- /dev/null
+++ b/tests/examples_methods_syntax/multifeature_scatter_plot.py
@@ -0,0 +1,17 @@
+"""
+Multifeature Scatter Plot
+=========================
+This example shows how to make a scatter plot with multiple feature encodings.
+"""
+# category: scatter plots
+import altair as alt
+from vega_datasets import data
+
+source = data.iris()
+
+alt.Chart(source).mark_circle().encode(
+    alt.X('sepalLength').scale(zero=False),
+    alt.Y('sepalWidth').scale(zero=False, padding=1),
+    color='species',
+    size='petalWidth'
+)
diff --git a/tests/examples_methods_syntax/multiline_highlight.py b/tests/examples_methods_syntax/multiline_highlight.py
new file mode 100644
index 0000000..30c7536
--- /dev/null
+++ b/tests/examples_methods_syntax/multiline_highlight.py
@@ -0,0 +1,35 @@
+"""
+Multi-Line Highlight
+====================
+This multi-line chart uses an invisible Voronoi tessellation to handle mouseover to
+identify the nearest point and then highlight the line on which the point falls.
+It is adapted from the Vega-Lite example found at
+https://bl.ocks.org/amitkaps/fe4238e716db53930b2f1a70d3401701
+"""
+# category: interactive charts
+import altair as alt
+from vega_datasets import data
+
+source = data.stocks()
+
+highlight = alt.selection_point(on='mouseover', fields=['symbol'], nearest=True)
+
+base = alt.Chart(source).encode(
+    x='date:T',
+    y='price:Q',
+    color='symbol:N'
+)
+
+points = base.mark_circle().encode(
+    opacity=alt.value(0)
+).add_params(
+    highlight
+).properties(
+    width=600
+)
+
+lines = base.mark_line().encode(
+    size=alt.condition(~highlight, alt.value(1), alt.value(3))
+)
+
+points + lines
diff --git a/tests/examples_methods_syntax/multiline_tooltip.py b/tests/examples_methods_syntax/multiline_tooltip.py
new file mode 100644
index 0000000..d635c51
--- /dev/null
+++ b/tests/examples_methods_syntax/multiline_tooltip.py
@@ -0,0 +1,69 @@
+"""
+Multi-Line Tooltip
+==================
+This example shows how you can use selections and layers to create a
+tooltip-like behavior tied to the x position of the cursor.
+If you are looking for more standard tooltips, it is recommended to use the
+tooltip encoding channel as shown in the
+`Scatter Plot With Tooltips <https://altair-viz.github.io/gallery/scatter_tooltips.html>`_
+example.
+
+The following example employs a little trick to isolate the x-position of the
+cursor: we add some transparent points with only an x encoding (no y encoding)
+and tie a *nearest* selection to these, tied to the "x" field.
+"""
+# category: interactive charts
+import altair as alt
+import pandas as pd
+import numpy as np
+
+np.random.seed(42)
+source = pd.DataFrame(
+    np.cumsum(np.random.randn(100, 3), 0).round(2),
+    columns=['A', 'B', 'C'], index=pd.RangeIndex(100, name='x')
+)
+source = source.reset_index().melt('x', var_name='category', value_name='y')
+
+# Create a selection that chooses the nearest point & selects based on x-value
+nearest = alt.selection_point(nearest=True, on='mouseover',
+                        fields=['x'], empty=False)
+
+# The basic line
+line = alt.Chart(source).mark_line(interpolate='basis').encode(
+    x='x:Q',
+    y='y:Q',
+    color='category:N'
+)
+
+# Transparent selectors across the chart. This is what tells us
+# the x-value of the cursor
+selectors = alt.Chart(source).mark_point().encode(
+    x='x:Q',
+    opacity=alt.value(0),
+).add_params(
+    nearest
+)
+
+# Draw points on the line, and highlight based on selection
+points = line.mark_point().encode(
+    opacity=alt.condition(nearest, alt.value(1), alt.value(0))
+)
+
+# Draw text labels near the points, and highlight based on selection
+text = line.mark_text(align='left', dx=5, dy=-5).encode(
+    text=alt.condition(nearest, 'y:Q', alt.value(' '))
+)
+
+# Draw a rule at the location of the selection
+rules = alt.Chart(source).mark_rule(color='gray').encode(
+    x='x:Q',
+).transform_filter(
+    nearest
+)
+
+# Put the five layers into a chart and bind the data
+alt.layer(
+    line, selectors, points, rules, text
+).properties(
+    width=600, height=300
+)
diff --git a/tests/examples_methods_syntax/multiple_interactions.py b/tests/examples_methods_syntax/multiple_interactions.py
new file mode 100644
index 0000000..1248eca
--- /dev/null
+++ b/tests/examples_methods_syntax/multiple_interactions.py
@@ -0,0 +1,94 @@
+"""
+Multiple Interactions
+=====================
+This example shows how multiple user inputs can be layered onto a chart. The four inputs have functionality as follows:
+
+* Dropdown: Filters the movies by genre
+* Radio Buttons: Highlights certain films by Worldwide Gross
+* Mouse Drag and Scroll: Zooms the x and y scales to allow for panning.
+
+
+
+"""
+# category: interactive charts
+import altair as alt
+from vega_datasets import data
+
+movies = alt.UrlData(
+    data.movies.url,
+    format=alt.DataFormat(parse={"Release_Date":"date"})
+)
+ratings = ['G', 'NC-17', 'PG', 'PG-13', 'R']
+genres = [
+    'Action', 'Adventure', 'Black Comedy', 'Comedy',
+    'Concert/Performance', 'Documentary', 'Drama', 'Horror', 'Musical',
+    'Romantic Comedy', 'Thriller/Suspense', 'Western'
+]
+
+base = alt.Chart(movies, width=200, height=200).mark_point(filled=True).transform_calculate(
+    Rounded_IMDB_Rating = "floor(datum.IMDB_Rating)",
+    Hundred_Million_Production =  "datum.Production_Budget > 100000000.0 ? 100 : 10",
+    Release_Year = "year(datum.Release_Date)"
+).transform_filter(
+    alt.datum.IMDB_Rating > 0
+).transform_filter(
+    alt.FieldOneOfPredicate(field='MPAA_Rating', oneOf=ratings)
+).encode(
+    x=alt.X('Worldwide_Gross:Q').scale(domain=(100000,10**9), clamp=True),
+    y='IMDB_Rating:Q',
+    tooltip="Title:N"
+)
+
+# A slider filter
+year_slider = alt.binding_range(min=1969, max=2018, step=1, name="Release Year")
+slider_selection = alt.selection_point(bind=year_slider, fields=['Release_Year'])
+
+filter_year = base.add_params(
+    slider_selection
+).transform_filter(
+    slider_selection
+).properties(title="Slider Filtering")
+
+# A dropdown filter
+genre_dropdown = alt.binding_select(options=genres, name="Genre")
+genre_select = alt.selection_point(fields=['Major_Genre'], bind=genre_dropdown)
+
+filter_genres = base.add_params(
+    genre_select
+).transform_filter(
+    genre_select
+).properties(title="Dropdown Filtering")
+
+#color changing marks
+rating_radio = alt.binding_radio(options=ratings, name="Rating")
+rating_select = alt.selection_point(fields=['MPAA_Rating'], bind=rating_radio)
+
+rating_color_condition = alt.condition(
+    rating_select,
+    alt.Color('MPAA_Rating:N').legend(None),
+    alt.value('lightgray')
+)
+
+highlight_ratings = base.add_params(
+    rating_select
+).encode(
+    color=rating_color_condition
+).properties(title="Radio Button Highlighting")
+
+# Boolean selection for format changes
+input_checkbox = alt.binding_checkbox(name="Big Budget Films ")
+checkbox_selection = alt.param(bind=input_checkbox)
+
+size_checkbox_condition = alt.condition(
+    checkbox_selection,
+    alt.Size('Hundred_Million_Production:Q'),
+    alt.SizeValue(25)
+)
+
+budget_sizing = base.add_params(
+    checkbox_selection
+).encode(
+    size=size_checkbox_condition
+).properties(title="Checkbox Formatting")
+
+(filter_year | filter_genres) & (highlight_ratings | budget_sizing)
diff --git a/tests/examples_methods_syntax/natural_disasters.py b/tests/examples_methods_syntax/natural_disasters.py
new file mode 100644
index 0000000..cbc5a0d
--- /dev/null
+++ b/tests/examples_methods_syntax/natural_disasters.py
@@ -0,0 +1,52 @@
+"""
+Global Deaths from Natural Disasters
+------------------------------------
+This example shows a proportional symbols visualization of deaths from natural disasters by year and type.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.disasters.url
+
+alt.Chart(source).transform_filter(
+    alt.datum.Entity != 'All natural disasters'
+).mark_circle(
+    opacity=0.8,
+    stroke='black',
+    strokeWidth=1,
+    strokeOpacity=0.4
+).encode(
+    alt.X('Year:T')
+        .title(None)
+        .scale(domain=['1899','2018']),
+    alt.Y('Entity:N')
+        .title(None)
+        .sort(field="Deaths", op="sum", order='descending'),
+    alt.Size('Deaths:Q')
+        .scale(range=[0, 2500])
+        .title('Deaths')
+        .legend(clipHeight=30, format='s'),
+    alt.Color('Entity:N').legend(None),
+    tooltip=[
+        "Entity:N",
+        alt.Tooltip("Year:T", format='%Y'),
+        alt.Tooltip("Deaths:Q", format='~s')
+    ],
+).properties(
+    width=450,
+    height=320,
+    title=alt.Title(
+        text="Global Deaths from Natural Disasters (1900-2017)",
+        subtitle="The size of the bubble represents the total death count per year, by type of disaster",
+        anchor='start'
+    )
+).configure_axisY(
+    domain=False,
+    ticks=False,
+    offset=10
+).configure_axisX(
+    grid=False,
+).configure_view(
+    stroke=None
+)
diff --git a/tests/examples_methods_syntax/normalized_stacked_area_chart.py b/tests/examples_methods_syntax/normalized_stacked_area_chart.py
new file mode 100644
index 0000000..5973d71
--- /dev/null
+++ b/tests/examples_methods_syntax/normalized_stacked_area_chart.py
@@ -0,0 +1,16 @@
+"""
+Normalized Stacked Area Chart
+-----------------------------
+This example shows how to make a normalized stacked area chart.
+"""
+# category: area charts
+import altair as alt
+from vega_datasets import data
+
+source = data.iowa_electricity()
+
+alt.Chart(source).mark_area().encode(
+    x="year:T",
+    y=alt.Y("net_generation:Q").stack("normalize"),
+    color="source:N"
+)
diff --git a/tests/examples_methods_syntax/normalized_stacked_bar_chart.py b/tests/examples_methods_syntax/normalized_stacked_bar_chart.py
new file mode 100644
index 0000000..71e48b9
--- /dev/null
+++ b/tests/examples_methods_syntax/normalized_stacked_bar_chart.py
@@ -0,0 +1,16 @@
+"""
+Normalized Stacked Bar Chart
+----------------------------
+This is an example of a normalized stacked bar chart using data which contains crop yields over different regions and different years in the 1930s.
+"""
+# category: bar charts
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+alt.Chart(source).mark_bar().encode(
+    x=alt.X('sum(yield)').stack("normalize"),
+    y='variety',
+    color='site'
+)
diff --git a/tests/examples_methods_syntax/pacman_chart.py b/tests/examples_methods_syntax/pacman_chart.py
new file mode 100644
index 0000000..c6c6f98
--- /dev/null
+++ b/tests/examples_methods_syntax/pacman_chart.py
@@ -0,0 +1,17 @@
+"""
+Pacman Chart
+------------
+Chart made using ``mark_arc`` and constant values.
+This could also be made using 
+``alt.Chart(source).mark_arc(color = "gold", theta = (5/8)*np.pi, theta2 = (19/8)*np.pi,radius=100)``.
+"""
+# category: circular plots
+
+import numpy as np
+import altair as alt
+
+alt.Chart().mark_arc(color="gold").encode(
+    theta=alt.ThetaDatum((5 / 8) * np.pi).scale(None),
+    theta2=alt.Theta2Datum((19 / 8) * np.pi),
+    radius=alt.RadiusDatum(100).scale(None),
+)
diff --git a/tests/examples_methods_syntax/parallel_coordinates.py b/tests/examples_methods_syntax/parallel_coordinates.py
new file mode 100644
index 0000000..f5d7cbd
--- /dev/null
+++ b/tests/examples_methods_syntax/parallel_coordinates.py
@@ -0,0 +1,28 @@
+"""
+Parallel Coordinates
+--------------------
+A `Parallel Coordinates <https://en.wikipedia.org/wiki/Parallel_coordinates>`_
+chart is a chart that lets you visualize the individual data points by drawing
+a single line for each of them.
+Such a chart can be created in Altair by first transforming the data into a
+suitable representation.
+This example shows a parallel coordinates chart with the Iris dataset.
+"""
+# category: advanced calculations
+
+import altair as alt
+from vega_datasets import data
+
+source = data.iris()
+
+alt.Chart(source, width=500).transform_window(
+    index='count()'
+).transform_fold(
+    ['petalLength', 'petalWidth', 'sepalLength', 'sepalWidth']
+).mark_line().encode(
+    x='key:N',
+    y='value:Q',
+    color='species:N',
+    detail='index:N',
+    opacity=alt.value(0.5)
+)
diff --git a/tests/examples_methods_syntax/percentage_of_total.py b/tests/examples_methods_syntax/percentage_of_total.py
new file mode 100644
index 0000000..addb9fd
--- /dev/null
+++ b/tests/examples_methods_syntax/percentage_of_total.py
@@ -0,0 +1,23 @@
+"""
+Calculating Percentage of Total
+-------------------------------
+This chart demonstrates how to use a joinaggregate transform to display
+data values as a percentage of total.
+"""
+# category: bar charts
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame({
+    'Activity': ['Sleeping', 'Eating', 'TV', 'Work', 'Exercise'],
+    'Time': [8, 2, 4, 8, 2]
+})
+
+alt.Chart(source).transform_joinaggregate(
+    TotalTime='sum(Time)',
+).transform_calculate(
+    PercentOfTotal="datum.Time / datum.TotalTime"
+).mark_bar().encode(
+    alt.X('PercentOfTotal:Q').axis(format='.0%'),
+    y='Activity:N'
+)
diff --git a/tests/examples_methods_syntax/pie_chart.py b/tests/examples_methods_syntax/pie_chart.py
new file mode 100644
index 0000000..afc7515
--- /dev/null
+++ b/tests/examples_methods_syntax/pie_chart.py
@@ -0,0 +1,18 @@
+"""
+Pie Chart
+---------
+This example shows how to make a Pie Chart using ``mark_arc``.
+This is adapted from a corresponding Vega-Lite Example:
+`Pie Chart <https://vega.github.io/vega-lite/examples/arc_pie.html>`_.
+"""
+# category: circular plots
+
+import pandas as pd
+import altair as alt
+
+source = pd.DataFrame({"category": [1, 2, 3, 4, 5, 6], "value": [4, 6, 10, 3, 7, 8]})
+
+alt.Chart(source).mark_arc().encode(
+    theta="value",
+    color="category"
+)
diff --git a/tests/examples_methods_syntax/pie_chart_with_labels.py b/tests/examples_methods_syntax/pie_chart_with_labels.py
new file mode 100644
index 0000000..d828608
--- /dev/null
+++ b/tests/examples_methods_syntax/pie_chart_with_labels.py
@@ -0,0 +1,25 @@
+"""
+Pie Chart with Labels
+---------------------
+This example shows how to layer text over arc marks (``mark_arc``) to label pie charts.
+This is adapted from a corresponding Vega-Lite Example:
+`Pie Chart with Labels <https://vega.github.io/vega-lite/examples/layer_arc_label.html>`_.
+"""
+# category: circular plots
+
+import pandas as pd
+import altair as alt
+
+source = pd.DataFrame(
+    {"category": ["a", "b", "c", "d", "e", "f"], "value": [4, 6, 10, 3, 7, 8]}
+)
+
+base = alt.Chart(source).encode(
+    alt.Theta("value:Q").stack(True),
+    alt.Color("category:N").legend(None)
+)
+
+pie = base.mark_arc(outerRadius=120)
+text = base.mark_text(radius=140, size=20).encode(text="category:N")
+
+pie + text
diff --git a/tests/examples_methods_syntax/poly_fit_regression.py b/tests/examples_methods_syntax/poly_fit_regression.py
new file mode 100644
index 0000000..8842b9d
--- /dev/null
+++ b/tests/examples_methods_syntax/poly_fit_regression.py
@@ -0,0 +1,37 @@
+"""
+Polynomial Fit Plot with Regression Transform
+=============================================
+This example shows how to overlay data with multiple fitted polynomials using
+the regression transform.
+"""
+# category: uncertainties and trends
+
+import numpy as np
+import pandas as pd
+import altair as alt
+
+# Generate some random data
+rng = np.random.RandomState(1)
+x = rng.rand(40) ** 2
+y = 10 - 1.0 / (x + 0.1) + rng.randn(40)
+source = pd.DataFrame({"x": x, "y": y})
+
+# Define the degree of the polynomial fits
+degree_list = [1, 3, 5]
+
+base = alt.Chart(source).mark_circle(color="black").encode(
+    alt.X("x"),
+    alt.Y("y")
+)
+
+polynomial_fit = [
+    base.transform_regression(
+        "x", "y", method="poly", order=order, as_=["x", str(order)]
+    )
+    .mark_line()
+    .transform_fold([str(order)], as_=["degree", "y"])
+    .encode(alt.Color("degree:N"))
+    for order in degree_list
+]
+
+alt.layer(base, *polynomial_fit)
diff --git a/tests/examples_methods_syntax/pyramid.py b/tests/examples_methods_syntax/pyramid.py
new file mode 100644
index 0000000..82aa854
--- /dev/null
+++ b/tests/examples_methods_syntax/pyramid.py
@@ -0,0 +1,23 @@
+"""
+Pyramid Pie Chart
+-----------------
+Altair reproduction of http://robslink.com/SAS/democd91/pyramid_pie.htm
+"""
+# category: case studies
+import altair as alt
+import pandas as pd
+
+category = ['Sky', 'Shady side of a pyramid', 'Sunny side of a pyramid']
+color = ["#416D9D", "#674028", "#DEAC58"]
+df = pd.DataFrame({'category': category, 'value': [75, 10, 15]})
+
+alt.Chart(df, width=150, height=150).mark_arc(outerRadius=80).encode(
+    alt.Theta('value:Q').scale(range=[2.356, 8.639]),
+    alt.Color('category:N')
+        .title(None)
+        .scale(domain=category, range=color)
+        .legend(orient='none', legendX=160, legendY=50),
+    order='value:Q'
+).configure_view(
+    strokeOpacity=0
+)
diff --git a/tests/examples_methods_syntax/radial_chart.py b/tests/examples_methods_syntax/radial_chart.py
new file mode 100644
index 0000000..1f844c9
--- /dev/null
+++ b/tests/examples_methods_syntax/radial_chart.py
@@ -0,0 +1,25 @@
+"""
+Radial Chart
+------------
+This radial plot uses both angular and radial extent to convey multiple dimensions of data.
+This is adapted from a corresponding Vega-Lite Example:
+`Radial Plot <https://vega.github.io/vega-lite/examples/arc_radial.html>`_.
+"""
+# category: circular plots
+
+import pandas as pd
+import altair as alt
+
+source = pd.DataFrame({"values": [12, 23, 47, 6, 52, 19]})
+
+base = alt.Chart(source).encode(
+    alt.Theta("values:Q").stack(True),
+    alt.Radius("values").scale(type="sqrt", zero=True, rangeMin=20),
+    color="values:N",
+)
+
+c1 = base.mark_arc(innerRadius=20, stroke="#fff")
+
+c2 = base.mark_text(radiusOffset=10).encode(text="values:Q")
+
+c1 + c2
diff --git a/tests/examples_methods_syntax/ranged_dot_plot.py b/tests/examples_methods_syntax/ranged_dot_plot.py
new file mode 100644
index 0000000..340eeed
--- /dev/null
+++ b/tests/examples_methods_syntax/ranged_dot_plot.py
@@ -0,0 +1,38 @@
+"""
+Ranged Dot Plot
+---------------
+This example shows a ranged dot plot to convey changing life expectancy for the five most populous countries (between 1955 and 2000).
+"""
+# category: advanced calculations
+import altair as alt
+from vega_datasets import data
+
+source = data.countries.url
+
+chart = alt.Chart(
+    data=source
+).transform_filter(
+    filter={"field": 'country',
+            "oneOf": ["China", "India", "United States", "Indonesia", "Brazil"]}
+).transform_filter(
+    filter={'field': 'year',
+            "oneOf": [1955, 2000]}
+)
+
+line = chart.mark_line(color='#db646f').encode(
+    x='life_expect:Q',
+    y='country:N',
+    detail='country:N'
+)
+# Add points for life expectancy in 1955 & 2000
+points = chart.mark_point(
+    size=100,
+    opacity=1,
+    filled=True
+).encode(
+    x='life_expect:Q',
+    y='country:N',
+    color=alt.Color('year:O').scale(domain=[1955, 2000], range=['#e6959c', '#911a24'])
+).interactive()
+
+(line + points)
diff --git a/tests/examples_methods_syntax/ridgeline_plot.py b/tests/examples_methods_syntax/ridgeline_plot.py
new file mode 100644
index 0000000..a04d6c5
--- /dev/null
+++ b/tests/examples_methods_syntax/ridgeline_plot.py
@@ -0,0 +1,59 @@
+"""
+Ridgeline plot
+--------------
+A `Ridgeline plot <https://serialmentor.com/blog/2017/9/15/goodbye-joyplots>`_
+chart is a chart that lets you visualize distribution of a numeric value for
+several groups.
+
+Such a chart can be created in Altair by first transforming the data into a
+suitable representation.
+
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather.url
+
+step = 20
+overlap = 1
+
+alt.Chart(source, height=step).transform_timeunit(
+    Month='month(date)'
+).transform_joinaggregate(
+    mean_temp='mean(temp_max)', groupby=['Month']
+).transform_bin(
+    ['bin_max', 'bin_min'], 'temp_max'
+).transform_aggregate(
+    value='count()', groupby=['Month', 'mean_temp', 'bin_min', 'bin_max']
+).transform_impute(
+    impute='value', groupby=['Month', 'mean_temp'], key='bin_min', value=0
+).mark_area(
+    interpolate='monotone',
+    fillOpacity=0.8,
+    stroke='lightgray',
+    strokeWidth=0.5
+).encode(
+    alt.X('bin_min:Q')
+        .bin(True)
+        .title('Maximum Daily Temperature (C)'),
+    alt.Y('value:Q')
+        .axis(None)
+        .scale(range=[step, -step * overlap]),
+    alt.Fill('mean_temp:Q')
+        .legend(None)
+        .scale(domain=[30, 5], scheme='redyellowblue')
+).facet(
+    alt.Row('Month:T')
+        .title(None)
+        .header(labelAngle=0, labelAlign='right', format='%B')
+).properties(
+    title='Seattle Weather',
+    bounds='flush'
+).configure_facet(
+    spacing=0
+).configure_view(
+    stroke=None
+).configure_title(
+    anchor='end'
+)
diff --git a/tests/examples_methods_syntax/scatter_linked_table.py b/tests/examples_methods_syntax/scatter_linked_table.py
new file mode 100644
index 0000000..99979e0
--- /dev/null
+++ b/tests/examples_methods_syntax/scatter_linked_table.py
@@ -0,0 +1,55 @@
+"""
+Brushing Scatter Plot to Show Data on a Table
+---------------------------------------------
+A scatter plot of the cars dataset, with data tables for horsepower, MPG, and origin.
+The tables update to reflect the selection on the scatter plot.
+"""
+# category: scatter plots
+
+import altair as alt
+from vega_datasets import data
+
+source = data.cars()
+
+# Brush for selection
+brush = alt.selection_interval()
+
+# Scatter Plot
+points = alt.Chart(source).mark_point().encode(
+    x='Horsepower:Q',
+    y='Miles_per_Gallon:Q',
+    color=alt.condition(brush, alt.value('steelblue'), alt.value('grey'))
+).add_params(brush)
+
+# Base chart for data tables
+ranked_text = alt.Chart(source).mark_text(align='right').encode(
+    y=alt.Y('row_number:O').axis(None)
+).transform_filter(
+    brush
+).transform_window(
+    row_number='row_number()'
+).transform_filter(
+    alt.datum.row_number < 15
+)
+
+# Data Tables
+horsepower = ranked_text.encode(text='Horsepower:N').properties(
+    title=alt.Title(text='Horsepower', align='right')
+)
+mpg = ranked_text.encode(text='Miles_per_Gallon:N').properties(
+    title=alt.Title(text='MPG', align='right')
+)
+origin = ranked_text.encode(text='Origin:N').properties(
+    title=alt.Title(text='Origin', align='right')
+)
+text = alt.hconcat(horsepower, mpg, origin) # Combine data tables
+
+# Build chart
+alt.hconcat(
+    points,
+    text
+).resolve_legend(
+    color="independent"
+).configure_view(
+    stroke=None
+)
diff --git a/tests/examples_methods_syntax/scatter_marginal_hist.py b/tests/examples_methods_syntax/scatter_marginal_hist.py
new file mode 100644
index 0000000..02ddc37
--- /dev/null
+++ b/tests/examples_methods_syntax/scatter_marginal_hist.py
@@ -0,0 +1,48 @@
+"""
+Facetted Scatter Plot with Marginal Histograms
+----------------------------------------------
+This example demonstrates how to generate a facetted scatter plot,
+with marginal facetted histograms, and how to share their respective
+- x,some y-limits.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.iris()
+
+base = alt.Chart(source)
+
+xscale = alt.Scale(domain=(4.0, 8.0))
+yscale = alt.Scale(domain=(1.9, 4.55))
+
+bar_args = {'opacity': .3, 'binSpacing': 0}
+
+points = base.mark_circle().encode(
+    alt.X('sepalLength').scale(xscale),
+    alt.Y('sepalWidth').scale(yscale),
+    color='species',
+)
+
+top_hist = base.mark_bar(**bar_args).encode(
+    alt.X('sepalLength:Q')
+          # when using bins, the axis scale is set through
+          # the bin extent, so we do not specify the scale here
+          # (which would be ignored anyway)
+          .bin(maxbins=20, extent=xscale.domain)
+          .stack(None)
+          .title(''),
+    alt.Y('count()').stack(None).title(''),
+    alt.Color('species:N'),
+).properties(height=60)
+
+right_hist = base.mark_bar(**bar_args).encode(
+    alt.Y('sepalWidth:Q')
+          .bin(maxbins=20, extent=yscale.domain)
+          .stack(None)
+          .title(''),
+    alt.X('count()').stack(None).title(''),
+    alt.Color('species:N'),
+).properties(width=60)
+
+top_hist & (points | right_hist)
diff --git a/tests/examples_methods_syntax/scatter_with_layered_histogram.py b/tests/examples_methods_syntax/scatter_with_layered_histogram.py
new file mode 100644
index 0000000..995766e
--- /dev/null
+++ b/tests/examples_methods_syntax/scatter_with_layered_histogram.py
@@ -0,0 +1,61 @@
+"""
+Interactive Scatter Plot and Linked Layered Histogram
+=====================================================
+
+This example shows how to link a scatter plot and a histogram
+together such that clicking on a point in the scatter plot will
+isolate the distribution corresponding to that point, and vice versa.
+"""
+# category: interactive charts
+
+import altair as alt
+import pandas as pd
+import numpy as np
+
+# generate fake data
+source = pd.DataFrame({
+    'gender': ['M']*1000 + ['F']*1000,
+    'height':np.concatenate((
+        np.random.normal(69, 7, 1000), np.random.normal(64, 6, 1000)
+    )),
+    'weight': np.concatenate((
+        np.random.normal(195.8, 144, 1000), np.random.normal(167, 100, 1000)
+    )),
+    'age': np.concatenate((
+        np.random.normal(45, 8, 1000), np.random.normal(51, 6, 1000)
+        ))
+    })
+
+selector = alt.selection_point(fields=['gender'])
+
+color_scale = alt.Scale(domain=['M', 'F'],
+                        range=['#1FC3AA', '#8624F5'])
+
+base = alt.Chart(source).properties(
+    width=250,
+    height=250
+).add_params(selector)
+
+points = base.mark_point(filled=True, size=200).encode(
+    x=alt.X('mean(height):Q').scale(domain=[0,84]),
+    y=alt.Y('mean(weight):Q').scale(domain=[0,250]),
+    color=alt.condition(
+        selector,
+        'gender:N',
+        alt.value('lightgray'),
+        scale=color_scale),
+)
+
+hists = base.mark_bar(opacity=0.5, thickness=100).encode(
+    x=alt.X('age')
+        .bin(step=5) # step keeps bin size the same
+        .scale(domain=[0,100]),
+    y=alt.Y('count()')
+        .stack(None)
+        .scale(domain=[0,350]),
+    color=alt.Color('gender:N', scale=color_scale)
+).transform_filter(
+    selector
+)
+
+points | hists
diff --git a/tests/examples_methods_syntax/scatter_with_minimap.py b/tests/examples_methods_syntax/scatter_with_minimap.py
new file mode 100644
index 0000000..0ad0c63
--- /dev/null
+++ b/tests/examples_methods_syntax/scatter_with_minimap.py
@@ -0,0 +1,44 @@
+"""
+Scatter Plot with Minimap
+-------------------------
+This example shows how to create a miniature version of a plot
+such that creating a selection in the miniature version
+adjusts the axis limits in another, more detailed view.
+"""
+# category: scatter plots
+
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather()
+
+zoom = alt.selection_interval(encodings=["x", "y"])
+
+minimap = (
+    alt.Chart(source)
+    .mark_point()
+    .add_params(zoom)
+    .encode(
+        x="date:T",
+        y="temp_max:Q",
+        color=alt.condition(zoom, "weather", alt.value("lightgray")),
+    )
+    .properties(
+        width=200,
+        height=200,
+        title="Minimap -- click and drag to zoom in the detail view",
+    )
+)
+
+detail = (
+    alt.Chart(source)
+    .mark_point()
+    .encode(
+        alt.X("date:T").scale(domain={"param": zoom.name, "encoding": "x"}),
+        alt.Y("temp_max:Q").scale(domain={"param": zoom.name, "encoding": "y"}),
+        color="weather",
+    )
+    .properties(width=600, height=400, title="Seattle weather -- detail view")
+)
+
+detail | minimap
diff --git a/tests/examples_methods_syntax/scatter_with_rolling_mean.py b/tests/examples_methods_syntax/scatter_with_rolling_mean.py
new file mode 100644
index 0000000..914e32e
--- /dev/null
+++ b/tests/examples_methods_syntax/scatter_with_rolling_mean.py
@@ -0,0 +1,30 @@
+"""
+Scatter Plot with Rolling Mean
+------------------------------
+A scatter plot with a rolling mean overlay. In this example a 30 day window
+is used to calculate the mean of the maximum temperature around each date.
+"""
+# category: scatter plots
+
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather()
+
+line = alt.Chart(source).mark_line(
+    color='red', 
+    size=3
+).transform_window(
+    rolling_mean='mean(temp_max)',
+    frame=[-15, 15]
+).encode(
+    x='date:T',
+    y='rolling_mean:Q'
+)
+
+points = alt.Chart(source).mark_point().encode(
+    x='date:T',
+    y=alt.Y('temp_max:Q').title('Max Temp')
+)
+
+points + line
diff --git a/tests/examples_methods_syntax/seattle_weather_interactive.py b/tests/examples_methods_syntax/seattle_weather_interactive.py
new file mode 100644
index 0000000..46b7448
--- /dev/null
+++ b/tests/examples_methods_syntax/seattle_weather_interactive.py
@@ -0,0 +1,61 @@
+"""
+Seattle Weather Interactive
+===========================
+This chart provides an interactive exploration of Seattle weather over the
+course of the year. It includes a one-axis brush selection to easily
+see the distribution of weather types in a particular date range.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.seattle_weather()
+
+scale = alt.Scale(
+    domain=['sun', 'fog', 'drizzle', 'rain', 'snow'],
+    range=['#e7ba52', '#a7a7a7', '#aec7e8', '#1f77b4', '#9467bd']
+)
+color = alt.Color('weather:N', scale=scale)
+
+# We create two selections:
+# - a brush that is active on the top panel
+# - a multi-click that is active on the bottom panel
+brush = alt.selection_interval(encodings=['x'])
+click = alt.selection_point(encodings=['color'])
+
+# Top panel is scatter plot of temperature vs time
+points = alt.Chart().mark_point().encode(
+    alt.X('monthdate(date):T').title('Date'),
+    alt.Y('temp_max:Q')
+        .title('Maximum Daily Temperature (C)')
+        .scale(domain=[-5, 40]),
+    alt.Size('precipitation:Q').scale(range=[5, 200]),
+    color=alt.condition(brush, color, alt.value('lightgray')),
+).properties(
+    width=550,
+    height=300
+).add_params(
+    brush
+).transform_filter(
+    click
+)
+
+# Bottom panel is a bar chart of weather type
+bars = alt.Chart().mark_bar().encode(
+    x='count()',
+    y='weather:N',
+    color=alt.condition(click, color, alt.value('lightgray')),
+).transform_filter(
+    brush
+).properties(
+    width=550,
+).add_params(
+    click
+)
+
+alt.vconcat(
+    points,
+    bars,
+    data=source,
+    title="Seattle Weather: 2012-2015"
+)
diff --git a/tests/examples_methods_syntax/select_detail.py b/tests/examples_methods_syntax/select_detail.py
new file mode 100644
index 0000000..4dead24
--- /dev/null
+++ b/tests/examples_methods_syntax/select_detail.py
@@ -0,0 +1,65 @@
+"""
+Selection Detail
+================
+This example shows a selection that links two views of data: the left panel
+contains one point per object, and the right panel contains one line per
+object. Clicking on either the points or lines will select the corresponding
+objects in both views of the data.
+
+The challenge lies in expressing such hierarchical data in a way that Altair
+can handle. We do this by merging the data into a "long form" dataframe, and
+aggregating identical metadata for the final plot.
+"""
+# category: interactive charts
+import altair as alt
+import pandas as pd
+import numpy as np
+
+np.random.seed(0)
+
+n_objects = 20
+n_times = 50
+
+# Create one (x, y) pair of metadata per object
+locations = pd.DataFrame({
+    'id': range(n_objects),
+    'x': np.random.randn(n_objects),
+    'y': np.random.randn(n_objects)
+})
+
+# Create a 50-element time-series for each object
+timeseries = pd.DataFrame(np.random.randn(n_times, n_objects).cumsum(0),
+                          columns=locations['id'],
+                          index=pd.RangeIndex(0, n_times, name='time'))
+
+# Melt the wide-form timeseries into a long-form view
+timeseries = timeseries.reset_index().melt('time')
+
+# Merge the (x, y) metadata into the long-form view
+timeseries['id'] = timeseries['id'].astype(int)  # make merge not complain
+data = pd.merge(timeseries, locations, on='id')
+
+# Data is prepared, now make a chart
+
+selector = alt.selection_point(fields=['id'])
+
+base = alt.Chart(data).properties(
+    width=250,
+    height=250
+).add_params(selector)
+
+points = base.mark_point(filled=True, size=200).encode(
+    x='mean(x)',
+    y='mean(y)',
+    color=alt.condition(selector, 'id:O', alt.value('lightgray'), legend=None),
+)
+
+timeseries = base.mark_line().encode(
+    x='time',
+    y=alt.Y('value').scale(domain=(-15, 15)),
+    color=alt.Color('id:O').legend(None)
+).transform_filter(
+    selector
+)
+
+points | timeseries
diff --git a/tests/examples_methods_syntax/simple_scatter_with_errorbars.py b/tests/examples_methods_syntax/simple_scatter_with_errorbars.py
new file mode 100644
index 0000000..434e6ad
--- /dev/null
+++ b/tests/examples_methods_syntax/simple_scatter_with_errorbars.py
@@ -0,0 +1,43 @@
+"""
+Simple Scatter Plot with Errorbars
+----------------------------------
+A simple scatter plot of a data set with errorbars.
+"""
+# category: uncertainties and trends
+import altair as alt
+import pandas as pd
+import numpy as np
+
+# generate some data points with uncertainties
+np.random.seed(0)
+x = [1, 2, 3, 4, 5]
+y = np.random.normal(10, 0.5, size=len(x))
+yerr = 0.2
+
+# set up data frame
+source = pd.DataFrame({"x": x, "y": y, "yerr": yerr})
+
+# the base chart
+base = alt.Chart(source).transform_calculate(
+    ymin="datum.y-datum.yerr",
+    ymax="datum.y+datum.yerr"
+)
+
+# generate the points
+points = base.mark_point(
+    filled=True,
+    size=50,
+    color='black'
+).encode(
+    alt.X('x').scale(domain=(0, 6)),
+    alt.Y('y').scale(zero=False)
+)
+
+# generate the error bars
+errorbars = base.mark_errorbar().encode(
+    x="x",
+    y="ymin:Q",
+    y2="ymax:Q"
+)
+
+points + errorbars
diff --git a/tests/examples_methods_syntax/sorted_error_bars_with_ci.py b/tests/examples_methods_syntax/sorted_error_bars_with_ci.py
new file mode 100644
index 0000000..ebda26a
--- /dev/null
+++ b/tests/examples_methods_syntax/sorted_error_bars_with_ci.py
@@ -0,0 +1,33 @@
+"""
+Sorted Error Bars showing Confidence Interval
+=============================================
+This example shows how to show error bars using confidence intervals, while also sorting the y-axis based on x-axis values. 
+"""
+# category: advanced calculations
+
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+points = alt.Chart(source).mark_point(
+    filled=True,
+    color='black'
+).encode(
+    x=alt.X('mean(yield)').title('Barley Yield'),
+    y=alt.Y('variety').sort(
+        field='yield',
+        op='mean',
+        order='descending'
+    )
+).properties(
+    width=400,
+    height=250
+)
+
+error_bars = points.mark_rule().encode(
+    x='ci0(yield)',
+    x2='ci1(yield)',
+)
+
+points + error_bars
diff --git a/tests/examples_methods_syntax/stacked_bar_chart_sorted_segments.py b/tests/examples_methods_syntax/stacked_bar_chart_sorted_segments.py
new file mode 100644
index 0000000..2a189fe
--- /dev/null
+++ b/tests/examples_methods_syntax/stacked_bar_chart_sorted_segments.py
@@ -0,0 +1,21 @@
+"""
+Stacked Bar Chart with Sorted Segments
+--------------------------------------
+This is an example of a stacked-bar chart with the segments of each bar resorted.
+"""
+# category: bar charts
+import altair as alt
+from vega_datasets import data
+
+source = data.barley()
+
+alt.Chart(source).mark_bar().encode(
+    x='sum(yield)',
+    y='variety',
+    color='site',
+    order=alt.Order(
+      # Sort the segments of the bars by this field
+      'site',
+      sort='ascending'
+    )
+)
diff --git a/tests/examples_methods_syntax/stacked_bar_chart_with_text.py b/tests/examples_methods_syntax/stacked_bar_chart_with_text.py
new file mode 100644
index 0000000..f2641e4
--- /dev/null
+++ b/tests/examples_methods_syntax/stacked_bar_chart_with_text.py
@@ -0,0 +1,27 @@
+"""
+Stacked Bar Chart with Text Overlay
+===================================
+This example shows how to overlay text on a stacked bar chart. For both the
+bar and text marks, we use the ``stack`` argument in the ``x`` encoding to
+cause the values to be stacked horizontally.
+"""
+# category: bar charts
+import altair as alt
+from vega_datasets import data
+
+source=data.barley()
+
+bars = alt.Chart(source).mark_bar().encode(
+    x=alt.X('sum(yield):Q').stack('zero'),
+    y=alt.Y('variety:N'),
+    color=alt.Color('site')
+)
+
+text = alt.Chart(source).mark_text(dx=-15, dy=3, color='white').encode(
+    x=alt.X('sum(yield):Q').stack('zero'),
+    y=alt.Y('variety:N'),
+    detail='site:N',
+    text=alt.Text('sum(yield):Q', format='.1f')
+)
+
+bars + text
diff --git a/tests/examples_methods_syntax/stem_and_leaf.py b/tests/examples_methods_syntax/stem_and_leaf.py
new file mode 100644
index 0000000..9436d8e
--- /dev/null
+++ b/tests/examples_methods_syntax/stem_and_leaf.py
@@ -0,0 +1,41 @@
+"""
+Stem and Leaf Plot
+------------------
+This example shows how to make a stem and leaf plot.
+"""
+# category: advanced calculations
+import altair as alt
+import pandas as pd
+import numpy as np
+np.random.seed(42)
+
+# Generating random data
+source = pd.DataFrame({'samples': np.random.normal(50, 15, 100).astype(int).astype(str)})
+
+# Splitting stem and leaf
+source['stem'] = source['samples'].str[:-1]
+source['leaf'] = source['samples'].str[-1]
+
+source = source.sort_values(by=['stem', 'leaf'])
+
+# Determining leaf position
+source['position'] = source.groupby('stem').cumcount().add(1)
+
+# Creating stem and leaf plot
+alt.Chart(source).mark_text(
+    align='left',
+    baseline='middle',
+    dx=-5
+).encode(
+    alt.X('position:Q')
+        .title('')
+        .axis(ticks=False, labels=False, grid=False),
+    alt.Y('stem:N')
+        .title('')
+        .axis(tickSize=0),
+    text='leaf:N',
+).configure_axis(
+    labelFontSize=20
+).configure_text(
+    fontSize=20
+)
diff --git a/tests/examples_methods_syntax/streamgraph.py b/tests/examples_methods_syntax/streamgraph.py
new file mode 100644
index 0000000..b9bdcb5
--- /dev/null
+++ b/tests/examples_methods_syntax/streamgraph.py
@@ -0,0 +1,16 @@
+"""
+Streamgraph
+-----------------
+This example shows the streamgraph from vega-lite examples.
+"""
+# category: area charts
+import altair as alt
+from vega_datasets import data
+
+source = data.unemployment_across_industries.url
+
+alt.Chart(source).mark_area().encode(
+    alt.X('yearmonth(date):T').axis(format='%Y', domain=False, tickSize=0),
+    alt.Y('sum(count):Q').stack('center').axis(None),
+    alt.Color('series:N').scale(scheme='category20b')
+).interactive()
diff --git a/tests/examples_methods_syntax/strip_plot_jitter.py b/tests/examples_methods_syntax/strip_plot_jitter.py
new file mode 100644
index 0000000..edf572b
--- /dev/null
+++ b/tests/examples_methods_syntax/strip_plot_jitter.py
@@ -0,0 +1,37 @@
+"""
+Strip Plot with Jitter
+----------------------
+In this chart, we encode the ``Major_Genre`` column from the ``movies`` dataset
+in the ``y``-channel. In the default presentation of this data, it would be
+difficult to gauge the relative frequencies with which different values occur
+because there would be so much overlap. To address this, we use the ``yOffset``
+channel to incorporate a random offset (jittering). The example is shown twice,
+on the left side using normally distributed and on the right side using
+uniformally distributed jitter.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+gaussian_jitter = alt.Chart(source, title='Normally distributed jitter').mark_circle(size=8).encode(
+    y="Major_Genre:N",
+    x="IMDB_Rating:Q",
+    yOffset="jitter:Q",
+    color=alt.Color('Major_Genre:N').legend(None)
+).transform_calculate(
+    # Generate Gaussian jitter with a Box-Muller transform
+    jitter="sqrt(-2*log(random()))*cos(2*PI*random())"
+)
+
+uniform_jitter = gaussian_jitter.transform_calculate(
+    # Generate uniform jitter
+    jitter='random()'
+).encode(
+    alt.Y('Major_Genre:N').axis(None)
+).properties(
+    title='Uniformly distributed jitter'
+)
+
+(gaussian_jitter | uniform_jitter).resolve_scale(yOffset='independent')
diff --git a/tests/examples_methods_syntax/top_k_items.py b/tests/examples_methods_syntax/top_k_items.py
new file mode 100644
index 0000000..4928567
--- /dev/null
+++ b/tests/examples_methods_syntax/top_k_items.py
@@ -0,0 +1,27 @@
+"""
+Top K Items
+-----------
+This example shows how to use the window and transformation filter to display
+the Top items of a long list of items in decreasing order.
+Here we sort the top 10 highest ranking movies of IMDB.
+"""
+# category: advanced calculations
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+# Top 10 movies by IMBD rating
+alt.Chart(
+    source,
+).mark_bar().encode(
+    alt.X('Title:N').sort('-y'),
+    alt.Y('IMDB_Rating:Q'),
+    alt.Color('IMDB_Rating:Q')
+    
+).transform_window(
+    rank='rank(IMDB_Rating)',
+    sort=[alt.SortField('IMDB_Rating', order='descending')]
+).transform_filter(
+    (alt.datum.rank < 10)
+)
diff --git a/tests/examples_methods_syntax/top_k_letters.py b/tests/examples_methods_syntax/top_k_letters.py
new file mode 100644
index 0000000..ac56b02
--- /dev/null
+++ b/tests/examples_methods_syntax/top_k_letters.py
@@ -0,0 +1,40 @@
+"""
+Top K Letters
+-------------
+This example shows how to use a window transform in order to display only the
+top K categories by number of entries. In this case, we rank the characters in
+the first paragraph of Dickens' *A Tale of Two Cities* by number of occurances.
+"""
+# category: advanced calculations
+import altair as alt
+import pandas as pd
+import numpy as np
+
+# Excerpt from A Tale of Two Cities; public domain text
+text = """
+It was the best of times, it was the worst of times, it was the age of wisdom,
+it was the age of foolishness, it was the epoch of belief, it was the epoch of
+incredulity, it was the season of Light, it was the season of Darkness, it was
+the spring of hope, it was the winter of despair, we had everything before us,
+we had nothing before us, we were all going direct to Heaven, we were all going
+direct the other way - in short, the period was so far like the present period,
+that some of its noisiest authorities insisted on its being received, for good
+or for evil, in the superlative degree of comparison only.
+"""
+
+source = pd.DataFrame(
+    {'letters': np.array([c for c in text if c.isalpha()])}
+)
+
+alt.Chart(source).transform_aggregate(
+    count='count()',
+    groupby=['letters']
+).transform_window(
+    rank='rank(count)',
+    sort=[alt.SortField('count', order='descending')]
+).transform_filter(
+    alt.datum.rank < 10
+).mark_bar().encode(
+    y=alt.Y('letters:N').sort('-x'),
+    x='count:Q',
+)
diff --git a/tests/examples_methods_syntax/top_k_with_others.py b/tests/examples_methods_syntax/top_k_with_others.py
new file mode 100644
index 0000000..5a177e1
--- /dev/null
+++ b/tests/examples_methods_syntax/top_k_with_others.py
@@ -0,0 +1,29 @@
+"""
+Top-K Plot with Others
+----------------------
+This example shows how to use aggregate, window, and calculate transfromations
+to display the top-k directors by average worldwide gross while grouping the 
+remaining directors as 'All Others'.
+"""
+# category: advanced calculations
+import altair as alt
+from vega_datasets import data
+
+source = data.movies.url
+
+alt.Chart(source).mark_bar().encode(
+    alt.X("aggregate_gross:Q").aggregate("mean").title(None),
+    alt.Y("ranked_director:N")
+        .sort(op="mean", field="aggregate_gross", order="descending")
+        .title(None)
+).transform_aggregate(
+    aggregate_gross='mean(Worldwide_Gross)',
+    groupby=["Director"],
+).transform_window(
+    rank='row_number()',
+    sort=[alt.SortField("aggregate_gross", order="descending")],
+).transform_calculate(
+    ranked_director="datum.rank < 10 ? datum.Director : 'All Others'"
+).properties(
+    title="Top Directors by Average Worldwide Gross",
+)
diff --git a/tests/examples_methods_syntax/trellis_area_sort_array.py b/tests/examples_methods_syntax/trellis_area_sort_array.py
new file mode 100644
index 0000000..2dab32f
--- /dev/null
+++ b/tests/examples_methods_syntax/trellis_area_sort_array.py
@@ -0,0 +1,21 @@
+'''
+Trellis Area Sort Chart
+-----------------------
+This example shows small multiples of an area chart.
+Stock prices of four large companies
+sorted by `['MSFT', 'AAPL', 'IBM', 'AMZN']`
+'''
+# category: area charts
+import altair as alt
+from vega_datasets import data
+
+source = data.stocks()
+
+alt.Chart(source).transform_filter(
+    alt.datum.symbol != 'GOOG'
+).mark_area().encode(
+    x='date:T',
+    y='price:Q',
+    color='symbol:N',
+    row=alt.Row('symbol:N').sort(['MSFT', 'AAPL', 'IBM', 'AMZN'])
+).properties(height=50, width=400)
diff --git a/tests/examples_methods_syntax/trellis_histogram.py b/tests/examples_methods_syntax/trellis_histogram.py
new file mode 100644
index 0000000..8c45ccf
--- /dev/null
+++ b/tests/examples_methods_syntax/trellis_histogram.py
@@ -0,0 +1,17 @@
+"""
+Trellis Histogram
+-----------------
+This example shows how to make a basic trellis histogram.
+https://vega.github.io/vega-lite/examples/trellis_bar_histogram.html
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+source = data.cars()
+
+alt.Chart(source).mark_bar().encode(
+    alt.X("Horsepower:Q").bin(),
+    y='count()',
+    row='Origin'
+)
diff --git a/tests/examples_methods_syntax/us_employment.py b/tests/examples_methods_syntax/us_employment.py
new file mode 100644
index 0000000..775973a
--- /dev/null
+++ b/tests/examples_methods_syntax/us_employment.py
@@ -0,0 +1,57 @@
+"""
+The U.S. Employment Crash During the Great Recession
+----------------------------------------------------
+This example is a fully developed bar chart with negative values using the sample dataset of U.S. employment changes during the Great Recession.
+"""
+# category: case studies
+import altair as alt
+import pandas as pd
+from vega_datasets import data
+
+source = data.us_employment()
+presidents = pd.DataFrame([
+    {
+        "start": "2006-01-01",
+        "end": "2009-01-19",
+        "president": "Bush"
+    },
+    {
+        "start": "2009-01-20",
+        "end": "2015-12-31",
+        "president": "Obama"
+    }
+])
+
+bars = alt.Chart(
+    source,
+    title="The U.S. employment crash during the Great Recession"
+).mark_bar().encode(
+    alt.X("month:T").title(""),
+    alt.Y("nonfarm_change:Q").title("Change in non-farm employment (in thousands)"),
+    color=alt.condition(
+        alt.datum.nonfarm_change > 0,
+        alt.value("steelblue"),
+        alt.value("orange")
+    )
+)
+
+rule = alt.Chart(presidents).mark_rule(
+    color="black",
+    strokeWidth=2
+).encode(
+    x='end:T'
+).transform_filter(alt.datum.president == "Bush")
+
+text = alt.Chart(presidents).mark_text(
+    align='left',
+    baseline='middle',
+    dx=7,
+    dy=-135,
+    size=11
+).encode(
+    x='start:T',
+    text='president',
+    color=alt.value('#000000')
+)
+
+(bars + rule + text).properties(width=600)
diff --git a/tests/examples_methods_syntax/us_population_over_time.py b/tests/examples_methods_syntax/us_population_over_time.py
new file mode 100644
index 0000000..75c4fa0
--- /dev/null
+++ b/tests/examples_methods_syntax/us_population_over_time.py
@@ -0,0 +1,39 @@
+"""
+US Population by Age and Sex
+============================
+This chart visualizes the age distribution of the US population over time.
+It uses a slider widget that is bound to the year to visualize the age
+distribution over time.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.population.url
+
+select_year = alt.selection_point(
+    name="Year",
+    fields=["year"],
+    bind=alt.binding_range(min=1900, max=2000, step=10, name="Year"),
+    value={"year": 2000},
+)
+
+alt.Chart(source).mark_bar().encode(
+    alt.X("sex:N").title('').axis(labels=False, ticks=False),
+    alt.Y("people:Q").scale(domain=(0, 12000000)).title("Population"),
+    alt.Color("sex:N")
+        .scale(domain=("Male", "Female"), range=["steelblue", "salmon"])
+        .title("Sex"),
+    alt.Column("age:O").title("Age")
+).properties(
+    width=20,
+    title="U.S. Population by Age and Sex"
+).add_params(
+    select_year
+).transform_calculate(
+    "sex", alt.expr.if_(alt.datum.sex == 1, "Male", "Female")
+).transform_filter(
+    select_year
+).configure_facet(
+    spacing=8
+)
diff --git a/tests/examples_methods_syntax/us_population_over_time_facet.py b/tests/examples_methods_syntax/us_population_over_time_facet.py
new file mode 100644
index 0000000..6444e0d
--- /dev/null
+++ b/tests/examples_methods_syntax/us_population_over_time_facet.py
@@ -0,0 +1,21 @@
+"""
+US Population: Wrapped Facet
+============================
+This chart visualizes the age distribution of the US population over time,
+using a wrapped faceting of the data by decade.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.population.url
+
+alt.Chart(source).mark_area().encode(
+    x='age:O',
+    y=alt.Y('sum(people):Q').title('Population').axis(format='~s'),
+    facet=alt.Facet('year:O').columns(5),
+).properties(
+    title='US Age Distribution By Year',
+    width=90,
+    height=80
+)
diff --git a/tests/examples_methods_syntax/us_population_pyramid_over_time.py b/tests/examples_methods_syntax/us_population_pyramid_over_time.py
new file mode 100644
index 0000000..f741841
--- /dev/null
+++ b/tests/examples_methods_syntax/us_population_pyramid_over_time.py
@@ -0,0 +1,57 @@
+'''
+US Population Pyramid Over Time
+===============================
+A population pyramid shows the distribution of age groups within a population.
+It uses a slider widget that is bound to the year to visualize the age
+distribution over time.
+'''
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+source = data.population.url
+
+slider = alt.binding_range(min=1850, max=2000, step=10)
+select_year = alt.selection_point(name='year', fields=['year'],
+                                   bind=slider, value={'year': 2000})
+
+base = alt.Chart(source).add_params(
+    select_year
+).transform_filter(
+    select_year
+).transform_calculate(
+    gender=alt.expr.if_(alt.datum.sex == 1, 'Male', 'Female')
+).properties(
+    width=250
+)
+
+
+color_scale = alt.Scale(domain=['Male', 'Female'],
+                        range=['#1f77b4', '#e377c2'])
+
+left = base.transform_filter(
+    alt.datum.gender == 'Female'
+).encode(
+    alt.Y('age:O').axis(None),
+    alt.X('sum(people):Q')
+        .title('population')
+        .sort('descending'),
+    alt.Color('gender:N')
+        .scale(color_scale)
+        .legend(None)
+).mark_bar().properties(title='Female')
+
+middle = base.encode(
+    alt.Y('age:O').axis(None),
+    alt.Text('age:Q'),
+).mark_text().properties(width=20)
+
+right = base.transform_filter(
+    alt.datum.gender == 'Male'
+).encode(
+    alt.Y('age:O').axis(None),
+    alt.X('sum(people):Q').title('population'),
+    alt.Color('gender:N').scale(color_scale).legend(None)
+).mark_bar().properties(title='Male')
+
+alt.concat(left, middle, right, spacing=5)
diff --git a/tests/examples_methods_syntax/us_state_capitals.py b/tests/examples_methods_syntax/us_state_capitals.py
new file mode 100644
index 0000000..7169683
--- /dev/null
+++ b/tests/examples_methods_syntax/us_state_capitals.py
@@ -0,0 +1,43 @@
+"""
+U.S. State Capitals Overlayed on a Map of the U.S
+-------------------------------------------------
+This is a layered geographic visualization that shows US capitals
+overlayed on a map.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+states = alt.topo_feature(data.us_10m.url, 'states')
+capitals = data.us_state_capitals.url
+
+# US states background
+background = alt.Chart(states).mark_geoshape(
+    fill='lightgray',
+    stroke='white'
+).properties(
+    title='US State Capitols',
+    width=650,
+    height=400
+).project('albersUsa')
+
+# Points and text
+hover = alt.selection_point(on='mouseover', nearest=True,
+                      fields=['lat', 'lon'])
+
+base = alt.Chart(capitals).encode(
+    longitude='lon:Q',
+    latitude='lat:Q',
+)
+
+text = base.mark_text(dy=-5, align='right').encode( 
+    alt.Text('city:N'),
+    opacity=alt.condition(~hover, alt.value(0), alt.value(1))
+)
+
+points = base.mark_point().encode(
+    color=alt.value('black'),
+    size=alt.condition(~hover, alt.value(30), alt.value(100))
+).add_params(hover)
+
+background + points + text
diff --git a/tests/examples_methods_syntax/violin_plot.py b/tests/examples_methods_syntax/violin_plot.py
new file mode 100644
index 0000000..d09274d
--- /dev/null
+++ b/tests/examples_methods_syntax/violin_plot.py
@@ -0,0 +1,28 @@
+"""
+Violin Plot
+-----------
+This example shows how to make a Violin Plot using Altair's density transform.
+"""
+# category: distributions
+import altair as alt
+from vega_datasets import data
+
+alt.Chart(data.cars(), width=100).transform_density(
+    'Miles_per_Gallon',
+    as_=['Miles_per_Gallon', 'density'],
+    extent=[5, 50],
+    groupby=['Origin']
+).mark_area(orient='horizontal').encode(
+    alt.X('density:Q')
+        .stack('center')
+        .impute(None)
+        .title(None)
+        .axis(labels=False, values=[0], grid=False, ticks=True),
+    alt.Y('Miles_per_Gallon:Q'),
+    alt.Color('Origin:N'),
+    alt.Column('Origin:N')
+        .spacing(0)
+        .header(titleOrient='bottom', labelOrient='bottom', labelPadding=0)
+).configure_view(
+    stroke=None
+)
diff --git a/tests/examples_methods_syntax/wheat_wages.py b/tests/examples_methods_syntax/wheat_wages.py
new file mode 100644
index 0000000..8115371
--- /dev/null
+++ b/tests/examples_methods_syntax/wheat_wages.py
@@ -0,0 +1,58 @@
+"""
+Wheat and Wages
+---------------
+A recreation of William Playfair's classic chart visualizing
+the price of wheat, the wages of a mechanic, and the reigning British monarch.
+
+This is a more polished version of the simpler chart in :ref:`gallery_bar_and_line_with_dual_axis`.
+"""
+# category: case studies
+import altair as alt
+from vega_datasets import data
+
+
+base_wheat = alt.Chart(data.wheat.url).transform_calculate(
+    year_end="+datum.year + 5")
+
+base_monarchs = alt.Chart(data.monarchs.url).transform_calculate(
+    offset="((!datum.commonwealth && datum.index % 2) ? -1: 1) * 2 + 95",
+    off2="((!datum.commonwealth && datum.index % 2) ? -1: 1) + 95",
+    y="95",
+    x="+datum.start + (+datum.end - +datum.start)/2"
+)
+
+bars = base_wheat.mark_bar(**{"fill": "#aaa", "stroke": "#999"}).encode(
+    alt.X("year:Q").axis(format='d', tickCount=5),
+    alt.Y("wheat:Q").axis(zindex=1),
+    alt.X2("year_end")
+)
+
+area = base_wheat.mark_area(**{"color": "#a4cedb", "opacity": 0.7}).encode(
+    alt.X("year:Q"),
+    alt.Y("wages:Q")
+)
+
+area_line_1 = area.mark_line(**{"color": "#000", "opacity": 0.7})
+area_line_2 = area.mark_line(**{"yOffset": -2, "color": "#EE8182"})
+
+top_bars = base_monarchs.mark_bar(stroke="#000").encode(
+    alt.X("start:Q"),
+    alt.X2("end"),
+    alt.Y("y:Q"),
+    alt.Y2("offset"),
+    alt.Fill("commonwealth:N").legend(None).scale(range=["black", "white"])
+)
+
+top_text = base_monarchs.mark_text(**{"yOffset": 14, "fontSize": 9, "fontStyle": "italic"}).encode(
+    alt.X("x:Q"),
+    alt.Y("off2:Q"),
+    alt.Text("name:N")
+)
+
+(bars + area + area_line_1 + area_line_2 + top_bars + top_text).properties(
+    width=900, height=400
+).configure_axis(
+    title=None, gridColor="white", gridOpacity=0.25, domain=False
+).configure_view(
+    stroke="transparent"
+)
diff --git a/tests/examples_methods_syntax/wilkinson-dot-plot.py b/tests/examples_methods_syntax/wilkinson-dot-plot.py
new file mode 100644
index 0000000..55e3129
--- /dev/null
+++ b/tests/examples_methods_syntax/wilkinson-dot-plot.py
@@ -0,0 +1,25 @@
+"""
+Wilkinson Dot Plot
+------------------
+An example of a `Wilkinson Dot Plot <https://en.wikipedia.org/wiki/Dot_plot_(statistics)>`_
+"""
+# category: advanced calculations
+
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame(
+    {"data":[1,1,1,1,1,1,1,1,1,1,
+             2,2,2,
+             3,3,
+             4,4,4,4,4,4]
+    }
+)
+
+alt.Chart(source, height=100).mark_circle(opacity=1).transform_window(
+    id='rank()',
+    groupby=['data']
+).encode(
+    alt.X('data:O'),
+    alt.Y('id:O').axis(None).sort('descending')
+)
diff --git a/tests/examples_methods_syntax/wind_vector_map.py b/tests/examples_methods_syntax/wind_vector_map.py
new file mode 100644
index 0000000..89244fc
--- /dev/null
+++ b/tests/examples_methods_syntax/wind_vector_map.py
@@ -0,0 +1,55 @@
+"""
+Wind Vector Map
+---------------
+An example showing a vector array map showing wind speed and direction using ``wedge``
+as shape for ``mark_point`` and ``angle`` encoding for the wind direction.
+This is adapted from this corresponding Vega-Lite Example:
+`Wind Vector Map <https://vega.github.io/vega-lite/examples/point_angle_windvector.html>`_
+with an added base map.
+"""
+# category: maps
+import altair as alt
+from vega_datasets import data
+
+df_wind = data.windvectors()
+data_world = alt.topo_feature(data.world_110m.url, "countries")
+
+wedge = alt.Chart(df_wind).mark_point(shape="wedge", filled=True).encode(
+    alt.Latitude("latitude"),
+    alt.Longitude("longitude"),
+    alt.Color("dir")
+        .scale(domain=[0, 360], scheme="rainbow")
+        .legend(None),
+    alt.Angle("dir").scale(domain=[0, 360], range=[180, 540]),
+    alt.Size("speed").scale(rangeMax=500)
+).project("equalEarth")
+
+xmin, xmax, ymin, ymax = (
+    df_wind.longitude.min(),
+    df_wind.longitude.max(),
+    df_wind.latitude.min(),
+    df_wind.latitude.max(),
+)
+
+# extent as feature or featurecollection
+extent = {
+    "type": "Feature", 
+    "geometry": {"type": "Polygon", 
+                 "coordinates": [[
+                     [xmax, ymax],
+                     [xmax, ymin],
+                     [xmin, ymin],
+                     [xmin, ymax],
+                     [xmax, ymax]]]
+                },
+    "properties": {}
+}
+
+# use fit combined with clip=True
+base = (
+    alt.Chart(data_world)
+    .mark_geoshape(clip=True, fill="lightgray", stroke="black", strokeWidth=0.5)
+    .project(type="equalEarth", fit=extent)
+)
+
+base + wedge
diff --git a/tests/examples_methods_syntax/window_rank.py b/tests/examples_methods_syntax/window_rank.py
new file mode 100644
index 0000000..35796df
--- /dev/null
+++ b/tests/examples_methods_syntax/window_rank.py
@@ -0,0 +1,42 @@
+"""
+Window Rank Line Chart
+----------------------
+This example shows the Group F rankings in the 2018 World Cup after each matchday. 
+A window transformation is used to rank each after each match day, sorting by points and difference.
+"""
+# category: line charts
+import altair as alt
+import pandas as pd
+
+source = pd.DataFrame(
+    [
+        {"team": "Germany", "matchday": 1, "point": 0, "diff": -1},
+        {"team": "Germany", "matchday": 2, "point": 3, "diff": 0},
+        {"team": "Germany", "matchday": 3, "point": 3, "diff": -2},
+        {"team": "Mexico", "matchday": 1, "point": 3, "diff": 1},
+        {"team": "Mexico", "matchday": 2, "point": 6, "diff": 2},
+        {"team": "Mexico", "matchday": 3, "point": 6, "diff": -1},
+        {"team": "South Korea", "matchday": 1, "point": 0, "diff": -1},
+        {"team": "South Korea", "matchday": 2, "point": 0, "diff": -2},
+        {"team": "South Korea", "matchday": 3, "point": 3, "diff": 0},
+        {"team": "Sweden", "matchday": 1, "point": 3, "diff": 1},
+        {"team": "Sweden", "matchday": 2, "point": 3, "diff": 0},
+        {"team": "Sweden", "matchday": 3, "point": 6, "diff": 3},
+    ]
+)
+
+color_scale = alt.Scale(
+    domain=["Germany", "Mexico", "South Korea", "Sweden"],
+    range=["#000000", "#127153", "#C91A3C", "#0C71AB"],
+)
+
+alt.Chart(source).mark_line().encode(
+    x="matchday:O", y="rank:O", color=alt.Color("team:N").scale(color_scale)
+).transform_window(
+    rank="rank()",
+    sort=[
+        alt.SortField("point", order="descending"),
+        alt.SortField("diff", order="descending"),
+    ],
+    groupby=["matchday"],
+).properties(title="World Cup 2018: Group F Rankings")
diff --git a/altair/sphinxext/__init__.py b/tests/expr/__init__.py
similarity index 100%
rename from altair/sphinxext/__init__.py
rename to tests/expr/__init__.py
diff --git a/altair/expr/tests/test_expr.py b/tests/expr/test_expr.py
similarity index 76%
rename from altair/expr/tests/test_expr.py
rename to tests/expr/test_expr.py
index 1926540..a5b6870 100644
--- a/altair/expr/tests/test_expr.py
+++ b/tests/expr/test_expr.py
@@ -2,8 +2,10 @@ import operator
 
 import pytest
 
-from ... import expr
-from .. import datum
+from altair import expr
+from altair import datum
+from altair import ExprRef
+from jsonschema.exceptions import ValidationError
 
 
 def test_unary_operations():
@@ -97,10 +99,35 @@ def test_datum_getattr():
     x = datum["foo"]
     assert repr(x) == "datum['foo']"
 
+    magic_attr = "__magic__"
     with pytest.raises(AttributeError):
-        datum.__magic__
+        getattr(datum, magic_attr)
 
 
 def test_expression_getitem():
     x = datum.foo[0]
     assert repr(x) == "datum.foo[0]"
+
+
+def test_expression_function_expr():
+    # test including a expr.<CONSTANT> should return an ExprRef
+    er = expr(expr.PI * 2)
+    assert isinstance(er, ExprRef)
+    assert repr(er) == "ExprRef({\n  expr: (PI * 2)\n})"
+
+
+def test_expression_function_string():
+    # expr() can only work with str
+    er = expr("2 * 2")
+    assert isinstance(er, ExprRef)
+    assert repr(er) == "ExprRef({\n  expr: '2 * 2'\n})"
+
+
+def test_expression_function_nostring():
+    # expr() can only work with str otherwise
+    # should raise a SchemaValidationError
+    with pytest.raises(ValidationError):
+        expr(2 * 2)
+
+    with pytest.raises(ValidationError):
+        expr(["foo", "bah"])
diff --git a/tests/test_examples.py b/tests/test_examples.py
new file mode 100644
index 0000000..da58080
--- /dev/null
+++ b/tests/test_examples.py
@@ -0,0 +1,108 @@
+import io
+import pkgutil
+
+import pytest
+
+import altair as alt
+from altair.utils.execeval import eval_block
+from tests import examples_arguments_syntax
+from tests import examples_methods_syntax
+
+try:
+    import altair_saver  # noqa: F401
+except ImportError:
+    altair_saver = None
+
+try:
+    import vl_convert as vlc  # noqa: F401
+except ImportError:
+    vlc = None
+
+
+def iter_examples_filenames(syntax_module):
+    for _importer, modname, ispkg in pkgutil.iter_modules(syntax_module.__path__):
+        if ispkg or modname.startswith("_"):
+            continue
+        yield modname + ".py"
+
+
+@pytest.mark.parametrize(
+    "syntax_module", [examples_arguments_syntax, examples_methods_syntax]
+)
+def test_render_examples_to_chart(syntax_module):
+    for filename in iter_examples_filenames(syntax_module):
+        source = pkgutil.get_data(syntax_module.__name__, filename)
+        chart = eval_block(source)
+
+        if chart is None:
+            raise ValueError(
+                f"Example file {filename} should define chart in its final "
+                "statement."
+            )
+
+        try:
+            assert isinstance(chart.to_dict(), dict)
+        except Exception as err:
+            raise AssertionError(
+                f"Example file {filename} raised an exception when "
+                f"converting to a dict: {err}"
+            ) from err
+
+
+@pytest.mark.parametrize(
+    "syntax_module", [examples_arguments_syntax, examples_methods_syntax]
+)
+def test_from_and_to_json_roundtrip(syntax_module):
+    """Tests if the to_json and from_json (and by extension to_dict and from_dict)
+    work for all examples in the Example Gallery.
+    """
+    for filename in iter_examples_filenames(syntax_module):
+        source = pkgutil.get_data(syntax_module.__name__, filename)
+        chart = eval_block(source)
+
+        if chart is None:
+            raise ValueError(
+                f"Example file {filename} should define chart in its final "
+                "statement."
+            )
+
+        try:
+            first_json = chart.to_json()
+            reconstructed_chart = alt.Chart.from_json(first_json)
+            # As the chart objects are not
+            # necessarily the same - they could use different objects to encode the same
+            # information - we do not test for equality of the chart objects, but rather
+            # for equality of the json strings.
+            second_json = reconstructed_chart.to_json()
+            assert first_json == second_json
+        except Exception as err:
+            raise AssertionError(
+                f"Example file {filename} raised an exception when "
+                f"doing a json conversion roundtrip: {err}"
+            ) from err
+
+
+# We do not apply the save_engine mark to this test. This mark is used in
+# the build GitHub Action workflow to select the tests which should be rerun
+# with some of the saving engines uninstalled. This would not make sense for this test
+# as here it is only interesting to run it with all saving engines installed.
+# Furthermore, the runtime of this test is rather long.
+@pytest.mark.parametrize("engine", ["vl-convert", "altair_saver"])
+@pytest.mark.parametrize(
+    "syntax_module", [examples_arguments_syntax, examples_methods_syntax]
+)
+def test_render_examples_to_png(engine, syntax_module):
+    for filename in iter_examples_filenames(syntax_module):
+        if engine == "vl-convert" and vlc is None:
+            pytest.skip("vl_convert not importable; cannot run mimebundle tests")
+        elif engine == "altair_saver":
+            if altair_saver is None:
+                pytest.skip("altair_saver not importable; cannot run png tests")
+            if "png" not in altair_saver.available_formats("vega-lite"):
+                pytest.skip("altair_saver not configured to save to png")
+
+        source = pkgutil.get_data(syntax_module.__name__, filename)
+        chart = eval_block(source)
+        out = io.BytesIO()
+        chart.save(out, format="png", engine=engine)
+        assert out.getvalue().startswith(b"\x89PNG")
diff --git a/tests/test_magics.py b/tests/test_magics.py
new file mode 100644
index 0000000..db24ff4
--- /dev/null
+++ b/tests/test_magics.py
@@ -0,0 +1,71 @@
+import json
+import pytest
+
+try:
+    from IPython import InteractiveShell
+
+    IPYTHON_AVAILABLE = True
+except ImportError:
+    IPYTHON_AVAILABLE = False
+    pass
+
+from altair.vegalite.v5 import VegaLite
+
+
+DATA_RECORDS = [
+    {"amount": 28, "category": "A"},
+    {"amount": 55, "category": "B"},
+    {"amount": 43, "category": "C"},
+    {"amount": 91, "category": "D"},
+    {"amount": 81, "category": "E"},
+    {"amount": 53, "category": "F"},
+    {"amount": 19, "category": "G"},
+    {"amount": 87, "category": "H"},
+]
+
+if IPYTHON_AVAILABLE:
+    _ipshell = InteractiveShell.instance()
+    _ipshell.run_cell("%load_ext altair")
+    _ipshell.run_cell(
+        """
+import pandas as pd
+table = pd.DataFrame.from_records({})
+the_data = table
+""".format(
+            DATA_RECORDS
+        )
+    )
+
+
+VEGALITE_SPEC = {
+    "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
+    "data": {"values": DATA_RECORDS},
+    "description": "A simple bar chart with embedded data.",
+    "encoding": {
+        "x": {"field": "category", "type": "ordinal"},
+        "y": {"field": "amount", "type": "quantitative"},
+    },
+    "mark": {"type": "bar"},
+}
+
+
+@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
+def test_vegalite_magic_data_included():
+    result = _ipshell.run_cell("%%vegalite\n" + json.dumps(VEGALITE_SPEC))
+    assert isinstance(result.result, VegaLite)
+    assert VEGALITE_SPEC == result.result.spec
+
+
+@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
+def test_vegalite_magic_json_flag():
+    result = _ipshell.run_cell("%%vegalite --json\n" + json.dumps(VEGALITE_SPEC))
+    assert isinstance(result.result, VegaLite)
+    assert VEGALITE_SPEC == result.result.spec
+
+
+@pytest.mark.skipif(not IPYTHON_AVAILABLE, reason="requires ipython")
+def test_vegalite_magic_pandas_data():
+    spec = {key: val for key, val in VEGALITE_SPEC.items() if key != "data"}
+    result = _ipshell.run_cell("%%vegalite table\n" + json.dumps(spec))
+    assert isinstance(result.result, VegaLite)
+    assert VEGALITE_SPEC == result.result.spec
diff --git a/tests/test_toplevel.py b/tests/test_toplevel.py
new file mode 100644
index 0000000..a8b0673
--- /dev/null
+++ b/tests/test_toplevel.py
@@ -0,0 +1,20 @@
+import sys
+from os.path import abspath, join, dirname
+
+import altair as alt
+
+current_dir = dirname(__file__)
+sys.path.insert(0, abspath(join(current_dir, "..")))
+from tools import update_init_file  # noqa: E402
+
+
+def test_completeness_of__all__():
+    relevant_attributes = [
+        x for x in alt.__dict__ if update_init_file._is_relevant_attribute(x)
+    ]
+    relevant_attributes.sort()
+
+    # If the assert statement fails below, there are probably either new objects
+    # in the top-level Altair namespace or some were removed.
+    # In that case, run tools/update_init_file.py to update __all__
+    assert alt.__all__ == relevant_attributes
diff --git a/altair/tests/__init__.py b/tests/utils/__init__.py
similarity index 100%
rename from altair/tests/__init__.py
rename to tests/utils/__init__.py
diff --git a/altair/utils/tests/test_core.py b/tests/utils/test_core.py
similarity index 80%
rename from altair/utils/tests/test_core.py
rename to tests/utils/test_core.py
index 752fd91..376c72a 100644
--- a/altair/utils/tests/test_core.py
+++ b/tests/utils/test_core.py
@@ -5,8 +5,8 @@ import pandas as pd
 import pytest
 
 import altair as alt
-from .. import parse_shorthand, update_nested, infer_encoding_types
-from ..core import infer_dtype
+from altair.utils.core import parse_shorthand, update_nested, infer_encoding_types
+from altair.utils.core import infer_dtype
 
 FAKE_CHANNELS_MODULE = '''
 """Fake channels module for utility tests."""
@@ -14,13 +14,13 @@ FAKE_CHANNELS_MODULE = '''
 from altair.utils import schemapi
 
 
-class FieldChannel(object):
+class FieldChannel:
     def __init__(self, shorthand, **kwargs):
         kwargs['shorthand'] = shorthand
         return super(FieldChannel, self).__init__(**kwargs)
 
 
-class ValueChannel(object):
+class ValueChannel:
     def __init__(self, value, **kwargs):
         kwargs['value'] = value
         return super(ValueChannel, self).__init__(**kwargs)
@@ -79,7 +79,7 @@ def test_parse_shorthand():
 
     # Fields alone
     check("foobar", field="foobar")
-    check("blah:(fd ", field="blah:(fd ")
+    check(r"blah\:(fd ", field=r"blah\:(fd ")
 
     # Fields with type
     check("foobar:quantitative", type="quantitative", field="foobar")
@@ -101,14 +101,14 @@ def test_parse_shorthand():
 
     # check that invalid arguments are not split-out
     check("invalid(blah)", field="invalid(blah)")
-    check("blah:invalid", field="blah:invalid")
-    check("invalid(blah):invalid", field="invalid(blah):invalid")
+    check(r"blah\:invalid", field=r"blah\:invalid")
+    check(r"invalid(blah)\:invalid", field=r"invalid(blah)\:invalid")
 
     # check parsing in presence of strange characters
     check(
-        "average(a b:(c\nd):Q",
+        r"average(a b\:(c\nd):Q",
         aggregate="average",
-        field="a b:(c\nd",
+        field=r"a b\:(c\nd",
         type="quantitative",
     )
 
@@ -226,11 +226,11 @@ def _getargs(*args, **kwargs):
 
 
 def test_infer_encoding_types(channels):
-    expected = dict(
-        x=channels.X("xval"),
-        y=channels.YValue("yval"),
-        strokeWidth=channels.StrokeWidthValue(value=4),
-    )
+    expected = {
+        "x": channels.X("xval"),
+        "y": channels.YValue("yval"),
+        "strokeWidth": channels.StrokeWidthValue(value=4),
+    }
 
     # All positional args
     args, kwds = _getargs(
@@ -249,17 +249,42 @@ def test_infer_encoding_types(channels):
     assert infer_encoding_types(args, kwds, channels) == expected
 
 
-def test_infer_encoding_types_with_condition(channels):
+def test_infer_encoding_types_with_condition():
+    channels = alt.channels
+
     args, kwds = _getargs(
-        x=alt.condition("pred1", alt.value(1), alt.value(2)),
-        y=alt.condition("pred2", alt.value(1), "yval"),
-        strokeWidth=alt.condition("pred3", "sval", alt.value(2)),
+        size=alt.condition("pred1", alt.value(1), alt.value(2)),
+        color=alt.condition("pred2", alt.value("red"), "cfield:N"),
+        opacity=alt.condition("pred3", "ofield:N", alt.value(0.2)),
     )
-    expected = dict(
-        x=channels.XValue(2, condition=channels.XValue(1, test="pred1")),
-        y=channels.Y("yval", condition=channels.YValue(1, test="pred2")),
-        strokeWidth=channels.StrokeWidthValue(
-            2, condition=channels.StrokeWidth("sval", test="pred3")
+
+    expected = {
+        "size": channels.SizeValue(
+            2,
+            condition=alt.ConditionalPredicateValueDefnumberExprRef(
+                value=1, test=alt.Predicate("pred1")
+            ),
         ),
-    )
+        "color": channels.Color(
+            "cfield:N",
+            condition=alt.ConditionalPredicateValueDefGradientstringnullExprRef(
+                value="red", test=alt.Predicate("pred2")
+            ),
+        ),
+        "opacity": channels.OpacityValue(
+            0.2,
+            condition=alt.ConditionalPredicateMarkPropFieldOrDatumDef(
+                field=alt.FieldName("ofield"),
+                test=alt.Predicate("pred3"),
+                type=alt.StandardType("nominal"),
+            ),
+        ),
+    }
     assert infer_encoding_types(args, kwds, channels) == expected
+
+
+def test_invalid_data_type():
+    with pytest.raises(
+        ValueError, match=r'"\(fd " is not one of the valid encoding data types'
+    ):
+        parse_shorthand(r"blah:(fd ")
diff --git a/altair/utils/tests/test_data.py b/tests/utils/test_data.py
similarity index 96%
rename from altair/utils/tests/test_data.py
rename to tests/utils/test_data.py
index b4b4196..0d746e7 100644
--- a/altair/utils/tests/test_data.py
+++ b/tests/utils/test_data.py
@@ -4,7 +4,14 @@ import pytest
 import pandas as pd
 from toolz import pipe
 
-from ..data import limit_rows, MaxRowsError, sample, to_values, to_json, to_csv
+from altair.utils.data import (
+    limit_rows,
+    MaxRowsError,
+    sample,
+    to_values,
+    to_json,
+    to_csv,
+)
 
 
 def _create_dataframe(N):
diff --git a/altair/utils/tests/test_deprecation.py b/tests/utils/test_deprecation.py
similarity index 100%
rename from altair/utils/tests/test_deprecation.py
rename to tests/utils/test_deprecation.py
diff --git a/altair/utils/tests/test_execeval.py b/tests/utils/test_execeval.py
similarity index 91%
rename from altair/utils/tests/test_execeval.py
rename to tests/utils/test_execeval.py
index 0cdd2cf..10ca93e 100644
--- a/altair/utils/tests/test_execeval.py
+++ b/tests/utils/test_execeval.py
@@ -1,4 +1,4 @@
-from ..execeval import eval_block
+from altair.utils.execeval import eval_block
 
 HAS_RETURN = """
 x = 4
diff --git a/altair/utils/tests/test_html.py b/tests/utils/test_html.py
similarity index 94%
rename from altair/utils/tests/test_html.py
rename to tests/utils/test_html.py
index 7e4445b..ccd4174 100644
--- a/altair/utils/tests/test_html.py
+++ b/tests/utils/test_html.py
@@ -1,13 +1,13 @@
 import pytest
 
-from ..html import spec_to_html
+from altair.utils.html import spec_to_html
 
 
 @pytest.fixture
 def spec():
     return {
         "data": {"url": "data.json"},
-        "mark": "point",
+        "mark": {"type": "point"},
         "encoding": {
             "x": {"field": "x", "type": "quantitative"},
             "y": {"field": "y", "type": "quantitative"},
diff --git a/altair/utils/tests/test_mimebundle.py b/tests/utils/test_mimebundle.py
similarity index 72%
rename from altair/utils/tests/test_mimebundle.py
rename to tests/utils/test_mimebundle.py
index c893b7c..0136092 100644
--- a/altair/utils/tests/test_mimebundle.py
+++ b/tests/utils/test_mimebundle.py
@@ -1,21 +1,23 @@
 import pytest
 
 import altair as alt
-from ..mimebundle import spec_to_mimebundle
+from altair.utils.mimebundle import spec_to_mimebundle
 
+try:
+    import altair_saver  # noqa: F401
+except ImportError:
+    altair_saver = None
 
-@pytest.fixture
-def require_altair_saver():
-    try:
-        import altair_saver  # noqa: F401
-    except ImportError:
-        pytest.skip("altair_saver not importable; cannot run saver tests")
+try:
+    import vl_convert as vlc  # noqa: F401
+except ImportError:
+    vlc = None
 
 
 @pytest.fixture
 def vegalite_spec():
     return {
-        "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+        "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
         "description": "A simple bar chart with embedded data.",
         "data": {
             "values": [
@@ -30,7 +32,7 @@ def vegalite_spec():
                 {"a": "I", "b": 52},
             ]
         },
-        "mark": "bar",
+        "mark": {"type": "bar"},
         "encoding": {
             "x": {"field": "a", "type": "ordinal"},
             "y": {"field": "b", "type": "quantitative"},
@@ -97,10 +99,18 @@ def vega_spec():
                 "name": "data_0",
                 "source": "source_0",
                 "transform": [
+                    {
+                        "as": ["b_start", "b_end"],
+                        "field": "b",
+                        "groupby": ["a"],
+                        "offset": "zero",
+                        "sort": {"field": [], "order": []},
+                        "type": "stack",
+                    },
                     {
                         "expr": 'isValid(datum["b"]) && isFinite(+datum["b"])',
                         "type": "filter",
-                    }
+                    },
                 ],
             },
         ],
@@ -115,10 +125,10 @@ def vega_spec():
                             "signal": '"a: " + (isValid(datum["a"]) ? datum["a"] : ""+datum["a"]) + "; b: " + (format(datum["b"], ""))'
                         },
                         "fill": {"value": "#4c78a8"},
-                        "width": {"band": 1, "scale": "x"},
+                        "width": {"signal": "max(0.25, bandwidth('x'))"},
                         "x": {"field": "a", "scale": "x"},
-                        "y": {"field": "b", "scale": "y"},
-                        "y2": {"scale": "y", "value": 0},
+                        "y": {"field": "b_end", "scale": "y"},
+                        "y2": {"field": "b_start", "scale": "y"},
                     }
                 },
                 "from": {"data": "data_0"},
@@ -138,7 +148,7 @@ def vega_spec():
                 "type": "band",
             },
             {
-                "domain": {"data": "data_0", "field": "b"},
+                "domain": {"data": "data_0", "fields": ["b_start", "b_end"]},
                 "name": "y",
                 "nice": True,
                 "range": [{"signal": "height"}, 0],
@@ -157,14 +167,18 @@ def vega_spec():
     }
 
 
-def test_vegalite_to_vega_mimebundle(require_altair_saver, vegalite_spec, vega_spec):
-    # temporay fix for https://github.com/vega/vega-lite/issues/7776
-    def delete_none(axes):
-        for axis in axes:
-            for key, value in list(axis.items()):
-                if value is None:
-                    del axis[key]
-        return axes
+@pytest.mark.save_engine
+@pytest.mark.parametrize("engine", ["vl-convert", "altair_saver", None])
+def test_vegalite_to_vega_mimebundle(engine, vegalite_spec, vega_spec):
+    if engine == "vl-convert" and vlc is None:
+        pytest.skip("vl_convert not importable; cannot run mimebundle tests")
+    elif engine == "altair_saver" and altair_saver is None:
+        pytest.skip("altair_saver not importable; cannot run mimebundle tests")
+    elif vlc is None and altair_saver is None:
+        pytest.skip(
+            "Neither altair_saver nor vl_convert are importable;"
+            + " cannot run mimebundle tests"
+        )
 
     bundle = spec_to_mimebundle(
         spec=vegalite_spec,
@@ -173,11 +187,9 @@ def test_vegalite_to_vega_mimebundle(require_altair_saver, vegalite_spec, vega_s
         vega_version=alt.VEGA_VERSION,
         vegalite_version=alt.VEGALITE_VERSION,
         vegaembed_version=alt.VEGAEMBED_VERSION,
+        engine=engine,
     )
 
-    bundle["application/vnd.vega.v5+json"]["axes"] = delete_none(
-        bundle["application/vnd.vega.v5+json"]["axes"]
-    )
     assert bundle == {"application/vnd.vega.v5+json": vega_spec}
 
 
@@ -188,14 +200,18 @@ def test_spec_to_vegalite_mimebundle(vegalite_spec):
         format="vega-lite",
         vegalite_version=alt.VEGALITE_VERSION,
     )
-    assert bundle == {"application/vnd.vegalite.v4+json": vegalite_spec}
+    assert bundle == {"application/vnd.vegalite.v5+json": vegalite_spec}
 
 
 def test_spec_to_vega_mimebundle(vega_spec):
-    bundle = spec_to_mimebundle(
-        spec=vega_spec, mode="vega", format="vega", vega_version=alt.VEGA_VERSION
-    )
-    assert bundle == {"application/vnd.vega.v5+json": vega_spec}
+    # ValueError: mode must be 'vega-lite'
+    with pytest.raises(ValueError):
+        spec_to_mimebundle(
+            spec=vega_spec,
+            mode="vega",
+            format="vega",
+            vega_version=alt.VEGA_VERSION,
+        )
 
 
 def test_spec_to_json_mimebundle():
diff --git a/altair/utils/tests/test_plugin_registry.py b/tests/utils/test_plugin_registry.py
similarity index 93%
rename from altair/utils/tests/test_plugin_registry.py
rename to tests/utils/test_plugin_registry.py
index cbfb62a..b776a11 100644
--- a/altair/utils/tests/test_plugin_registry.py
+++ b/tests/utils/test_plugin_registry.py
@@ -1,4 +1,4 @@
-from ..plugin_registry import PluginRegistry
+from altair.utils.plugin_registry import PluginRegistry
 from typing import Callable
 
 
@@ -26,7 +26,7 @@ def test_plugin_registry():
     assert plugins.get() is None
     assert repr(plugins) == "TypedCallableRegistry(active='', registered=[])"
 
-    plugins.register("new_plugin", lambda x: x ** 2)
+    plugins.register("new_plugin", lambda x: x**2)
     assert plugins.names() == ["new_plugin"]
     assert plugins.active == ""
     assert plugins.get() is None
@@ -46,7 +46,7 @@ def test_plugin_registry():
 def test_plugin_registry_extra_options():
     plugins = GeneralCallableRegistry()
 
-    plugins.register("metadata_plugin", lambda x, p=2: x ** p)
+    plugins.register("metadata_plugin", lambda x, p=2: x**p)
     plugins.enable("metadata_plugin")
     assert plugins.get()(3) == 9
 
@@ -86,7 +86,7 @@ def test_plugin_registry_global_settings():
 def test_plugin_registry_context():
     plugins = GeneralCallableRegistry()
 
-    plugins.register("default", lambda x, p=2: x ** p)
+    plugins.register("default", lambda x, p=2: x**p)
 
     # At first there is no plugin enabled
     assert plugins.active == ""
diff --git a/tests/utils/test_schemapi.py b/tests/utils/test_schemapi.py
new file mode 100644
index 0000000..3e7a6e1
--- /dev/null
+++ b/tests/utils/test_schemapi.py
@@ -0,0 +1,985 @@
+import copy
+import io
+import inspect
+import json
+import jsonschema
+import jsonschema.exceptions
+import pickle
+import warnings
+
+import numpy as np
+import pandas as pd
+import pytest
+from vega_datasets import data
+
+import altair as alt
+from altair import load_schema
+from altair.utils.schemapi import (
+    UndefinedType,
+    SchemaBase,
+    Undefined,
+    _FromDict,
+    SchemaValidationError,
+)
+
+_JSONSCHEMA_DRAFT = load_schema()["$schema"]
+# Make tests inherit from _TestSchema, so that when we test from_dict it won't
+# try to use SchemaBase objects defined elsewhere as wrappers.
+
+
+class _TestSchema(SchemaBase):
+    @classmethod
+    def _default_wrapper_classes(cls):
+        return _TestSchema.__subclasses__()
+
+
+class MySchema(_TestSchema):
+    _schema = {
+        "$schema": _JSONSCHEMA_DRAFT,
+        "definitions": {
+            "StringMapping": {
+                "type": "object",
+                "additionalProperties": {"type": "string"},
+            },
+            "StringArray": {"type": "array", "items": {"type": "string"}},
+        },
+        "properties": {
+            "a": {"$ref": "#/definitions/StringMapping"},
+            "a2": {"type": "object", "additionalProperties": {"type": "number"}},
+            "b": {"$ref": "#/definitions/StringArray"},
+            "b2": {"type": "array", "items": {"type": "number"}},
+            "c": {"type": ["string", "number"]},
+            "d": {
+                "anyOf": [
+                    {"$ref": "#/definitions/StringMapping"},
+                    {"$ref": "#/definitions/StringArray"},
+                ]
+            },
+            "e": {"items": [{"type": "string"}, {"type": "string"}]},
+        },
+    }
+
+
+class StringMapping(_TestSchema):
+    _schema = {"$ref": "#/definitions/StringMapping"}
+    _rootschema = MySchema._schema
+
+
+class StringArray(_TestSchema):
+    _schema = {"$ref": "#/definitions/StringArray"}
+    _rootschema = MySchema._schema
+
+
+class Derived(_TestSchema):
+    _schema = {
+        "$schema": _JSONSCHEMA_DRAFT,
+        "definitions": {
+            "Foo": {"type": "object", "properties": {"d": {"type": "string"}}},
+            "Bar": {"type": "string", "enum": ["A", "B"]},
+        },
+        "type": "object",
+        "additionalProperties": False,
+        "properties": {
+            "a": {"type": "integer"},
+            "b": {"type": "string"},
+            "c": {"$ref": "#/definitions/Foo"},
+        },
+    }
+
+
+class Foo(_TestSchema):
+    _schema = {"$ref": "#/definitions/Foo"}
+    _rootschema = Derived._schema
+
+
+class Bar(_TestSchema):
+    _schema = {"$ref": "#/definitions/Bar"}
+    _rootschema = Derived._schema
+
+
+class SimpleUnion(_TestSchema):
+    _schema = {
+        "$schema": _JSONSCHEMA_DRAFT,
+        "anyOf": [{"type": "integer"}, {"type": "string"}],
+    }
+
+
+class DefinitionUnion(_TestSchema):
+    _schema = {"anyOf": [{"$ref": "#/definitions/Foo"}, {"$ref": "#/definitions/Bar"}]}
+    _rootschema = Derived._schema
+
+
+class SimpleArray(_TestSchema):
+    _schema = {
+        "$schema": _JSONSCHEMA_DRAFT,
+        "type": "array",
+        "items": {"anyOf": [{"type": "integer"}, {"type": "string"}]},
+    }
+
+
+class InvalidProperties(_TestSchema):
+    _schema = {
+        "$schema": _JSONSCHEMA_DRAFT,
+        "type": "object",
+        "properties": {"for": {}, "as": {}, "vega-lite": {}, "$schema": {}},
+    }
+
+
+_validation_selection_schema = {
+    "properties": {
+        "e": {"type": "number", "exclusiveMinimum": 10},
+    },
+}
+
+
+class Draft4Schema(_TestSchema):
+    _schema = {
+        **_validation_selection_schema,
+        **{
+            "$schema": "http://json-schema.org/draft-04/schema#",
+        },
+    }
+
+
+class Draft6Schema(_TestSchema):
+    _schema = {
+        **_validation_selection_schema,
+        **{
+            "$schema": "http://json-schema.org/draft-06/schema#",
+        },
+    }
+
+
+def test_construct_multifaceted_schema():
+    dct = {
+        "a": {"foo": "bar"},
+        "a2": {"foo": 42},
+        "b": ["a", "b", "c"],
+        "b2": [1, 2, 3],
+        "c": 42,
+        "d": ["x", "y", "z"],
+        "e": ["a", "b"],
+    }
+
+    myschema = MySchema.from_dict(dct)
+    assert myschema.to_dict() == dct
+
+    myschema2 = MySchema(**dct)
+    assert myschema2.to_dict() == dct
+
+    assert isinstance(myschema.a, StringMapping)
+    assert isinstance(myschema.a2, dict)
+    assert isinstance(myschema.b, StringArray)
+    assert isinstance(myschema.b2, list)
+    assert isinstance(myschema.d, StringArray)
+
+
+def test_schema_cases():
+    assert Derived(a=4, b="yo").to_dict() == {"a": 4, "b": "yo"}
+    assert Derived(a=4, c={"d": "hey"}).to_dict() == {"a": 4, "c": {"d": "hey"}}
+    assert Derived(a=4, b="5", c=Foo(d="val")).to_dict() == {
+        "a": 4,
+        "b": "5",
+        "c": {"d": "val"},
+    }
+    assert Foo(d="hello", f=4).to_dict() == {"d": "hello", "f": 4}
+
+    assert Derived().to_dict() == {}
+    assert Foo().to_dict() == {}
+
+    with pytest.raises(jsonschema.ValidationError):
+        # a needs to be an integer
+        Derived(a="yo").to_dict()
+
+    with pytest.raises(jsonschema.ValidationError):
+        # Foo.d needs to be a string
+        Derived(c=Foo(4)).to_dict()
+
+    with pytest.raises(jsonschema.ValidationError):
+        # no additional properties allowed
+        Derived(foo="bar").to_dict()
+
+
+def test_round_trip():
+    D = {"a": 4, "b": "yo"}
+    assert Derived.from_dict(D).to_dict() == D
+
+    D = {"a": 4, "c": {"d": "hey"}}
+    assert Derived.from_dict(D).to_dict() == D
+
+    D = {"a": 4, "b": "5", "c": {"d": "val"}}
+    assert Derived.from_dict(D).to_dict() == D
+
+    D = {"d": "hello", "f": 4}
+    assert Foo.from_dict(D).to_dict() == D
+
+
+def test_from_dict():
+    D = {"a": 4, "b": "5", "c": {"d": "val"}}
+    obj = Derived.from_dict(D)
+    assert obj.a == 4
+    assert obj.b == "5"
+    assert isinstance(obj.c, Foo)
+
+
+def test_simple_type():
+    assert SimpleUnion(4).to_dict() == 4
+
+
+def test_simple_array():
+    assert SimpleArray([4, 5, "six"]).to_dict() == [4, 5, "six"]
+    assert SimpleArray.from_dict(list("abc")).to_dict() == list("abc")
+
+
+def test_definition_union():
+    obj = DefinitionUnion.from_dict("A")
+    assert isinstance(obj, Bar)
+    assert obj.to_dict() == "A"
+
+    obj = DefinitionUnion.from_dict("B")
+    assert isinstance(obj, Bar)
+    assert obj.to_dict() == "B"
+
+    obj = DefinitionUnion.from_dict({"d": "yo"})
+    assert isinstance(obj, Foo)
+    assert obj.to_dict() == {"d": "yo"}
+
+
+def test_invalid_properties():
+    dct = {"for": 2, "as": 3, "vega-lite": 4, "$schema": 5}
+    invalid = InvalidProperties.from_dict(dct)
+    assert invalid["for"] == 2
+    assert invalid["as"] == 3
+    assert invalid["vega-lite"] == 4
+    assert invalid["$schema"] == 5
+    assert invalid.to_dict() == dct
+
+
+def test_undefined_singleton():
+    assert Undefined is UndefinedType()
+
+
+def test_schema_validator_selection():
+    # Tests if the correct validator class is chosen based on the $schema
+    # property in the schema. This uses a backwards-incompatible change
+    # in Draft 6 which introduced exclusiveMinimum as a number instead of a boolean.
+    # Therefore, with Draft 4 there is no actual minimum set as a number and validating
+    # the dictionary below passes. With Draft 6, it correctly checks if the number is
+    # > 10 and raises a ValidationError. See
+    # https://json-schema.org/draft-06/json-schema-release-notes.html#q-what-are-
+    # the-changes-between-draft-04-and-draft-06 for more details
+    dct = {
+        "e": 9,
+    }
+
+    assert Draft4Schema.from_dict(dct).to_dict() == dct
+    with pytest.raises(
+        jsonschema.exceptions.ValidationError,
+        match="9 is less than or equal to the minimum of 10",
+    ):
+        Draft6Schema.from_dict(dct)
+
+
+@pytest.fixture
+def dct():
+    return {
+        "a": {"foo": "bar"},
+        "a2": {"foo": 42},
+        "b": ["a", "b", "c"],
+        "b2": [1, 2, 3],
+        "c": 42,
+        "d": ["x", "y", "z"],
+    }
+
+
+def test_copy_method(dct):
+    myschema = MySchema.from_dict(dct)
+
+    # Make sure copy is deep
+    copy = myschema.copy(deep=True)
+    copy["a"]["foo"] = "new value"
+    copy["b"] = ["A", "B", "C"]
+    copy["c"] = 164
+    assert myschema.to_dict() == dct
+
+    # If we ignore a value, changing the copy changes the original
+    copy = myschema.copy(deep=True, ignore=["a"])
+    copy["a"]["foo"] = "new value"
+    copy["b"] = ["A", "B", "C"]
+    copy["c"] = 164
+    mydct = myschema.to_dict()
+    assert mydct["a"]["foo"] == "new value"
+    assert mydct["b"][0] == dct["b"][0]
+    assert mydct["c"] == dct["c"]
+
+    # If copy is not deep, then changing copy below top level changes original
+    copy = myschema.copy(deep=False)
+    copy["a"]["foo"] = "baz"
+    copy["b"] = ["A", "B", "C"]
+    copy["c"] = 164
+    mydct = myschema.to_dict()
+    assert mydct["a"]["foo"] == "baz"
+    assert mydct["b"] == dct["b"]
+    assert mydct["c"] == dct["c"]
+
+
+def test_copy_module(dct):
+    myschema = MySchema.from_dict(dct)
+
+    cp = copy.deepcopy(myschema)
+    cp["a"]["foo"] = "new value"
+    cp["b"] = ["A", "B", "C"]
+    cp["c"] = 164
+    assert myschema.to_dict() == dct
+
+
+def test_attribute_error():
+    m = MySchema()
+    invalid_attr = "invalid_attribute"
+    with pytest.raises(AttributeError) as err:
+        getattr(m, invalid_attr)
+    assert str(err.value) == (
+        "'MySchema' object has no attribute " "'invalid_attribute'"
+    )
+
+
+def test_to_from_json(dct):
+    json_str = MySchema.from_dict(dct).to_json()
+    new_dct = MySchema.from_json(json_str).to_dict()
+
+    assert new_dct == dct
+
+
+def test_to_from_pickle(dct):
+    myschema = MySchema.from_dict(dct)
+    output = io.BytesIO()
+    pickle.dump(myschema, output)
+    output.seek(0)
+    myschema_new = pickle.load(output)
+
+    assert myschema_new.to_dict() == dct
+
+
+def test_class_with_no_schema():
+    class BadSchema(SchemaBase):
+        pass
+
+    with pytest.raises(ValueError) as err:
+        BadSchema(4)
+    assert str(err.value).startswith("Cannot instantiate object")
+
+
+@pytest.mark.parametrize("use_json", [True, False])
+def test_hash_schema(use_json):
+    classes = _TestSchema._default_wrapper_classes()
+
+    for cls in classes:
+        hsh1 = _FromDict.hash_schema(cls._schema, use_json=use_json)
+        hsh2 = _FromDict.hash_schema(cls._schema, use_json=use_json)
+        assert hsh1 == hsh2
+        assert hash(hsh1) == hash(hsh2)
+
+
+def test_schema_validation_error():
+    try:
+        MySchema(a={"foo": 4})
+        the_err = None
+    except jsonschema.ValidationError as err:
+        the_err = err
+
+    assert isinstance(the_err, SchemaValidationError)
+    message = str(the_err)
+
+    assert the_err.message in message
+
+
+def chart_error_example__layer():
+    # Error: Width is not a valid property of a VConcatChart
+    points = (
+        alt.Chart(data.cars.url)
+        .mark_point()
+        .encode(
+            x="Horsepower:Q",
+            y="Miles_per_Gallon:Q",
+        )
+    )
+    return (points & points).properties(width=400)
+
+
+def chart_error_example__hconcat():
+    # Error: Invalid value for title in Text
+    source = data.cars()
+    points = (
+        alt.Chart(source)
+        .mark_point()
+        .encode(
+            x="Horsepower",
+            y="Miles_per_Gallon",
+        )
+    )
+
+    text = (
+        alt.Chart(source)
+        .mark_text()
+        .encode(
+            alt.Text("Horsepower:N", title={"text": "Horsepower", "align": "right"})
+        )
+    )
+
+    return points | text
+
+
+def chart_error_example__invalid_channel():
+    # Error: invalidChannel is an invalid encoding channel. Condition is correct
+    # but is added below as in previous implementations of Altair this interfered
+    # with finding the invalidChannel error
+    selection = alt.selection_point()
+    return (
+        alt.Chart(data.barley())
+        .mark_circle()
+        .add_params(selection)
+        .encode(
+            color=alt.condition(selection, alt.value("red"), alt.value("green")),
+            invalidChannel=None,
+        )
+    )
+
+
+def chart_error_example__invalid_y_option_value_unknown_x_option():
+    # Error 1: unknown is an invalid channel option for X
+    # Error 2: Invalid Y option value "asdf" and unknown option "unknown" for X
+    return (
+        alt.Chart(data.barley())
+        .mark_bar()
+        .encode(
+            x=alt.X("variety", unknown=2),
+            y=alt.Y("sum(yield)", stack="asdf"),
+        )
+    )
+
+
+def chart_error_example__invalid_y_option_value():
+    # Error: Invalid Y option value "asdf"
+    return (
+        alt.Chart(data.barley())
+        .mark_bar()
+        .encode(
+            x=alt.X("variety"),
+            y=alt.Y("sum(yield)", stack="asdf"),
+        )
+    )
+
+
+def chart_error_example__invalid_y_option_value_with_condition():
+    # Error: Invalid Y option value "asdf". Condition is correct
+    # but is added below as in previous implementations of Altair this interfered
+    # with finding the invalidChannel error
+    return (
+        alt.Chart(data.barley())
+        .mark_bar()
+        .encode(
+            x="variety",
+            y=alt.Y("sum(yield)", stack="asdf"),
+            opacity=alt.condition("datum.yield > 0", alt.value(1), alt.value(0.2)),
+        )
+    )
+
+
+def chart_error_example__invalid_timeunit_value():
+    # Error: Invalid value for Angle.timeUnit
+    return alt.Chart().encode(alt.Angle().timeUnit("invalid_value"))
+
+
+def chart_error_example__invalid_sort_value():
+    # Error: Invalid value for Angle.sort
+    return alt.Chart().encode(alt.Angle().sort("invalid_value"))
+
+
+def chart_error_example__invalid_bandposition_value():
+    # Error: Invalid value for Text.bandPosition
+    return (
+        alt.Chart(data.cars())
+        .mark_text(align="right")
+        .encode(alt.Text("Horsepower:N", bandPosition="4"))
+    )
+
+
+def chart_error_example__invalid_type():
+    # Error: Invalid value for type
+    return alt.Chart().encode(alt.X(type="unknown"))
+
+
+def chart_error_example__additional_datum_argument():
+    # Error: wrong_argument is not a valid argument to datum
+    return alt.Chart().mark_point().encode(x=alt.datum(1, wrong_argument=1))
+
+
+def chart_error_example__invalid_value_type():
+    # Error: Value cannot be an integer in this case
+    return (
+        alt.Chart(data.cars())
+        .mark_point()
+        .encode(
+            x="Acceleration:Q",
+            y="Horsepower:Q",
+            color=alt.value(1),  # should be eg. alt.value('red')
+        )
+    )
+
+
+def chart_error_example__wrong_tooltip_type_in_faceted_chart():
+    # Error: Wrong data type to pass to tooltip
+    return (
+        alt.Chart(pd.DataFrame({"a": [1]}))
+        .mark_point()
+        .encode(tooltip=[{"wrong"}])
+        .facet()
+    )
+
+
+def chart_error_example__wrong_tooltip_type_in_layered_chart():
+    # Error: Wrong data type to pass to tooltip
+    return alt.layer(
+        alt.Chart().mark_point().encode(tooltip=[{"wrong"}]),
+    )
+
+
+def chart_error_example__two_errors_in_layered_chart():
+    # Error 1: Wrong data type to pass to tooltip
+    # Error 2: invalidChannel is not a valid encoding channel
+    return alt.layer(
+        alt.Chart().mark_point().encode(tooltip=[{"wrong"}]),
+        alt.Chart().mark_line().encode(invalidChannel="unknown"),
+    )
+
+
+def chart_error_example__two_errors_in_complex_concat_layered_chart():
+    # Error 1: Wrong data type to pass to tooltip
+    # Error 2: Invalid value for bandPosition
+    return (
+        chart_error_example__wrong_tooltip_type_in_layered_chart()
+        | chart_error_example__invalid_bandposition_value()
+    )
+
+
+def chart_error_example__three_errors_in_complex_concat_layered_chart():
+    # Error 1: Wrong data type to pass to tooltip
+    # Error 2: invalidChannel is not a valid encoding channel
+    # Error 3: Invalid value for bandPosition
+    return (
+        chart_error_example__two_errors_in_layered_chart()
+        | chart_error_example__invalid_bandposition_value()
+    )
+
+
+def chart_error_example__two_errors_with_one_in_nested_layered_chart():
+    # Error 1: invalidOption is not a valid option for Scale
+    # Error 2: invalidChannel is not a valid encoding channel
+
+    # In the final chart object, the `layer` attribute will look like this:
+    # [alt.Chart(...), alt.Chart(...), alt.LayerChart(...)]
+    # We can therefore use this example to test if an error is also
+    # spotted in a layered chart within another layered chart
+    source = pd.DataFrame(
+        [
+            {"Day": 1, "Value": 103.3},
+            {"Day": 2, "Value": 394.8},
+            {"Day": 3, "Value": 199.5},
+        ]
+    )
+
+    blue_bars = (
+        alt.Chart(source)
+        .encode(alt.X("Day:O").scale(invalidOption=10), alt.Y("Value:Q"))
+        .mark_bar()
+    )
+    red_bars = (
+        alt.Chart(source)
+        .transform_filter(alt.datum.Value >= 300)
+        .transform_calculate(as_="baseline", calculate="300")
+        .encode(
+            alt.X("Day:O"),
+            alt.Y("baseline:Q"),
+            alt.Y2("Value:Q"),
+            color=alt.value("#e45755"),
+        )
+        .mark_bar()
+    )
+
+    bars = blue_bars + red_bars
+
+    base = alt.Chart().encode(y=alt.datum(300))
+
+    rule = base.mark_rule().encode(invalidChannel=2)
+    text = base.mark_text(text="hazardous")
+    rule_text = rule + text
+
+    chart = bars + rule_text
+    return chart
+
+
+def chart_error_example__four_errors():
+    # Error 1: unknown is not a valid encoding channel option
+    # Error 2: Invalid Y option value "asdf".
+    # Error 3: another_unknown is not a valid encoding channel option
+    # Error 4: fourth_error is not a valid encoding channel option <- this error
+    # should not show up in the final error message as it is capped at showing
+    # 3 errors
+    return (
+        alt.Chart(data.barley())
+        .mark_bar()
+        .encode(
+            x=alt.X("variety", unknown=2),
+            y=alt.Y("sum(yield)", stack="asdf"),
+            color=alt.Color("variety", another_unknown=2),
+            opacity=alt.Opacity("variety", fourth_error=1),
+        )
+    )
+
+
+@pytest.mark.parametrize(
+    "chart_func, expected_error_message",
+    [
+        (
+            chart_error_example__invalid_y_option_value_unknown_x_option,
+            inspect.cleandoc(
+                r"""Multiple errors were found.
+
+                Error 1: `X` has no parameter named 'unknown'
+
+                    Existing parameter names are:
+                    shorthand      bin      scale   timeUnit   
+                    aggregate      field    sort    title      
+                    axis           impute   stack   type       
+                    bandPosition                               
+
+                    See the help for `X` to read the full description of these parameters
+
+                Error 2: 'asdf' is an invalid value for `stack`. Valid values are:
+
+                    - One of \['zero', 'center', 'normalize'\]
+                    - Of type 'null' or 'boolean'$"""  # noqa: W291
+            ),
+        ),
+        (
+            chart_error_example__wrong_tooltip_type_in_faceted_chart,
+            inspect.cleandoc(
+                r"""'{'wrong'}' is an invalid value for `field`. Valid values are of type 'string' or 'object'.$"""
+            ),
+        ),
+        (
+            chart_error_example__wrong_tooltip_type_in_layered_chart,
+            inspect.cleandoc(
+                r"""'{'wrong'}' is an invalid value for `field`. Valid values are of type 'string' or 'object'.$"""
+            ),
+        ),
+        (
+            chart_error_example__two_errors_in_layered_chart,
+            inspect.cleandoc(
+                r"""Multiple errors were found.
+
+                Error 1: '{'wrong'}' is an invalid value for `field`. Valid values are of type 'string' or 'object'.
+
+                Error 2: `Encoding` has no parameter named 'invalidChannel'
+
+                    Existing parameter names are:
+                    angle         key          order     strokeDash      tooltip   xOffset   
+                    color         latitude     radius    strokeOpacity   url       y         
+                    description   latitude2    radius2   strokeWidth     x         y2        
+                    detail        longitude    shape     text            x2        yError    
+                    fill          longitude2   size      theta           xError    yError2   
+                    fillOpacity   opacity      stroke    theta2          xError2   yOffset   
+                    href                                                                     
+
+                    See the help for `Encoding` to read the full description of these parameters$"""  # noqa: W291
+            ),
+        ),
+        (
+            chart_error_example__two_errors_in_complex_concat_layered_chart,
+            inspect.cleandoc(
+                r"""Multiple errors were found.
+
+                Error 1: '{'wrong'}' is an invalid value for `field`. Valid values are of type 'string' or 'object'.
+
+                Error 2: '4' is an invalid value for `bandPosition`. Valid values are of type 'number'.$"""
+            ),
+        ),
+        (
+            chart_error_example__three_errors_in_complex_concat_layered_chart,
+            inspect.cleandoc(
+                r"""Multiple errors were found.
+
+                Error 1: '{'wrong'}' is an invalid value for `field`. Valid values are of type 'string' or 'object'.
+
+                Error 2: `Encoding` has no parameter named 'invalidChannel'
+
+                    Existing parameter names are:
+                    angle         key          order     strokeDash      tooltip   xOffset   
+                    color         latitude     radius    strokeOpacity   url       y         
+                    description   latitude2    radius2   strokeWidth     x         y2        
+                    detail        longitude    shape     text            x2        yError    
+                    fill          longitude2   size      theta           xError    yError2   
+                    fillOpacity   opacity      stroke    theta2          xError2   yOffset   
+                    href                                                                     
+
+                    See the help for `Encoding` to read the full description of these parameters
+
+                Error 3: '4' is an invalid value for `bandPosition`. Valid values are of type 'number'.$"""  # noqa: W291
+            ),
+        ),
+        (
+            chart_error_example__two_errors_with_one_in_nested_layered_chart,
+            inspect.cleandoc(
+                r"""Multiple errors were found.
+
+                Error 1: `Scale` has no parameter named 'invalidOption'
+
+                    Existing parameter names are:
+                    align      domain      interpolate    range      round    
+                    base       domainMax   nice           rangeMax   scheme   
+                    bins       domainMid   padding        rangeMin   type     
+                    clamp      domainMin   paddingInner   reverse    zero     
+                    constant   exponent    paddingOuter                       
+
+                    See the help for `Scale` to read the full description of these parameters
+
+                Error 2: `Encoding` has no parameter named 'invalidChannel'
+
+                    Existing parameter names are:
+                    angle         key          order     strokeDash      tooltip   xOffset   
+                    color         latitude     radius    strokeOpacity   url       y         
+                    description   latitude2    radius2   strokeWidth     x         y2        
+                    detail        longitude    shape     text            x2        yError    
+                    fill          longitude2   size      theta           xError    yError2   
+                    fillOpacity   opacity      stroke    theta2          xError2   yOffset   
+                    href                                                                     
+
+                    See the help for `Encoding` to read the full description of these parameters$"""  # noqa: W291
+            ),
+        ),
+        (
+            chart_error_example__layer,
+            inspect.cleandoc(
+                r"""`VConcatChart` has no parameter named 'width'
+
+                Existing parameter names are:
+                vconcat      center     description   params    title       
+                autosize     config     name          resolve   transform   
+                background   data       padding       spacing   usermeta    
+                bounds       datasets                                       
+
+                See the help for `VConcatChart` to read the full description of these parameters$"""  # noqa: W291
+            ),
+        ),
+        (
+            chart_error_example__invalid_y_option_value,
+            inspect.cleandoc(
+                r"""'asdf' is an invalid value for `stack`. Valid values are:
+
+                - One of \['zero', 'center', 'normalize'\]
+                - Of type 'null' or 'boolean'$"""
+            ),
+        ),
+        (
+            chart_error_example__invalid_y_option_value_with_condition,
+            inspect.cleandoc(
+                r"""'asdf' is an invalid value for `stack`. Valid values are:
+
+                - One of \['zero', 'center', 'normalize'\]
+                - Of type 'null' or 'boolean'$"""
+            ),
+        ),
+        (
+            chart_error_example__hconcat,
+            inspect.cleandoc(
+                r"""'{'text': 'Horsepower', 'align': 'right'}' is an invalid value for `title`. Valid values are of type 'string', 'array', or 'null'.$"""
+            ),
+        ),
+        (
+            chart_error_example__invalid_channel,
+            inspect.cleandoc(
+                r"""`Encoding` has no parameter named 'invalidChannel'
+
+                Existing parameter names are:
+                angle         key          order     strokeDash      tooltip   xOffset   
+                color         latitude     radius    strokeOpacity   url       y         
+                description   latitude2    radius2   strokeWidth     x         y2        
+                detail        longitude    shape     text            x2        yError    
+                fill          longitude2   size      theta           xError    yError2   
+                fillOpacity   opacity      stroke    theta2          xError2   yOffset   
+                href                                                                     
+
+                See the help for `Encoding` to read the full description of these parameters$"""  # noqa: W291
+            ),
+        ),
+        (
+            chart_error_example__invalid_timeunit_value,
+            inspect.cleandoc(
+                r"""'invalid_value' is an invalid value for `timeUnit`. Valid values are:
+
+                - One of \['year', 'quarter', 'month', 'week', 'day', 'dayofyear', 'date', 'hours', 'minutes', 'seconds', 'milliseconds'\]
+                - One of \['utcyear', 'utcquarter', 'utcmonth', 'utcweek', 'utcday', 'utcdayofyear', 'utcdate', 'utchours', 'utcminutes', 'utcseconds', 'utcmilliseconds'\]
+                - One of \['yearquarter', 'yearquartermonth', 'yearmonth', 'yearmonthdate', 'yearmonthdatehours', 'yearmonthdatehoursminutes', 'yearmonthdatehoursminutesseconds', 'yearweek', 'yearweekday', 'yearweekdayhours', 'yearweekdayhoursminutes', 'yearweekdayhoursminutesseconds', 'yeardayofyear', 'quartermonth', 'monthdate', 'monthdatehours', 'monthdatehoursminutes', 'monthdatehoursminutesseconds', 'weekday', 'weeksdayhours', 'weekdayhoursminutes', 'weekdayhoursminutesseconds', 'dayhours', 'dayhoursminutes', 'dayhoursminutesseconds', 'hoursminutes', 'hoursminutesseconds', 'minutesseconds', 'secondsmilliseconds'\]
+                - One of \['utcyearquarter', 'utcyearquartermonth', 'utcyearmonth', 'utcyearmonthdate', 'utcyearmonthdatehours', 'utcyearmonthdatehoursminutes', 'utcyearmonthdatehoursminutesseconds', 'utcyearweek', 'utcyearweekday', 'utcyearweekdayhours', 'utcyearweekdayhoursminutes', 'utcyearweekdayhoursminutesseconds', 'utcyeardayofyear', 'utcquartermonth', 'utcmonthdate', 'utcmonthdatehours', 'utcmonthdatehoursminutes', 'utcmonthdatehoursminutesseconds', 'utcweekday', 'utcweeksdayhours', 'utcweekdayhoursminutes', 'utcweekdayhoursminutesseconds', 'utcdayhours', 'utcdayhoursminutes', 'utcdayhoursminutesseconds', 'utchoursminutes', 'utchoursminutesseconds', 'utcminutesseconds', 'utcsecondsmilliseconds'\]
+                - Of type 'object'$"""
+            ),
+        ),
+        (
+            chart_error_example__invalid_sort_value,
+            inspect.cleandoc(
+                r"""'invalid_value' is an invalid value for `sort`. Valid values are:
+
+                - One of \['ascending', 'descending'\]
+                - One of \['x', 'y', 'color', 'fill', 'stroke', 'strokeWidth', 'size', 'shape', 'fillOpacity', 'strokeOpacity', 'opacity', 'text'\]
+                - One of \['-x', '-y', '-color', '-fill', '-stroke', '-strokeWidth', '-size', '-shape', '-fillOpacity', '-strokeOpacity', '-opacity', '-text'\]
+                - Of type 'array', 'object', or 'null'$"""
+            ),
+        ),
+        (
+            chart_error_example__invalid_bandposition_value,
+            inspect.cleandoc(
+                r"""'4' is an invalid value for `bandPosition`. Valid values are of type 'number'.$"""
+            ),
+        ),
+        (
+            chart_error_example__invalid_type,
+            inspect.cleandoc(
+                r"""'unknown' is an invalid value for `type`. Valid values are one of \['quantitative', 'ordinal', 'temporal', 'nominal', 'geojson'\].$"""
+            ),
+        ),
+        (
+            chart_error_example__additional_datum_argument,
+            inspect.cleandoc(
+                r"""`X` has no parameter named 'wrong_argument'
+
+                Existing parameter names are:
+                shorthand      bin      scale   timeUnit   
+                aggregate      field    sort    title      
+                axis           impute   stack   type       
+                bandPosition                               
+
+                See the help for `X` to read the full description of these parameters$"""  # noqa: W291
+            ),
+        ),
+        (
+            chart_error_example__invalid_value_type,
+            inspect.cleandoc(
+                r"""'1' is an invalid value for `value`. Valid values are of type 'object', 'string', or 'null'.$"""
+            ),
+        ),
+        (
+            chart_error_example__four_errors,
+            inspect.cleandoc(
+                r"""Multiple errors were found.
+
+                Error 1: `Color` has no parameter named 'another_unknown'
+
+                    Existing parameter names are:
+                    shorthand      bin         legend   timeUnit   
+                    aggregate      condition   scale    title      
+                    bandPosition   field       sort     type       
+
+                    See the help for `Color` to read the full description of these parameters
+
+                Error 2: `Opacity` has no parameter named 'fourth_error'
+
+                    Existing parameter names are:
+                    shorthand      bin         legend   timeUnit   
+                    aggregate      condition   scale    title      
+                    bandPosition   field       sort     type       
+
+                    See the help for `Opacity` to read the full description of these parameters
+
+                Error 3: `X` has no parameter named 'unknown'
+
+                    Existing parameter names are:
+                    shorthand      bin      scale   timeUnit   
+                    aggregate      field    sort    title      
+                    axis           impute   stack   type       
+                    bandPosition                               
+
+                    See the help for `X` to read the full description of these parameters$"""  # noqa: W291
+            ),
+        ),
+    ],
+)
+def test_chart_validation_errors(chart_func, expected_error_message):
+    # For some wrong chart specifications such as an unknown encoding channel,
+    # Altair already raises a warning before the chart specifications are validated.
+    # We can ignore these warnings as we are interested in the errors being raised
+    # during validation which is triggered by to_dict
+    with warnings.catch_warnings():
+        warnings.filterwarnings("ignore", category=UserWarning)
+        chart = chart_func()
+    with pytest.raises(SchemaValidationError, match=expected_error_message):
+        chart.to_dict()
+
+
+def test_multiple_field_strings_in_condition():
+    selection = alt.selection_point()
+    expected_error_message = "A field cannot be used for both the `if_true` and `if_false` values of a condition. One of them has to specify a `value` or `datum` definition."
+    with pytest.raises(ValueError, match=expected_error_message):
+        (
+            alt.Chart(data.cars())
+            .mark_circle()
+            .add_params(selection)
+            .encode(
+                color=alt.condition(selection, "Origin", "Origin"),
+            )
+        ).to_dict()
+
+
+def test_serialize_numpy_types():
+    m = MySchema(
+        a={"date": np.datetime64("2019-01-01")},
+        a2={"int64": np.int64(1), "float64": np.float64(2)},
+        b2=np.arange(4),
+    )
+    out = m.to_json()
+    dct = json.loads(out)
+    assert dct == {
+        "a": {"date": "2019-01-01T00:00:00"},
+        "a2": {"int64": 1, "float64": 2},
+        "b2": [0, 1, 2, 3],
+    }
+
+
+def test_to_dict_no_side_effects():
+    # Tests that shorthands are expanded in returned dictionary when calling to_dict
+    # but that they remain untouched in the chart object. Goal is to ensure that
+    # the chart object stays unchanged when to_dict is called
+    def validate_encoding(encoding):
+        assert encoding.x["shorthand"] == "a"
+        assert encoding.x["field"] is alt.Undefined
+        assert encoding.x["type"] is alt.Undefined
+        assert encoding.y["shorthand"] == "b:Q"
+        assert encoding.y["field"] is alt.Undefined
+        assert encoding.y["type"] is alt.Undefined
+
+    data = pd.DataFrame(
+        {
+            "a": ["A", "B", "C", "D", "E", "F", "G", "H", "I"],
+            "b": [28, 55, 43, 91, 81, 53, 19, 87, 52],
+        }
+    )
+
+    chart = alt.Chart(data).mark_bar().encode(x="a", y="b:Q")
+
+    validate_encoding(chart.encoding)
+    dct = chart.to_dict()
+    validate_encoding(chart.encoding)
+
+    assert "shorthand" not in dct["encoding"]["x"]
+    assert dct["encoding"]["x"]["field"] == "a"
+
+    assert "shorthand" not in dct["encoding"]["y"]
+    assert dct["encoding"]["y"]["field"] == "b"
+    assert dct["encoding"]["y"]["type"] == "quantitative"
+
+
+def test_to_dict_expand_mark_spec():
+    # Test that `to_dict` correctly expands marks to a dictionary
+    # without impacting the original spec which remains a string
+    chart = alt.Chart().mark_bar()
+    assert chart.to_dict()["mark"] == {"type": "bar"}
+    assert chart.mark == "bar"
diff --git a/altair/utils/tests/test_server.py b/tests/utils/test_server.py
similarity index 100%
rename from altair/utils/tests/test_server.py
rename to tests/utils/test_server.py
diff --git a/altair/utils/tests/test_utils.py b/tests/utils/test_utils.py
similarity index 94%
rename from altair/utils/tests/test_utils.py
rename to tests/utils/test_utils.py
index 1ccede4..690fdc8 100644
--- a/altair/utils/tests/test_utils.py
+++ b/tests/utils/test_utils.py
@@ -5,7 +5,7 @@ import json
 import numpy as np
 import pandas as pd
 
-from .. import infer_vegalite_type, sanitize_dataframe
+from altair.utils import infer_vegalite_type, sanitize_dataframe
 
 
 def test_infer_vegalite_type():
@@ -116,7 +116,6 @@ def test_sanitize_dataframe_infs():
     reason="Nullable integers not supported in pandas v{}".format(pd.__version__),
 )
 def test_sanitize_nullable_integers():
-
     df = pd.DataFrame(
         {
             "int_np": [1, 2, 3, 4, 5],
@@ -129,9 +128,9 @@ def test_sanitize_nullable_integers():
     )
 
     df_clean = sanitize_dataframe(df)
-    assert {col.dtype.name for _, col in df_clean.iteritems()} == {"object"}
+    assert {col.dtype.name for _, col in df_clean.items()} == {"object"}
 
-    result_python = {col_name: list(col) for col_name, col in df_clean.iteritems()}
+    result_python = {col_name: list(col) for col_name, col in df_clean.items()}
     assert result_python == {
         "int_np": [1, 2, 3, 4, 5],
         "int64": [1, 2, 3, None, 5],
@@ -157,9 +156,9 @@ def test_sanitize_string_dtype():
     )
 
     df_clean = sanitize_dataframe(df)
-    assert {col.dtype.name for _, col in df_clean.iteritems()} == {"object"}
+    assert {col.dtype.name for _, col in df_clean.items()} == {"object"}
 
-    result_python = {col_name: list(col) for col_name, col in df_clean.iteritems()}
+    result_python = {col_name: list(col) for col_name, col in df_clean.items()}
     assert result_python == {
         "string_object": ["a", "b", "c", "d"],
         "string_string": ["a", "b", "c", "d"],
@@ -182,9 +181,9 @@ def test_sanitize_boolean_dtype():
     )
 
     df_clean = sanitize_dataframe(df)
-    assert {col.dtype.name for _, col in df_clean.iteritems()} == {"object"}
+    assert {col.dtype.name for _, col in df_clean.items()} == {"object"}
 
-    result_python = {col_name: list(col) for col_name, col in df_clean.iteritems()}
+    result_python = {col_name: list(col) for col_name, col in df_clean.items()}
     assert result_python == {
         "bool_none": [True, False, None],
         "none": [None, None, None],
diff --git a/altair/utils/tests/__init__.py b/tests/vegalite/__init__.py
similarity index 100%
rename from altair/utils/tests/__init__.py
rename to tests/vegalite/__init__.py
diff --git a/altair/vegalite/tests/test_common.py b/tests/vegalite/test_common.py
similarity index 91%
rename from altair/vegalite/tests/test_common.py
rename to tests/vegalite/test_common.py
index 49d7a18..0cc216e 100644
--- a/altair/vegalite/tests/test_common.py
+++ b/tests/vegalite/test_common.py
@@ -4,14 +4,14 @@ import pytest
 
 import pandas as pd
 
-from .. import v3, v4
+from altair.vegalite import v5
 
 
 @pytest.fixture
 def basic_spec():
     return {
         "data": {"url": "data.csv"},
-        "mark": "line",
+        "mark": {"type": "line"},
         "encoding": {
             "color": {"type": "nominal", "field": "color"},
             "x": {"type": "quantitative", "field": "xval"},
@@ -38,7 +38,7 @@ def make_basic_chart(alt):
     return alt.Chart(data).mark_bar().encode(x="a", y="b")
 
 
-@pytest.mark.parametrize("alt", [v3, v4])
+@pytest.mark.parametrize("alt", [v5])
 def test_basic_chart_to_dict(alt, basic_spec):
     chart = (
         alt.Chart("data.csv")
@@ -54,7 +54,7 @@ def test_basic_chart_to_dict(alt, basic_spec):
     assert dct == make_final_spec(alt, basic_spec)
 
 
-@pytest.mark.parametrize("alt", [v3, v4])
+@pytest.mark.parametrize("alt", [v5])
 def test_basic_chart_from_dict(alt, basic_spec):
     chart = alt.Chart.from_dict(basic_spec)
     dct = chart.to_dict()
@@ -66,7 +66,7 @@ def test_basic_chart_from_dict(alt, basic_spec):
     assert dct == make_final_spec(alt, basic_spec)
 
 
-@pytest.mark.parametrize("alt", [v3, v4])
+@pytest.mark.parametrize("alt", [v5])
 def test_theme_enable(alt, basic_spec):
     active_theme = alt.themes.active
 
@@ -87,7 +87,7 @@ def test_theme_enable(alt, basic_spec):
         alt.themes.enable(active_theme)
 
 
-@pytest.mark.parametrize("alt", [v3, v4])
+@pytest.mark.parametrize("alt", [v5])
 def test_max_rows(alt):
     basic_chart = make_basic_chart(alt)
 
diff --git a/altair/vega/tests/__init__.py b/tests/vegalite/v5/__init__.py
similarity index 100%
rename from altair/vega/tests/__init__.py
rename to tests/vegalite/v5/__init__.py
diff --git a/tests/vegalite/v5/test_alias.py b/tests/vegalite/v5/test_alias.py
new file mode 100644
index 0000000..f39ab57
--- /dev/null
+++ b/tests/vegalite/v5/test_alias.py
@@ -0,0 +1,21 @@
+import pytest
+
+import altair.vegalite.v5 as alt
+
+
+def test_aliases():
+    """Ensure that any aliases defined in `api.py` aren't colliding with names already defined in `core.py` or `channels.py`."""
+    for alias in ["Bin", "Impute", "Title"]:
+        # this test pass if the alias can resolve to its real name
+        try:
+            getattr(alt, alias)
+        except AttributeError as err:
+            raise AssertionError(f"cannot resolve '{alias}':, {err}") from err
+
+        # this test fails if the alias match a colliding name in core
+        with pytest.raises(AttributeError):
+            getattr(alt.core, alias)
+
+        # this test fails if the alias match a colliding name in channels
+        with pytest.raises(AttributeError):
+            getattr(alt.channels, alias)
diff --git a/altair/vegalite/v4/tests/test_api.py b/tests/vegalite/v5/test_api.py
similarity index 77%
rename from altair/vegalite/v4/tests/test_api.py
rename to tests/vegalite/v5/test_api.py
index 450553f..e3d27d1 100644
--- a/altair/vegalite/v4/tests/test_api.py
+++ b/tests/vegalite/v5/test_api.py
@@ -11,13 +11,18 @@ import jsonschema
 import pytest
 import pandas as pd
 
-import altair.vegalite.v4 as alt
+import altair.vegalite.v5 as alt
 
 try:
     import altair_saver  # noqa: F401
 except ImportError:
     altair_saver = None
 
+try:
+    import vl_convert as vlc  # noqa: F401
+except ImportError:
+    vlc = None
+
 
 def getargs(*args, **kwargs):
     return args, kwargs
@@ -118,6 +123,7 @@ def test_chart_infer_types():
             "x": pd.date_range("2012", periods=10, freq="Y"),
             "y": range(10),
             "c": list("abcabcabca"),
+            "s": pd.Categorical([1, 2] * 5, categories=[2, 1], ordered=True),
         }
     )
 
@@ -129,32 +135,62 @@ def test_chart_infer_types():
         assert dct["encoding"]["y"]["field"] == "y"
         assert dct["encoding"]["color"]["type"] == "nominal"
         assert dct["encoding"]["color"]["field"] == "c"
+        assert dct["encoding"]["size"]["type"] == "ordinal"
+        assert dct["encoding"]["size"]["field"] == "s"
+        assert dct["encoding"]["size"]["sort"] == [2, 1]
+        assert dct["encoding"]["tooltip"]["type"] == "ordinal"
+        assert dct["encoding"]["tooltip"]["field"] == "s"
+        # "sort" should be removed for channels that don't support it
+        assert "sort" not in dct["encoding"]["tooltip"]
 
     # Pass field names by keyword
-    chart = alt.Chart(data).mark_point().encode(x="x", y="y", color="c")
+    chart = (
+        alt.Chart(data)
+        .mark_point()
+        .encode(x="x", y="y", color="c", size="s", tooltip="s")
+    )
     _check_encodings(chart)
 
     # pass Channel objects by keyword
     chart = (
         alt.Chart(data)
         .mark_point()
-        .encode(x=alt.X("x"), y=alt.Y("y"), color=alt.Color("c"))
+        .encode(
+            x=alt.X("x"),
+            y=alt.Y("y"),
+            color=alt.Color("c"),
+            size=alt.Size("s"),
+            tooltip=alt.Tooltip("s"),
+        )
     )
     _check_encodings(chart)
 
     # pass Channel objects by value
-    chart = alt.Chart(data).mark_point().encode(alt.X("x"), alt.Y("y"), alt.Color("c"))
+    chart = (
+        alt.Chart(data)
+        .mark_point()
+        .encode(alt.X("x"), alt.Y("y"), alt.Color("c"), alt.Size("s"), alt.Tooltip("s"))
+    )
     _check_encodings(chart)
 
     # override default types
     chart = (
         alt.Chart(data)
         .mark_point()
-        .encode(alt.X("x", type="nominal"), alt.Y("y", type="ordinal"))
+        .encode(
+            alt.X("x", type="nominal"),
+            alt.Y("y", type="ordinal"),
+            alt.Size("s", type="nominal"),
+            alt.Tooltip("s", type="nominal"),
+        )
     )
     dct = chart.to_dict()
     assert dct["encoding"]["x"]["type"] == "nominal"
     assert dct["encoding"]["y"]["type"] == "ordinal"
+    assert dct["encoding"]["size"]["type"] == "nominal"
+    assert "sort" not in dct["encoding"]["size"]
+    assert dct["encoding"]["tooltip"]["type"] == "nominal"
+    assert "sort" not in dct["encoding"]["tooltip"]
 
 
 @pytest.mark.parametrize(
@@ -219,7 +255,7 @@ def test_chart_operations():
 
 
 def test_selection_to_dict():
-    brush = alt.selection(type="interval")
+    brush = alt.selection_interval()
 
     # test some value selections
     # Note: X and Y cannot have conditions
@@ -241,20 +277,23 @@ def test_selection_to_dict():
 
 
 def test_selection_expression():
-    selection = alt.selection_single(fields=["value"])
+    selection = alt.selection_point(fields=["value"])
 
-    assert isinstance(selection.value, alt.expr.Expression)
-    assert selection.value.to_dict() == "{0}.value".format(selection.name)
+    assert isinstance(selection.value, alt.SelectionExpression)
+    assert selection.value.to_dict() == {"expr": f"{selection.name}.value"}
 
     assert isinstance(selection["value"], alt.expr.Expression)
     assert selection["value"].to_dict() == "{0}['value']".format(selection.name)
 
+    magic_attr = "__magic__"
     with pytest.raises(AttributeError):
-        selection.__magic__
+        getattr(selection, magic_attr)
 
 
-@pytest.mark.parametrize("format", ["html", "json", "png", "svg", "pdf"])
-def test_save(format, basic_chart):
+@pytest.mark.save_engine
+@pytest.mark.parametrize("format", ["html", "json", "png", "svg", "pdf", "bogus"])
+@pytest.mark.parametrize("engine", ["altair_saver", "vl-convert"])
+def test_save(format, engine, basic_chart):
     if format in ["pdf", "png"]:
         out = io.BytesIO()
         mode = "rb"
@@ -262,28 +301,58 @@ def test_save(format, basic_chart):
         out = io.StringIO()
         mode = "r"
 
-    if format in ["svg", "png", "pdf"]:
-        if not altair_saver:
-            with pytest.raises(ValueError) as err:
-                basic_chart.save(out, format=format)
-            assert "github.com/altair-viz/altair_saver" in str(err.value)
-            return
-        elif format not in altair_saver.available_formats():
-            with pytest.raises(ValueError) as err:
-                basic_chart.save(out, format=format)
-            assert f"No enabled saver found that supports format='{format}'" in str(
-                err.value
-            )
-            return
-
-    basic_chart.save(out, format=format)
+    if format in ["svg", "png", "pdf", "bogus"]:
+        if engine == "altair_saver":
+            if format == "bogus":
+                with pytest.raises(ValueError) as err:
+                    basic_chart.save(out, format=format, engine=engine)
+                assert f"Unsupported format: '{format}'" in str(err.value)
+                return
+            elif altair_saver is None:
+                with pytest.raises(ValueError) as err:
+                    basic_chart.save(out, format=format, engine=engine)
+                assert "altair_saver" in str(err.value)
+                return
+            elif format not in altair_saver.available_formats():
+                with pytest.raises(ValueError) as err:
+                    basic_chart.save(out, format=format, engine=engine)
+                assert f"No enabled saver found that supports format='{format}'" in str(
+                    err.value
+                )
+                return
+
+        elif engine == "vl-convert":
+            if vlc is None and format != "bogus":
+                with pytest.raises(ValueError) as err:
+                    basic_chart.save(out, format=format, engine=engine)
+                assert "vl-convert-python" in str(err.value)
+                return
+            elif format == "pdf":
+                with pytest.raises(ValueError) as err:
+                    basic_chart.save(out, format=format, engine=engine)
+                assert (
+                    f"The 'vl-convert' conversion engine does not support the '{format}' format"
+                    in str(err.value)
+                )
+                return
+            elif format not in ("png", "svg"):
+                with pytest.raises(ValueError) as err:
+                    basic_chart.save(out, format=format, engine=engine)
+                assert f"Unsupported format: '{format}'" in str(err.value)
+                return
+
+    basic_chart.save(out, format=format, engine=engine)
     out.seek(0)
     content = out.read()
 
     if format == "json":
         assert "$schema" in json.loads(content)
-    if format == "html":
+    elif format == "html":
         assert content.startswith("<!DOCTYPE html>")
+    elif format == "svg":
+        assert content.startswith("<svg")
+    elif format == "png":
+        assert content.startswith(b"\x89PNG")
 
     fid, filename = tempfile.mkstemp(suffix="." + format)
     os.close(fid)
@@ -291,13 +360,30 @@ def test_save(format, basic_chart):
     # test both string filenames and pathlib.Paths
     for fp in [filename, pathlib.Path(filename)]:
         try:
-            basic_chart.save(fp)
+            basic_chart.save(fp, format=format, engine=engine)
             with open(fp, mode) as f:
                 assert f.read()[:1000] == content[:1000]
         finally:
             os.remove(fp)
 
 
+@pytest.mark.parametrize("inline", [False, True])
+def test_save_html(basic_chart, inline):
+    out = io.StringIO()
+    basic_chart.save(out, format="html", inline=inline)
+    out.seek(0)
+    content = out.read()
+
+    assert content.startswith("<!DOCTYPE html>")
+
+    if inline:
+        assert '<script type="text/javascript">' in content
+    else:
+        assert 'src="https://cdn.jsdelivr.net/npm/vega@5' in content
+        assert 'src="https://cdn.jsdelivr.net/npm/vega-lite@5' in content
+        assert 'src="https://cdn.jsdelivr.net/npm/vega-embed@6' in content
+
+
 def test_facet_basic():
     # wrapped facet
     chart1 = (
@@ -382,33 +468,33 @@ def test_facet_parse_data():
 def test_selection():
     # test instantiation of selections
     interval = alt.selection_interval(name="selec_1")
-    assert interval.selection.type == "interval"
+    assert interval.param.select.type == "interval"
     assert interval.name == "selec_1"
 
-    single = alt.selection_single(name="selec_2")
-    assert single.selection.type == "single"
+    single = alt.selection_point(name="selec_2")
+    assert single.param.select.type == "point"
     assert single.name == "selec_2"
 
-    multi = alt.selection_multi(name="selec_3")
-    assert multi.selection.type == "multi"
+    multi = alt.selection_point(name="selec_3")
+    assert multi.param.select.type == "point"
     assert multi.name == "selec_3"
 
     # test adding to chart
-    chart = alt.Chart().add_selection(single)
-    chart = chart.add_selection(multi, interval)
-    assert set(chart.selection.keys()) == {"selec_1", "selec_2", "selec_3"}
+    chart = alt.Chart().add_params(single)
+    chart = chart.add_params(multi, interval)
+    assert {x.name for x in chart.params} == {"selec_1", "selec_2", "selec_3"}
 
     # test logical operations
-    assert isinstance(single & multi, alt.Selection)
-    assert isinstance(single | multi, alt.Selection)
-    assert isinstance(~single, alt.Selection)
-    assert isinstance((single & multi)[0].group, alt.SelectionAnd)
-    assert isinstance((single | multi)[0].group, alt.SelectionOr)
-    assert isinstance((~single)[0].group, alt.SelectionNot)
+    assert isinstance(single & multi, alt.SelectionPredicateComposition)
+    assert isinstance(single | multi, alt.SelectionPredicateComposition)
+    assert isinstance(~single, alt.SelectionPredicateComposition)
+    assert "and" in (single & multi).to_dict().keys()
+    assert "or" in (single | multi).to_dict().keys()
+    assert "not" in (~single).to_dict().keys()
 
     # test that default names increment (regression for #1454)
-    sel1 = alt.selection_single()
-    sel2 = alt.selection_multi()
+    sel1 = alt.selection_point()
+    sel2 = alt.selection_point()
     sel3 = alt.selection_interval()
     names = {s.name for s in (sel1, sel2, sel3)}
     assert len(names) == 3
@@ -419,7 +505,7 @@ def test_transforms():
     agg1 = alt.AggregatedFieldDef(**{"as": "x1", "op": "mean", "field": "y"})
     agg2 = alt.AggregatedFieldDef(**{"as": "x2", "op": "median", "field": "z"})
     chart = alt.Chart().transform_aggregate([agg1], ["foo"], x2="median(z)")
-    kwds = dict(aggregate=[agg1, agg2], groupby=["foo"])
+    kwds = {"aggregate": [agg1, agg2], "groupby": ["foo"]}
     assert chart.transform == [alt.AggregateTransform(**kwds)]
 
     # bin transform
@@ -478,7 +564,7 @@ def test_transforms():
     assert chart.transform == [alt.LookupTransform(**kwds)]
 
     # lookup transform (selection)
-    lookup_selection = alt.LookupSelection(key="key", selection="sel")
+    lookup_selection = alt.LookupSelection(key="key", param="sel")
     chart = alt.Chart().transform_lookup(
         "a", from_=lookup_selection, as_="a", default="b"
     )
@@ -534,34 +620,34 @@ def test_filter_transform_selection_predicates():
     base = alt.Chart("data.txt").mark_point()
 
     chart = base.transform_filter(selector1)
-    assert chart.to_dict()["transform"] == [{"filter": {"selection": "s1"}}]
+    assert chart.to_dict()["transform"] == [{"filter": {"param": "s1"}}]
 
     chart = base.transform_filter(~selector1)
-    assert chart.to_dict()["transform"] == [{"filter": {"selection": {"not": "s1"}}}]
+    assert chart.to_dict()["transform"] == [{"filter": {"not": {"param": "s1"}}}]
 
     chart = base.transform_filter(selector1 & selector2)
     assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"and": ["s1", "s2"]}}}
+        {"filter": {"and": [{"param": "s1"}, {"param": "s2"}]}}
     ]
 
     chart = base.transform_filter(selector1 | selector2)
     assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"or": ["s1", "s2"]}}}
+        {"filter": {"or": [{"param": "s1"}, {"param": "s2"}]}}
     ]
 
     chart = base.transform_filter(selector1 | ~selector2)
     assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"or": ["s1", {"not": "s2"}]}}}
+        {"filter": {"or": [{"param": "s1"}, {"not": {"param": "s2"}}]}}
     ]
 
     chart = base.transform_filter(~selector1 | ~selector2)
     assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"or": [{"not": "s1"}, {"not": "s2"}]}}}
+        {"filter": {"or": [{"not": {"param": "s1"}}, {"not": {"param": "s2"}}]}}
     ]
 
     chart = base.transform_filter(~(selector1 & selector2))
     assert chart.to_dict()["transform"] == [
-        {"filter": {"selection": {"not": {"and": ["s1", "s2"]}}}}
+        {"filter": {"not": {"and": [{"param": "s1"}, {"param": "s2"}]}}}
     ]
 
 
@@ -590,49 +676,57 @@ def test_layer_encodings():
 def test_add_selection():
     selections = [
         alt.selection_interval(),
-        alt.selection_single(),
-        alt.selection_multi(),
+        alt.selection_point(),
+        alt.selection_point(),
     ]
     chart = (
         alt.Chart()
         .mark_point()
-        .add_selection(selections[0])
-        .add_selection(selections[1], selections[2])
+        .add_params(selections[0])
+        .add_params(selections[1], selections[2])
     )
-    expected = {s.name: s.selection for s in selections}
-    assert chart.selection == expected
+    expected = [s.param for s in selections]
+    assert chart.params == expected
 
 
 def test_repeat_add_selections():
     base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = base.add_selection(selection).repeat(list("ABC"))
-    chart2 = base.repeat(list("ABC")).add_selection(selection)
+    selection = alt.selection_point()
+    alt.Chart._counter = 0
+    chart1 = base.add_params(selection).repeat(list("ABC"))
+    alt.Chart._counter = 0
+    chart2 = base.repeat(list("ABC")).add_params(selection)
     assert chart1.to_dict() == chart2.to_dict()
 
 
 def test_facet_add_selections():
     base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = base.add_selection(selection).facet("val:Q")
-    chart2 = base.facet("val:Q").add_selection(selection)
+    selection = alt.selection_point()
+    alt.Chart._counter = 0
+    chart1 = base.add_params(selection).facet("val:Q")
+    alt.Chart._counter = 0
+    chart2 = base.facet("val:Q").add_params(selection)
     assert chart1.to_dict() == chart2.to_dict()
 
 
 def test_layer_add_selection():
     base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = alt.layer(base.add_selection(selection), base)
-    chart2 = alt.layer(base, base).add_selection(selection)
+    selection = alt.selection_point()
+    alt.Chart._counter = 0
+    chart1 = alt.layer(base.add_params(selection), base)
+    alt.Chart._counter = 0
+    chart2 = alt.layer(base, base).add_params(selection)
     assert chart1.to_dict() == chart2.to_dict()
 
 
 @pytest.mark.parametrize("charttype", [alt.concat, alt.hconcat, alt.vconcat])
 def test_compound_add_selections(charttype):
     base = alt.Chart("data.csv").mark_point()
-    selection = alt.selection_single()
-    chart1 = charttype(base.add_selection(selection), base.add_selection(selection))
-    chart2 = charttype(base, base).add_selection(selection)
+    selection = alt.selection_point()
+    alt.Chart._counter = 0
+    chart1 = charttype(base.add_params(selection), base.add_params(selection))
+    alt.Chart._counter = 0
+    chart2 = charttype(base, base).add_params(selection)
     assert chart1.to_dict() == chart2.to_dict()
 
 
@@ -659,13 +753,13 @@ def test_themes():
 
     with alt.themes.enable("default"):
         assert chart.to_dict()["config"] == {
-            "view": {"continuousWidth": 400, "continuousHeight": 300}
+            "view": {"continuousWidth": 300, "continuousHeight": 300}
         }
 
     with alt.themes.enable("opaque"):
         assert chart.to_dict()["config"] == {
             "background": "white",
-            "view": {"continuousWidth": 400, "continuousHeight": 300},
+            "view": {"continuousWidth": 300, "continuousHeight": 300},
         }
 
     with alt.themes.enable("none"):
@@ -868,17 +962,33 @@ def test_layer_errors():
         'Objects with "config" attribute cannot be used within LayerChart.'
     )
 
+    with pytest.raises(ValueError) as err:
+        alt.hconcat(simple_chart) + simple_chart
+    assert (
+        str(err.value)
+        == "Concatenated charts cannot be layered. Instead, layer the charts before concatenating."
+    )
+
     with pytest.raises(ValueError) as err:
         repeat_chart + simple_chart
-    assert str(err.value) == "Repeat charts cannot be layered."
+    assert (
+        str(err.value)
+        == "Repeat charts cannot be layered. Instead, layer the charts before repeating."
+    )
 
     with pytest.raises(ValueError) as err:
         facet_chart1 + simple_chart
-    assert str(err.value) == "Faceted charts cannot be layered."
+    assert (
+        str(err.value)
+        == "Faceted charts cannot be layered. Instead, layer the charts before faceting."
+    )
 
     with pytest.raises(ValueError) as err:
         alt.layer(simple_chart) + facet_chart2
-    assert str(err.value) == "Faceted charts cannot be layered."
+    assert (
+        str(err.value)
+        == "Faceted charts cannot be layered. Instead, layer the charts before faceting."
+    )
 
 
 @pytest.mark.parametrize(
diff --git a/altair/vegalite/v3/tests/test_data.py b/tests/vegalite/v5/test_data.py
similarity index 95%
rename from altair/vegalite/v3/tests/test_data.py
rename to tests/vegalite/v5/test_data.py
index 8eae11c..2cf48e8 100644
--- a/altair/vegalite/v3/tests/test_data.py
+++ b/tests/vegalite/v5/test_data.py
@@ -3,7 +3,7 @@ import os
 import pandas as pd
 import pytest
 
-from .. import data as alt
+from altair.vegalite.v5 import data as alt
 
 
 @pytest.fixture
diff --git a/altair/vegalite/v4/tests/test_display.py b/tests/vegalite/v5/test_display.py
similarity index 98%
rename from altair/vegalite/v4/tests/test_display.py
rename to tests/vegalite/v5/test_display.py
index e7ccc27..2a3fa3a 100644
--- a/altair/vegalite/v4/tests/test_display.py
+++ b/tests/vegalite/v5/test_display.py
@@ -2,7 +2,7 @@ from contextlib import contextmanager
 
 import pytest
 
-import altair.vegalite.v4 as alt
+import altair.vegalite.v5 as alt
 
 
 @contextmanager
diff --git a/altair/vegalite/v3/tests/test_geo_interface.py b/tests/vegalite/v5/test_geo_interface.py
similarity index 94%
rename from altair/vegalite/v3/tests/test_geo_interface.py
rename to tests/vegalite/v5/test_geo_interface.py
index cc15703..bc3dc64 100644
--- a/altair/vegalite/v3/tests/test_geo_interface.py
+++ b/tests/vegalite/v5/test_geo_interface.py
@@ -1,13 +1,13 @@
 import pytest
-import altair.vegalite.v3 as alt
+import altair.vegalite.v5 as alt
 
 
 def geom_obj(geom):
-    class Geom(object):
+    class Geom:
         pass
 
     geom_obj = Geom()
-    setattr(geom_obj, "__geo_interface__", geom)
+    geom_obj.__geo_interface__ = geom
     return geom_obj
 
 
@@ -74,13 +74,11 @@ def test_geo_interface_serializing_arrays_tuples():
         "bbox": arr.array("d", [1, 2, 3, 4]),
         "geometry": {
             "coordinates": [
-                tuple(
-                    (
-                        tuple((6.90, 53.48)),
-                        tuple((5.98, 51.85)),
-                        tuple((6.07, 53.51)),
-                        tuple((6.90, 53.48)),
-                    )
+                (
+                    (6.90, 53.48),
+                    (5.98, 51.85),
+                    (6.07, 53.51),
+                    (6.90, 53.48),
                 )
             ],
             "type": "Polygon",
diff --git a/tests/vegalite/v5/test_layer_props.py b/tests/vegalite/v5/test_layer_props.py
new file mode 100644
index 0000000..1185d50
--- /dev/null
+++ b/tests/vegalite/v5/test_layer_props.py
@@ -0,0 +1,23 @@
+import pytest
+
+import altair.vegalite.v5 as alt
+
+
+def test_layer_props():
+    """Beginning in Vega-Lite v5, the properties "height" and "width" were no longer allowed in a subchart within a LayerChart.  We check here that these are moved to the top level by Altair."""
+    base = alt.Chart().mark_point()
+
+    # Allowed
+    base.properties(width=100) + base
+    base.properties(width=100) + base.properties(height=200)
+    base.properties(width=100) + base.properties(height=200, width=100)
+
+    # Not allowed
+    with pytest.raises(ValueError, match="inconsistent"):
+        base.properties(width=100) + base.properties(width=200)
+
+    # Check that the resulting LayerChart has the correct properties.
+    c = base.properties(width=100) + base.properties(height=200, width=100)
+    assert isinstance(c, alt.LayerChart)
+    assert c.width == 100
+    assert c.height == 200
diff --git a/tests/vegalite/v5/test_params.py b/tests/vegalite/v5/test_params.py
new file mode 100644
index 0000000..91d2992
--- /dev/null
+++ b/tests/vegalite/v5/test_params.py
@@ -0,0 +1,198 @@
+"""Tests for variable parameters and selection parameters"""
+
+import pandas as pd
+
+import warnings
+import pytest
+
+import re
+
+import altair.vegalite.v5 as alt
+
+
+def test_variable_param():
+    data = pd.DataFrame([{"a": "A", "b": 28}])
+
+    rad_slider = alt.binding_range(min=0, max=20, step=1)
+    rad_var = alt.param(bind=rad_slider, value=0, name="paramName")
+
+    c = (
+        alt.Chart(data)
+        .mark_bar(cornerRadius=rad_var)
+        .encode(
+            x="a:N",
+            y="b:Q",
+        )
+        .add_params(rad_var)
+    )
+
+    dct = c.to_dict()
+
+    mark_dict = {"type": "bar", "cornerRadius": {"expr": "paramName"}}
+    param_list = [
+        {
+            "name": "paramName",
+            "bind": {"input": "range", "max": 20, "min": 0, "step": 1},
+            "value": 0,
+        }
+    ]
+
+    assert dct["mark"] == mark_dict
+    assert dct["params"] == param_list
+
+
+def test_param_expr():
+    height_var = alt.param(name="height")
+    inner_var = height_var / 2
+    tick_var = (3 * height_var) / 4
+
+    height_str = height_var._to_expr()
+    inner_str = inner_var._to_expr()
+    tick_str = tick_var._to_expr()
+
+    assert height_str == "height"
+    assert inner_str == "(height / 2)"
+    assert tick_str == "((3 * height) / 4)"
+
+    data = pd.DataFrame({"r1": [310, 0], "r2": [270, 0], "r3": [125, 225]})
+
+    c1 = alt.Chart(data).mark_bar(size=height_var).encode(x="r1")
+
+    c2 = alt.Chart(data).mark_bar(size=inner_var).encode(x="r2")
+
+    c3 = alt.Chart(data).mark_tick(size=tick_var).encode(x="r3")
+
+    c = (c1 + c2 + c3).add_params(height_var)
+
+    dct = c.to_dict()
+    expr_set = {d["mark"]["size"]["expr"] for d in dct["layer"]}
+
+    assert "height" in expr_set
+    assert "(height / 2)" in expr_set
+    assert "((3 * height) / 4)" in expr_set
+
+
+def test_selection_deprecation():
+    # We use the `warnings.catch_warnings` context so pytest will also report deprecation warnings
+    with warnings.catch_warnings():
+        warnings.simplefilter("error")
+
+        # new syntax
+        alt.selection_point()
+        alt.selection_interval()
+
+        # this v4 syntax is deprecated
+        with pytest.warns(alt.utils.deprecation.AltairDeprecationWarning):
+            alt.selection_single()
+        with pytest.warns(alt.utils.deprecation.AltairDeprecationWarning):
+            alt.selection_multi()
+
+        # new syntax
+        brush = alt.selection_interval()
+        c = alt.Chart().mark_point()
+        c.add_params(brush)
+
+        # this v4 syntax is deprecated
+        brush = alt.selection_interval()
+        c = alt.Chart().mark_point()
+        with pytest.warns(alt.utils.deprecation.AltairDeprecationWarning):
+            c.add_selection(brush)
+
+
+def test_parameter_naming():
+    # test explicit naming
+    prm = alt.param(name="some_name")
+    assert prm.param.name == "some_name"
+
+    # test automatic naming which has the form such as param_5
+    prm0, prm1, prm2 = [alt.param() for _ in range(3)]
+
+    res = re.match("param_([0-9]+)", prm0.param.name)
+
+    assert res
+
+    num = int(res[1])
+    assert prm1.param.name == f"param_{num+1}"
+    assert prm2.param.name == f"param_{num+2}"
+
+
+def test_selection_expression():
+    data = pd.DataFrame([{"a": "A", "b": 28}])
+
+    sel = alt.selection_point(fields=["b"])
+    se = sel.b | 300
+
+    assert isinstance(se, alt.SelectionExpression)
+    assert isinstance(se.expr, alt.expr.core.Expression)
+
+    c = (
+        alt.Chart(data)
+        .mark_point()
+        .encode(
+            x="a:N",
+            y="b:Q",
+            size=alt.value(se),
+        )
+        .add_params(sel)
+    )
+
+    dct = c.to_dict()
+    expr_str = str(se.expr)
+
+    assert dct["encoding"]["size"]["value"]["expr"] == expr_str
+
+
+def test_selection_condition():
+    sel = alt.selection_point(empty=False)
+
+    c = (
+        alt.Chart()
+        .mark_point()
+        .encode(size=alt.condition(sel, alt.value(100), alt.value(10)))
+        .add_params(sel)
+    )
+
+    dct = c.to_dict()
+
+    param_name = sel.param.name
+
+    cond = dct["encoding"]["size"]["condition"]
+
+    assert cond["value"] == 100
+    assert cond["param"] == param_name
+
+    # The else condition
+    assert dct["encoding"]["size"]["value"] == 10
+
+
+def test_creation_views_params_layered_repeat_chart():
+    import altair as alt
+    from vega_datasets import data
+
+    source = alt.UrlData(data.flights_2k.url, format={"parse": {"date": "date"}})
+
+    brush = alt.selection_interval(encodings=["x"])
+
+    # Define the base chart, with the common parts of the
+    # background and highlights
+    base = (
+        alt.Chart(width=160, height=130)
+        .mark_bar()
+        .encode(x=alt.X(alt.repeat("column")).bin(maxbins=20), y="count()")
+    )
+
+    # gray background with selection
+    background = base.encode(color=alt.value("#ddd")).add_params(brush)
+
+    # blue highlights on the transformed data
+    highlight = base.transform_filter(brush)
+
+    # layer the two charts & repeat
+    c = (
+        alt.layer(background, highlight, data=source)
+        .transform_calculate("time", "hours(datum.date)")
+        .repeat(column=["distance", "delay", "time"])
+    )
+
+    dct = c.to_dict()
+    assert "child__column_distance_view_" in dct["params"][0]["views"][0]
diff --git a/altair/vegalite/v4/tests/test_renderers.py b/tests/vegalite/v5/test_renderers.py
similarity index 95%
rename from altair/vegalite/v4/tests/test_renderers.py
rename to tests/vegalite/v5/test_renderers.py
index 55c5e4f..8a62829 100644
--- a/altair/vegalite/v4/tests/test_renderers.py
+++ b/tests/vegalite/v5/test_renderers.py
@@ -4,7 +4,7 @@ import json
 
 import pytest
 
-import altair.vegalite.v4 as alt
+import altair.vegalite.v5 as alt
 
 
 @pytest.fixture
@@ -25,7 +25,7 @@ def test_html_renderer_embed_options(chart, renderer="html"):
     with alt.renderers.enable(renderer):
         assert_has_options(chart, mode="vega-lite")
 
-        with alt.renderers.enable(embed_options=dict(actions={"export": True})):
+        with alt.renderers.enable(embed_options={"actions": {"export": True}}):
             assert_has_options(chart, mode="vega-lite", actions={"export": True})
 
         with alt.renderers.set_embed_options(actions=True):
diff --git a/altair/vegalite/v4/tests/test_theme.py b/tests/vegalite/v5/test_theme.py
similarity index 71%
rename from altair/vegalite/v4/tests/test_theme.py
rename to tests/vegalite/v5/test_theme.py
index d159d2f..0eab554 100644
--- a/altair/vegalite/v4/tests/test_theme.py
+++ b/tests/vegalite/v5/test_theme.py
@@ -1,7 +1,7 @@
 import pytest
 
-import altair.vegalite.v4 as alt
-from altair.vegalite.v4.theme import VEGA_THEMES
+import altair.vegalite.v5 as alt
+from altair.vegalite.v5.theme import VEGA_THEMES
 
 
 @pytest.fixture
@@ -15,5 +15,5 @@ def test_vega_themes(chart):
             dct = chart.to_dict()
         assert dct["usermeta"] == {"embedOptions": {"theme": theme}}
         assert dct["config"] == {
-            "view": {"continuousWidth": 400, "continuousHeight": 300}
+            "view": {"continuousWidth": 300, "continuousHeight": 300}
         }
diff --git a/tools/generate_api_docs.py b/tools/generate_api_docs.py
index a70c3aa..20335c1 100644
--- a/tools/generate_api_docs.py
+++ b/tools/generate_api_docs.py
@@ -1,20 +1,20 @@
 """
-This script fills the contents of doc/user_guide/API.rst
+This script fills the contents of doc/user_guide/api.rst
 based on the updated Altair schema.
 """
-from os.path import abspath, dirname, join
 import sys
 import types
+from os.path import abspath, dirname, join
 
 # Import Altair from head
 ROOT_DIR = abspath(join(dirname(__file__), ".."))
 sys.path.insert(0, ROOT_DIR)
 import altair as alt  # noqa: E402
 
-API_FILENAME = join(ROOT_DIR, "doc", "user_guide", "API.rst")
+API_FILENAME = join(ROOT_DIR, "doc", "user_guide", "api.rst")
 
 API_TEMPLATE = """\
-.. _API:
+.. _api:
 
 API Reference
 =============
@@ -93,11 +93,24 @@ def encoding_wrappers():
 
 
 def api_functions():
-    return sorted(iter_objects(alt.api, restrict_to_type=types.FunctionType))
+    # Exclude typing.cast
+    altair_api_functions = [
+        obj_name
+        for obj_name in iter_objects(alt.api, restrict_to_type=types.FunctionType)
+        if obj_name != "cast"
+    ]
+    return sorted(altair_api_functions)
 
 
 def lowlevel_wrappers():
-    return sorted(iter_objects(alt.schema.core, restrict_to_subclass=alt.SchemaBase))
+    objects = sorted(iter_objects(alt.schema.core, restrict_to_subclass=alt.SchemaBase))
+    # The names of these two classes are also used for classes in alt.channels. Due to
+    # how imports are set up, these channel classes overwrite the two low-level classes
+    # in the top-level Altair namespace. Therefore, they cannot be imported as e.g.
+    # altair.Color (which gives you the Channel class) and therefore Sphinx won't
+    # be able to produce a documentation page.
+    objects = [o for o in objects if o not in ("Color", "Text")]
+    return objects
 
 
 def write_api_file():
diff --git a/tools/generate_schema_wrapper.py b/tools/generate_schema_wrapper.py
index 843f8aa..7317495 100644
--- a/tools/generate_schema_wrapper.py
+++ b/tools/generate_schema_wrapper.py
@@ -12,8 +12,13 @@ from urllib import request
 
 import m2r
 
-# import schemapi from here
-sys.path.insert(0, abspath(dirname(__file__)))
+
+# Add path so that schemapi can be imported from the tools folder
+current_dir = dirname(__file__)
+sys.path.insert(0, abspath(current_dir))
+# And another path so that Altair can be imported from head. This is relevant when
+# generate_api_docs is imported in the main function
+sys.path.insert(0, abspath(join(current_dir, "..")))
 from schemapi import codegen  # noqa: E402
 from schemapi.codegen import CodeSnippet  # noqa: E402
 from schemapi.utils import (  # noqa: E402
@@ -22,51 +27,19 @@ from schemapi.utils import (  # noqa: E402
     indent_arglist,
     resolve_references,
 )
-import generate_api_docs  # noqa: E402
 
 # Map of version name to github branch name.
 SCHEMA_VERSION = {
-    "vega": {"v5": "v5.10.0"},
-    "vega-lite": {"v3": "v3.4.0", "v4": "v4.17.0"}
-    # "vega-lite": {"v3": "v3.4.0", "v4": "v4.8.1"},
+    "vega-lite": {"v5": "v5.8.0"},
 }
 
 reLink = re.compile(r"(?<=\[)([^\]]+)(?=\]\([^\)]+\))", re.M)
 reSpecial = re.compile(r"[*_]{2,3}|`", re.M)
 
-
-class SchemaGenerator(codegen.SchemaGenerator):
-    schema_class_template = textwrap.dedent(
-        '''
-    class {classname}({basename}):
-        """{docstring}"""
-        _schema = {schema!r}
-
-        {init_code}
-    '''
-    )
-
-    def _process_description(self, description):
-        description = "".join(
-            [
-                reSpecial.sub("", d) if i % 2 else d
-                for i, d in enumerate(reLink.split(description))
-            ]
-        )  # remove formatting from links
-        description = m2r.convert(description)
-        description = description.replace(m2r.prolog, "")
-        description = description.replace(":raw-html-m2r:", ":raw-html:")
-        description = description.replace(r"\ ,", ",")
-        description = description.replace(r"\ ", " ")
-        # turn explicit references into anonymous references
-        description = description.replace(">`_", ">`__")
-        description += "\n"
-        return description.strip()
-
-
-def schema_class(*args, **kwargs):
-    return SchemaGenerator(*args, **kwargs).schema_class()
-
+HEADER = """\
+# The contents of this file are automatically written by
+# tools/generate_schema_wrapper.py. Do not modify directly.
+"""
 
 SCHEMA_URL_TEMPLATE = "https://vega.github.io/schema/" "{library}/{version}.json"
 
@@ -89,7 +62,7 @@ def load_schema():
 
 
 CHANNEL_MIXINS = """
-class FieldChannelMixin(object):
+class FieldChannelMixin:
     def to_dict(self, validate=True, ignore=(), context=None):
         context = context or {}
         shorthand = self._get('shorthand')
@@ -119,9 +92,12 @@ class FieldChannelMixin(object):
                 parsed.pop('type', None)
             elif not (type_in_shorthand or type_defined_explicitly):
                 if isinstance(context.get('data', None), pd.DataFrame):
-                    raise ValueError("{} encoding field is specified without a type; "
-                                     "the type cannot be inferred because it does not "
-                                     "match any column in the data.".format(shorthand))
+                    raise ValueError(
+                        'Unable to determine data type for the field "{}";'
+                        " verify that the field name is not misspelled."
+                        " If you are referencing a field from a transform,"
+                        " also confirm that the data type is specified correctly.".format(shorthand)
+                    )
                 else:
                     raise ValueError("{} encoding field is specified without a type; "
                                      "the type cannot be automatically inferred because "
@@ -131,11 +107,8 @@ class FieldChannelMixin(object):
             # Shorthand is not a string; we pass the definition to field,
             # and do not do any parsing.
             parsed = {'field': shorthand}
+        context["parsed_shorthand"] = parsed
 
-        # Set shorthand to Undefined, because it's not part of the base schema.
-        self.shorthand = Undefined
-        self._kwds.update({k: v for k, v in parsed.items()
-                           if self._get(k) is Undefined})
         return super(FieldChannelMixin, self).to_dict(
             validate=validate,
             ignore=ignore,
@@ -143,10 +116,10 @@ class FieldChannelMixin(object):
         )
 
 
-class ValueChannelMixin(object):
+class ValueChannelMixin:
     def to_dict(self, validate=True, ignore=(), context=None):
         context = context or {}
-        condition = getattr(self, 'condition', Undefined)
+        condition = self._get('condition', Undefined)
         copy = self  # don't copy unless we need to
         if condition is not Undefined:
             if isinstance(condition, core.SchemaBase):
@@ -154,16 +127,16 @@ class ValueChannelMixin(object):
             elif 'field' in condition and 'type' not in condition:
                 kwds = parse_shorthand(condition['field'], context.get('data', None))
                 copy = self.copy(deep=['condition'])
-                copy.condition.update(kwds)
+                copy['condition'].update(kwds)
         return super(ValueChannelMixin, copy).to_dict(validate=validate,
                                                       ignore=ignore,
                                                       context=context)
 
 
-class DatumChannelMixin(object):
+class DatumChannelMixin:
     def to_dict(self, validate=True, ignore=(), context=None):
         context = context or {}
-        datum = getattr(self, 'datum', Undefined)
+        datum = self._get('datum', Undefined)
         copy = self  # don't copy unless we need to
         if datum is not Undefined:
             if isinstance(datum, core.SchemaBase):
@@ -173,15 +146,80 @@ class DatumChannelMixin(object):
                                                       context=context)
 """
 
+MARK_METHOD = '''
+def mark_{mark}({def_arglist}) -> Self:
+    """Set the chart's mark to '{mark}' (see :class:`{mark_def}`)
+    """
+    kwds = dict({dict_arglist})
+    copy = self.copy(deep=False)
+    if any(val is not Undefined for val in kwds.values()):
+        copy.mark = core.{mark_def}(type="{mark}", **kwds)
+    else:
+        copy.mark = "{mark}"
+    return copy
+'''
+
+CONFIG_METHOD = """
+@use_signature(core.{classname})
+def {method}(self, *args, **kwargs) -> Self:
+    copy = self.copy(deep=False)
+    copy.config = core.{classname}(*args, **kwargs)
+    return copy
+"""
+
+CONFIG_PROP_METHOD = """
+@use_signature(core.{classname})
+def configure_{prop}(self, *args, **kwargs) -> Self:
+    copy = self.copy(deep=['config'])
+    if copy.config is Undefined:
+        copy.config = core.Config()
+    copy.config["{prop}"] = core.{classname}(*args, **kwargs)
+    return copy
+"""
+
+
+class SchemaGenerator(codegen.SchemaGenerator):
+    schema_class_template = textwrap.dedent(
+        '''
+    class {classname}({basename}):
+        """{docstring}"""
+        _schema = {schema!r}
+
+        {init_code}
+    '''
+    )
+
+    def _process_description(self, description):
+        description = "".join(
+            [
+                reSpecial.sub("", d) if i % 2 else d
+                for i, d in enumerate(reLink.split(description))
+            ]
+        )  # remove formatting from links
+        description = m2r.convert(description)
+        description = description.replace(m2r.prolog, "")
+        description = description.replace(":raw-html-m2r:", ":raw-html:")
+        description = description.replace(r"\ ,", ",")
+        description = description.replace(r"\ ", " ")
+        # turn explicit references into anonymous references
+        description = description.replace(">`_", ">`__")
+        # Some entries in the Vega-Lite schema miss the second occurence of '__'
+        description = description.replace("__Default value: ", "__Default value:__ ")
+        description += "\n"
+        return description.strip()
+
 
 class FieldSchemaGenerator(SchemaGenerator):
     schema_class_template = textwrap.dedent(
         '''
+    @with_property_setters
     class {classname}(FieldChannelMixin, core.{basename}):
         """{docstring}"""
         _class_is_valid_at_instantiation = False
         _encoding_name = "{encodingname}"
 
+        {method_code}
+
         {init_code}
     '''
     )
@@ -190,11 +228,14 @@ class FieldSchemaGenerator(SchemaGenerator):
 class ValueSchemaGenerator(SchemaGenerator):
     schema_class_template = textwrap.dedent(
         '''
+    @with_property_setters
     class {classname}(ValueChannelMixin, core.{basename}):
         """{docstring}"""
         _class_is_valid_at_instantiation = False
         _encoding_name = "{encodingname}"
 
+        {method_code}
+
         {init_code}
     '''
     )
@@ -203,19 +244,21 @@ class ValueSchemaGenerator(SchemaGenerator):
 class DatumSchemaGenerator(SchemaGenerator):
     schema_class_template = textwrap.dedent(
         '''
+    @with_property_setters
     class {classname}(DatumChannelMixin, core.{basename}):
         """{docstring}"""
         _class_is_valid_at_instantiation = False
         _encoding_name = "{encodingname}"
+
+        {method_code}
+
         {init_code}
     '''
     )
 
 
-HEADER = """\
-# The contents of this file are automatically written by
-# tools/generate_schema_wrapper.py. Do not modify directly.
-"""
+def schema_class(*args, **kwargs):
+    return SchemaGenerator(*args, **kwargs).schema_class()
 
 
 def schema_url(library, version):
@@ -237,7 +280,7 @@ def download_schemafile(library, version, schemapath, skip_download=False):
 
 def copy_schemapi_util():
     """
-    Copy the schemapi utility and its test file into altair/utils/
+    Copy the schemapi utility into altair/utils/ and its test file to tests/utils/
     """
     # copy the schemapi utility file
     source_path = abspath(join(dirname(__file__), "schemapi", "schemapi.py"))
@@ -251,20 +294,6 @@ def copy_schemapi_util():
             dest.write(HEADER)
             dest.writelines(source.readlines())
 
-    # Copy the schemapi test file
-    source_path = abspath(
-        join(dirname(__file__), "schemapi", "tests", "test_schemapi.py")
-    )
-    destination_path = abspath(
-        join(dirname(__file__), "..", "altair", "utils", "tests", "test_schemapi.py")
-    )
-
-    print("Copying\n {}\n  -> {}".format(source_path, destination_path))
-    with open(source_path, "r", encoding="utf8") as source:
-        with open(destination_path, "w", encoding="utf8") as dest:
-            dest.write(HEADER)
-            dest.writelines(source.readlines())
-
 
 def recursive_dict_update(schema, root, def_dict):
     if "$ref" in schema:
@@ -382,55 +411,23 @@ def generate_vegalite_schema_wrapper(schema_file):
     return "\n".join(contents)
 
 
-def generate_vega_schema_wrapper(schema_file):
-    """Generate a schema wrapper at the given path."""
-    # TODO: generate simple tests for each wrapper
-    basename = "VegaSchema"
-
-    with open(schema_file, encoding="utf8") as f:
-        rootschema = json.load(f)
-    contents = [
-        HEADER,
-        "from altair.utils.schemapi import SchemaBase, Undefined, _subclasses",
-        LOAD_SCHEMA.format(schemafile="vega-schema.json"),
-    ]
-    contents.append(BASE_SCHEMA.format(basename=basename))
-    contents.append(
-        schema_class(
-            "Root",
-            schema=rootschema,
-            basename=basename,
-            schemarepr=CodeSnippet("{}._rootschema".format(basename)),
-        )
-    )
-    for deflist in ["defs", "refs"]:
-        for name in rootschema[deflist]:
-            defschema = {"$ref": "#/{}/{}".format(deflist, name)}
-            defschema_repr = {"$ref": "#/{}/{}".format(deflist, name)}
-            contents.append(
-                schema_class(
-                    get_valid_identifier(name),
-                    schema=defschema,
-                    schemarepr=defschema_repr,
-                    rootschema=rootschema,
-                    basename=basename,
-                    rootschemarepr=CodeSnippet("Root._schema"),
-                )
-            )
-    contents.append("")  # end with newline
-    return "\n".join(contents)
-
-
 def generate_vegalite_channel_wrappers(schemafile, version, imports=None):
     # TODO: generate __all__ for top of file
     with open(schemafile, encoding="utf8") as f:
         schema = json.load(f)
     if imports is None:
         imports = [
+            "import sys",
             "from . import core",
             "import pandas as pd",
-            "from altair.utils.schemapi import Undefined",
+            "from altair.utils.schemapi import Undefined, with_property_setters",
             "from altair.utils import parse_shorthand",
+            "from typing import overload, List",
+            "",
+            "if sys.version_info >= (3, 8):",
+            "    from typing import Literal",
+            "else:",
+            "    from typing_extensions import Literal",
         ]
     contents = [HEADER]
     contents.extend(imports)
@@ -485,35 +482,25 @@ def generate_vegalite_channel_wrappers(schemafile, version, imports=None):
                 rootschema=schema,
                 encodingname=prop,
                 nodefault=nodefault,
+                haspropsetters=True,
             )
             contents.append(gen.schema_class())
     return "\n".join(contents)
 
 
-MARK_METHOD = '''
-def mark_{mark}({def_arglist}):
-    """Set the chart's mark to '{mark}'
-
-    For information on additional arguments, see :class:`{mark_def}`
-    """
-    kwds = dict({dict_arglist})
-    copy = self.copy(deep=False)
-    if any(val is not Undefined for val in kwds.values()):
-        copy.mark = core.{mark_def}(type="{mark}", **kwds)
-    else:
-        copy.mark = "{mark}"
-    return copy
-'''
-
-
 def generate_vegalite_mark_mixin(schemafile, markdefs):
     with open(schemafile, encoding="utf8") as f:
         schema = json.load(f)
 
-    imports = ["from altair.utils.schemapi import Undefined", "from . import core"]
+    class_name = "MarkMethodMixin"
+
+    imports = [
+        "from altair.utils.schemapi import Undefined",
+        "from . import core",
+    ]
 
     code = [
-        "class MarkMethodMixin(object):",
+        f"class {class_name}:",
         '    """A mixin class that defines mark methods"""',
     ]
 
@@ -551,29 +538,13 @@ def generate_vegalite_mark_mixin(schemafile, markdefs):
     return imports, "\n".join(code)
 
 
-CONFIG_METHOD = """
-@use_signature(core.{classname})
-def {method}(self, *args, **kwargs):
-    copy = self.copy(deep=False)
-    copy.config = core.{classname}(*args, **kwargs)
-    return copy
-"""
-
-CONFIG_PROP_METHOD = """
-@use_signature(core.{classname})
-def configure_{prop}(self, *args, **kwargs):
-    copy = self.copy(deep=['config'])
-    if copy.config is Undefined:
-        copy.config = core.Config()
-    copy.config["{prop}"] = core.{classname}(*args, **kwargs)
-    return copy
-"""
-
-
 def generate_vegalite_config_mixin(schemafile):
     imports = ["from . import core", "from altair.utils import use_signature"]
+
+    class_name = "ConfigMethodMixin"
+
     code = [
-        "class ConfigMethodMixin(object):",
+        f"class {class_name}:",
         '    """A mixin class that defines config methods"""',
     ]
     with open(schemafile, encoding="utf8") as f:
@@ -610,7 +581,7 @@ def vegalite_main(skip_download=False):
         outfile = join(schemapath, "__init__.py")
         print("Writing {}".format(outfile))
         with open(outfile, "w", encoding="utf8") as f:
-            f.write("# flake8: noqa\n")
+            f.write("# ruff: noqa\n")
             f.write("from .core import *\nfrom .channels import *\n")
             f.write(
                 "SCHEMA_VERSION = {!r}\n" "".format(SCHEMA_VERSION[library][version])
@@ -642,48 +613,27 @@ def vegalite_main(skip_download=False):
         print("Generating\n {}\n  ->{}".format(schemafile, outfile))
         mark_imports, mark_mixin = generate_vegalite_mark_mixin(schemafile, markdefs)
         config_imports, config_mixin = generate_vegalite_config_mixin(schemafile)
+        try_except_imports = [
+            "if sys.version_info >= (3, 11):",
+            "    from typing import Self",
+            "else:",
+            "    from typing_extensions import Self",
+        ]
+        stdlib_imports = ["import sys"]
         imports = sorted(set(mark_imports + config_imports))
         with open(outfile, "w", encoding="utf8") as f:
             f.write(HEADER)
+            f.write("\n".join(stdlib_imports))
+            f.write("\n\n")
             f.write("\n".join(imports))
+            f.write("\n\n")
+            f.write("\n".join(try_except_imports))
             f.write("\n\n\n")
             f.write(mark_mixin)
             f.write("\n\n\n")
             f.write(config_mixin)
 
 
-def vega_main(skip_download=False):
-    library = "vega"
-
-    for version in SCHEMA_VERSION[library]:
-        path = abspath(join(dirname(__file__), "..", "altair", "vega", version))
-        schemapath = os.path.join(path, "schema")
-        schemafile = download_schemafile(
-            library=library,
-            version=version,
-            schemapath=schemapath,
-            skip_download=skip_download,
-        )
-
-        # Generate __init__.py file
-        outfile = join(schemapath, "__init__.py")
-        print("Writing {}".format(outfile))
-        with open(outfile, "w", encoding="utf8") as f:
-            f.write("# flake8: noqa\n")
-            f.write("from .core import *\n\n")
-            f.write(
-                "SCHEMA_VERSION = {!r}\n" "".format(SCHEMA_VERSION[library][version])
-            )
-            f.write("SCHEMA_URL = {!r}\n" "".format(schema_url(library, version)))
-
-        # Generate the core schema wrappers
-        outfile = join(schemapath, "core.py")
-        print("Generating\n {}\n  ->{}".format(schemafile, outfile))
-        file_contents = generate_vega_schema_wrapper(schemafile)
-        with open(outfile, "w", encoding="utf8") as f:
-            f.write(file_contents)
-
-
 def main():
     parser = argparse.ArgumentParser(
         prog="generate_schema_wrapper.py", description="Generate the Altair package."
@@ -694,9 +644,14 @@ def main():
     args = parser.parse_args()
     copy_schemapi_util()
     vegalite_main(args.skip_download)
-    vega_main(args.skip_download)
+
+    # The modules below are imported after the generation of the new schema files
+    # as these modules import Altair. This allows them to use the new changes
+    import generate_api_docs  # noqa: E402
+    import update_init_file  # noqa: E402
 
     generate_api_docs.write_api_file()
+    update_init_file.update__all__variable()
 
 
 if __name__ == "__main__":
diff --git a/tools/schemapi/__init__.py b/tools/schemapi/__init__.py
index e0bd111..a83c4e3 100644
--- a/tools/schemapi/__init__.py
+++ b/tools/schemapi/__init__.py
@@ -2,8 +2,7 @@
 schemapi: tools for generating Python APIs from JSON schemas
 """
 from .schemapi import SchemaBase, Undefined
-from .decorator import schemaclass
 from .utils import SchemaInfo
 
 
-__all__ = ("SchemaBase", "Undefined", "schemaclass", "SchemaInfo")
+__all__ = ("SchemaBase", "Undefined", "SchemaInfo")
diff --git a/tools/schemapi/codegen.py b/tools/schemapi/codegen.py
index 78460e5..acf99d8 100644
--- a/tools/schemapi/codegen.py
+++ b/tools/schemapi/codegen.py
@@ -5,7 +5,7 @@ import textwrap
 import re
 
 
-class CodeSnippet(object):
+class CodeSnippet:
     """Object whose repr() is a string of code"""
 
     def __init__(self, code):
@@ -56,7 +56,7 @@ def _get_args(info):
     return (nonkeyword, required, kwds, invalid_kwds, additional)
 
 
-class SchemaGenerator(object):
+class SchemaGenerator:
     """Class that defines methods for generating code from schemas
 
     Parameters
@@ -111,6 +111,7 @@ class SchemaGenerator(object):
         schemarepr=None,
         rootschemarepr=None,
         nodefault=(),
+        haspropsetters=False,
         **kwargs,
     ):
         self.classname = classname
@@ -120,6 +121,7 @@ class SchemaGenerator(object):
         self.schemarepr = schemarepr
         self.rootschemarepr = rootschemarepr
         self.nodefault = nodefault
+        self.haspropsetters = haspropsetters
         self.kwargs = kwargs
 
     def subclasses(self):
@@ -148,6 +150,7 @@ class SchemaGenerator(object):
             rootschema=rootschemarepr,
             docstring=self.docstring(indent=4),
             init_code=self.init_code(indent=4),
+            method_code=self.method_code(indent=4),
             **self.kwargs,
         )
 
@@ -162,22 +165,29 @@ class SchemaGenerator(object):
             doc += self._process_description(  # remove condition description
                 re.sub(r"\n\{\n(\n|.)*\n\}", "", info.description)
             ).splitlines()
+        # Remove lines which contain the "raw-html" directive which cannot be processed
+        # by Sphinx at this level of the docstring. It works for descriptions
+        # of attributes which is why we do not do the same below. The removed
+        # lines are anyway non-descriptive for a user.
+        doc = [line for line in doc if ":raw-html:" not in line]
 
         if info.properties:
             nonkeyword, required, kwds, invalid_kwds, additional = _get_args(info)
-            doc += ["", "Attributes", "----------", ""]
+            doc += ["", "Parameters", "----------", ""]
             for prop in sorted(required) + sorted(kwds) + sorted(invalid_kwds):
                 propinfo = info.properties[prop]
                 doc += [
                     "{} : {}".format(prop, propinfo.short_description),
-                    "    {}".format(self._process_description(propinfo.description)),
+                    "    {}".format(
+                        self._process_description(propinfo.deep_description)
+                    ),
                 ]
         if len(doc) > 1:
             doc += [""]
         return indent_docstring(doc, indent_level=indent, width=100, lstrip=True)
 
     def init_code(self, indent=0):
-        """Return code suitablde for the __init__ function of a Schema class"""
+        """Return code suitable for the __init__ function of a Schema class"""
         info = SchemaInfo(self.schema, rootschema=self.rootschema)
         nonkeyword, required, kwds, invalid_kwds, additional = _get_args(info)
 
@@ -188,6 +198,8 @@ class SchemaGenerator(object):
         args = ["self"]
         super_args = []
 
+        self.init_kwds = sorted(kwds)
+
         if nodefault:
             args.extend(sorted(nodefault))
         elif nonkeyword:
@@ -217,3 +229,98 @@ class SchemaGenerator(object):
         if indent:
             initfunc = ("\n" + indent * " ").join(initfunc.splitlines())
         return initfunc
+
+    _equiv_python_types = {
+        "string": "str",
+        "number": "float",
+        "integer": "int",
+        "object": "dict",
+        "boolean": "bool",
+        "array": "list",
+        "null": "None",
+    }
+
+    def get_args(self, si):
+        contents = ["self"]
+        props = []
+        if si.is_anyOf():
+            props = sorted({p for si_sub in si.anyOf for p in si_sub.properties})
+        elif si.properties:
+            props = si.properties
+
+        if props:
+            contents.extend([p + "=Undefined" for p in props])
+        elif si.type:
+            py_type = self._equiv_python_types[si.type]
+            if py_type == "list":
+                # Try to get a type hint like "List[str]" which is more specific
+                # then just "list"
+                item_vl_type = si.items.get("type", None)
+                if item_vl_type is not None:
+                    item_type = self._equiv_python_types[item_vl_type]
+                else:
+                    item_si = SchemaInfo(si.items, self.rootschema)
+                    assert item_si.is_reference()
+                    altair_class_name = item_si.title
+                    item_type = f"core.{altair_class_name}"
+                py_type = f"List[{item_type}]"
+            elif si.is_enum():
+                # If it's an enum, we can type hint it as a Literal which tells
+                # a type checker that only the values in enum are acceptable
+                enum_values = [f'"{v}"' for v in si.enum]
+                py_type = f"Literal[{', '.join(enum_values)}]"
+            contents.append(f"_: {py_type}")
+
+        contents.append("**kwds")
+
+        return contents
+
+    def get_signature(self, attr, sub_si, indent, has_overload=False):
+        lines = []
+        if has_overload:
+            lines.append("@overload  # type: ignore[no-overload-impl]")
+        args = ", ".join(self.get_args(sub_si))
+        lines.append(f"def {attr}({args}) -> '{self.classname}':")
+        lines.append(indent * " " + "...\n")
+        return lines
+
+    def setter_hint(self, attr, indent):
+        si = SchemaInfo(self.schema, self.rootschema).properties[attr]
+        if si.is_anyOf():
+            return self._get_signature_any_of(si, attr, indent)
+        else:
+            return self.get_signature(attr, si, indent)
+
+    def _get_signature_any_of(self, si: SchemaInfo, attr, indent):
+        signatures = []
+        for sub_si in si.anyOf:
+            if sub_si.is_anyOf():
+                # Recursively call method again to go a level deeper
+                signatures.extend(self._get_signature_any_of(sub_si, attr, indent))
+            else:
+                signatures.extend(
+                    self.get_signature(attr, sub_si, indent, has_overload=True)
+                )
+        return list(flatten(signatures))
+
+    def method_code(self, indent=0):
+        """Return code to assist setter methods"""
+        if not self.haspropsetters:
+            return None
+        args = self.init_kwds
+        type_hints = [hint for a in args for hint in self.setter_hint(a, indent)]
+
+        return ("\n" + indent * " ").join(type_hints)
+
+
+def flatten(container):
+    """Flatten arbitrarily flattened list
+
+    From https://stackoverflow.com/a/10824420
+    """
+    for i in container:
+        if isinstance(i, (list, tuple)):
+            for j in flatten(i):
+                yield j
+        else:
+            yield i
diff --git a/tools/schemapi/decorator.py b/tools/schemapi/decorator.py
deleted file mode 100644
index 4f90533..0000000
--- a/tools/schemapi/decorator.py
+++ /dev/null
@@ -1,58 +0,0 @@
-import warnings
-from . import codegen, SchemaBase, Undefined
-
-
-def schemaclass(*args, init_func=True, docstring=True, property_map=True):
-    """A decorator to add boilerplate to a schema class
-
-    This will read the _json_schema attribute of a SchemaBase class, and add
-    one or all of three attributes/methods, based on the schema:
-
-    - An __init__ function
-    - a __doc__ docstring
-
-    In all cases, if the attribute/method is explicitly defined in the class
-    it will not be overwritten.
-
-    A simple invocation adds all three attributes/methods:
-
-        @schemaclass
-        class MySchema(SchemaBase):
-            __schema = {...}
-
-    Optionally, you can invoke schemaclass with arguments to turn off
-    some of the added behaviors:
-
-        @schemaclass(init_func=True, docstring=False)
-        class MySchema(SchemaBase):
-            __schema = {...}
-    """
-
-    def _decorator(cls, init_func=init_func, docstring=docstring):
-        if not (isinstance(cls, type) and issubclass(cls, SchemaBase)):
-            warnings.warn("class is not an instance of SchemaBase.")
-
-        name = cls.__name__
-        gen = codegen.SchemaGenerator(
-            name, schema=cls._schema, rootschema=cls._rootschema
-        )
-
-        if init_func and "__init__" not in cls.__dict__:
-            init_code = gen.init_code()
-            globals_ = {name: cls, "Undefined": Undefined}
-            locals_ = {}
-            exec(init_code, globals_, locals_)
-            setattr(cls, "__init__", locals_["__init__"])
-
-        if docstring and not cls.__doc__:
-            setattr(cls, "__doc__", gen.docstring())
-        return cls
-
-    if len(args) == 0:
-        return _decorator
-    elif len(args) == 1:
-        return _decorator(args[0])
-    else:
-        raise ValueError(
-            "optional arguments to schemaclass must be " "passed by keyword"
-        )
diff --git a/tools/schemapi/jsonschema-draft04.json b/tools/schemapi/jsonschema-draft04.json
deleted file mode 100644
index bcbb847..0000000
--- a/tools/schemapi/jsonschema-draft04.json
+++ /dev/null
@@ -1,149 +0,0 @@
-{
-    "id": "http://json-schema.org/draft-04/schema#",
-    "$schema": "http://json-schema.org/draft-04/schema#",
-    "description": "Core schema meta-schema",
-    "definitions": {
-        "schemaArray": {
-            "type": "array",
-            "minItems": 1,
-            "items": { "$ref": "#" }
-        },
-        "positiveInteger": {
-            "type": "integer",
-            "minimum": 0
-        },
-        "positiveIntegerDefault0": {
-            "allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
-        },
-        "simpleTypes": {
-            "enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
-        },
-        "stringArray": {
-            "type": "array",
-            "items": { "type": "string" },
-            "minItems": 1,
-            "uniqueItems": true
-        }
-    },
-    "type": "object",
-    "properties": {
-        "id": {
-            "type": "string"
-        },
-        "$schema": {
-            "type": "string"
-        },
-        "title": {
-            "type": "string"
-        },
-        "description": {
-            "type": "string"
-        },
-        "default": {},
-        "multipleOf": {
-            "type": "number",
-            "minimum": 0,
-            "exclusiveMinimum": true
-        },
-        "maximum": {
-            "type": "number"
-        },
-        "exclusiveMaximum": {
-            "type": "boolean",
-            "default": false
-        },
-        "minimum": {
-            "type": "number"
-        },
-        "exclusiveMinimum": {
-            "type": "boolean",
-            "default": false
-        },
-        "maxLength": { "$ref": "#/definitions/positiveInteger" },
-        "minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
-        "pattern": {
-            "type": "string",
-            "format": "regex"
-        },
-        "additionalItems": {
-            "anyOf": [
-                { "type": "boolean" },
-                { "$ref": "#" }
-            ],
-            "default": {}
-        },
-        "items": {
-            "anyOf": [
-                { "$ref": "#" },
-                { "$ref": "#/definitions/schemaArray" }
-            ],
-            "default": {}
-        },
-        "maxItems": { "$ref": "#/definitions/positiveInteger" },
-        "minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
-        "uniqueItems": {
-            "type": "boolean",
-            "default": false
-        },
-        "maxProperties": { "$ref": "#/definitions/positiveInteger" },
-        "minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
-        "required": { "$ref": "#/definitions/stringArray" },
-        "additionalProperties": {
-            "anyOf": [
-                { "type": "boolean" },
-                { "$ref": "#" }
-            ],
-            "default": {}
-        },
-        "definitions": {
-            "type": "object",
-            "additionalProperties": { "$ref": "#" },
-            "default": {}
-        },
-        "properties": {
-            "type": "object",
-            "additionalProperties": { "$ref": "#" },
-            "default": {}
-        },
-        "patternProperties": {
-            "type": "object",
-            "additionalProperties": { "$ref": "#" },
-            "default": {}
-        },
-        "dependencies": {
-            "type": "object",
-            "additionalProperties": {
-                "anyOf": [
-                    { "$ref": "#" },
-                    { "$ref": "#/definitions/stringArray" }
-                ]
-            }
-        },
-        "enum": {
-            "type": "array",
-            "minItems": 1,
-            "uniqueItems": true
-        },
-        "type": {
-            "anyOf": [
-                { "$ref": "#/definitions/simpleTypes" },
-                {
-                    "type": "array",
-                    "items": { "$ref": "#/definitions/simpleTypes" },
-                    "minItems": 1,
-                    "uniqueItems": true
-                }
-            ]
-        },
-        "format": { "type": "string" },
-        "allOf": { "$ref": "#/definitions/schemaArray" },
-        "anyOf": { "$ref": "#/definitions/schemaArray" },
-        "oneOf": { "$ref": "#/definitions/schemaArray" },
-        "not": { "$ref": "#" }
-    },
-    "dependencies": {
-        "exclusiveMaximum": [ "maximum" ],
-        "exclusiveMinimum": [ "minimum" ]
-    },
-    "default": {}
-}
diff --git a/tools/schemapi/schemapi.py b/tools/schemapi/schemapi.py
index 3ca87b9..de3e20b 100644
--- a/tools/schemapi/schemapi.py
+++ b/tools/schemapi/schemapi.py
@@ -2,11 +2,31 @@ import collections
 import contextlib
 import inspect
 import json
+import textwrap
+from typing import (
+    Any,
+    Sequence,
+    List,
+    Dict,
+    Optional,
+    DefaultDict,
+    Tuple,
+    Iterable,
+    Type,
+)
+from itertools import zip_longest
 
 import jsonschema
+import jsonschema.exceptions
+import jsonschema.validators
 import numpy as np
 import pandas as pd
 
+from altair import vegalite
+
+ValidationErrorList = List[jsonschema.exceptions.ValidationError]
+GroupedValidationErrors = Dict[str, ValidationErrorList]
+
 
 # If DEBUG_MODE is True, then schema objects are converted to dict and
 # validated at creation time. This slows things down, particularly for
@@ -23,7 +43,7 @@ def enable_debug_mode():
 
 def disable_debug_mode():
     global DEBUG_MODE
-    DEBUG_MODE = True
+    DEBUG_MODE = False
 
 
 @contextlib.contextmanager
@@ -37,6 +57,266 @@ def debug_mode(arg):
         DEBUG_MODE = original
 
 
+def validate_jsonschema(
+    spec: Dict[str, Any],
+    schema: Dict[str, Any],
+    rootschema: Optional[Dict[str, Any]] = None,
+    raise_error: bool = True,
+) -> Optional[jsonschema.exceptions.ValidationError]:
+    """Validates the passed in spec against the schema in the context of the
+    rootschema. If any errors are found, they are deduplicated and prioritized
+    and only the most relevant errors are kept. Errors are then either raised
+    or returned, depending on the value of `raise_error`.
+    """
+    errors = _get_errors_from_spec(spec, schema, rootschema=rootschema)
+    if errors:
+        leaf_errors = _get_leaves_of_error_tree(errors)
+        grouped_errors = _group_errors_by_json_path(leaf_errors)
+        grouped_errors = _subset_to_most_specific_json_paths(grouped_errors)
+        grouped_errors = _deduplicate_errors(grouped_errors)
+
+        # Nothing special about this first error but we need to choose one
+        # which can be raised
+        main_error = list(grouped_errors.values())[0][0]
+        # All errors are then attached as a new attribute to ValidationError so that
+        # they can be used in SchemaValidationError to craft a more helpful
+        # error message. Setting a new attribute like this is not ideal as
+        # it then no longer matches the type ValidationError. It would be better
+        # to refactor this function to never raise but only return errors.
+        main_error._all_errors = grouped_errors  # type: ignore[attr-defined]
+        if raise_error:
+            raise main_error
+        else:
+            return main_error
+    else:
+        return None
+
+
+def _get_errors_from_spec(
+    spec: Dict[str, Any],
+    schema: Dict[str, Any],
+    rootschema: Optional[Dict[str, Any]] = None,
+) -> ValidationErrorList:
+    """Uses the relevant jsonschema validator to validate the passed in spec
+    against the schema using the rootschema to resolve references.
+    The schema and rootschema themselves are not validated but instead considered
+    as valid.
+    """
+    # We don't use jsonschema.validate as this would validate the schema itself.
+    # Instead, we pass the schema directly to the validator class. This is done for
+    # two reasons: The schema comes from Vega-Lite and is not based on the user
+    # input, therefore there is no need to validate it in the first place. Furthermore,
+    # the "uri-reference" format checker fails for some of the references as URIs in
+    # "$ref" are not encoded,
+    # e.g. '#/definitions/ValueDefWithCondition<MarkPropFieldOrDatumDef,
+    # (Gradient|string|null)>' would be a valid $ref in a Vega-Lite schema but
+    # it is not a valid URI reference due to the characters such as '<'.
+    if rootschema is not None:
+        validator_cls = jsonschema.validators.validator_for(rootschema)
+        resolver = jsonschema.RefResolver.from_schema(rootschema)
+    else:
+        validator_cls = jsonschema.validators.validator_for(schema)
+        # No resolver is necessary if the schema is already the full schema
+        resolver = None
+
+    validator_kwargs = {"resolver": resolver}
+    if hasattr(validator_cls, "FORMAT_CHECKER"):
+        validator_kwargs["format_checker"] = validator_cls.FORMAT_CHECKER
+    validator = validator_cls(schema, **validator_kwargs)
+    errors = list(validator.iter_errors(spec))
+    return errors
+
+
+def _json_path(err: jsonschema.exceptions.ValidationError) -> str:
+    """Drop in replacement for the .json_path property of the jsonschema
+    ValidationError class, which is not available as property for
+    ValidationError with jsonschema<4.0.1.
+    More info, see https://github.com/altair-viz/altair/issues/3038
+    """
+    path = "$"
+    for elem in err.absolute_path:
+        if isinstance(elem, int):
+            path += "[" + str(elem) + "]"
+        else:
+            path += "." + elem
+    return path
+
+
+def _group_errors_by_json_path(
+    errors: ValidationErrorList,
+) -> GroupedValidationErrors:
+    """Groups errors by the `json_path` attribute of the jsonschema ValidationError
+    class. This attribute contains the path to the offending element within
+    a chart specification and can therefore be considered as an identifier of an
+    'issue' in the chart that needs to be fixed.
+    """
+    errors_by_json_path = collections.defaultdict(list)
+    for err in errors:
+        err_key = getattr(err, "json_path", _json_path(err))
+        errors_by_json_path[err_key].append(err)
+    return dict(errors_by_json_path)
+
+
+def _get_leaves_of_error_tree(
+    errors: ValidationErrorList,
+) -> ValidationErrorList:
+    """For each error in `errors`, it traverses down the "error tree" that is generated
+    by the jsonschema library to find and return all "leaf" errors. These are errors
+    which have no further errors that caused it and so they are the most specific errors
+    with the most specific error messages.
+    """
+    leaves: ValidationErrorList = []
+    for err in errors:
+        if err.context:
+            # This means that the error `err` was caused by errors in subschemas.
+            # The list of errors from the subschemas are available in the property
+            # `context`.
+            leaves.extend(_get_leaves_of_error_tree(err.context))
+        else:
+            leaves.append(err)
+    return leaves
+
+
+def _subset_to_most_specific_json_paths(
+    errors_by_json_path: GroupedValidationErrors,
+) -> GroupedValidationErrors:
+    """Removes key (json path), value (errors) pairs where the json path is fully
+    contained in another json path. For example if `errors_by_json_path` has two
+    keys, `$.encoding.X` and `$.encoding.X.tooltip`, then the first one will be removed
+    and only the second one is returned. This is done under the assumption that
+    more specific json paths give more helpful error messages to the user.
+    """
+    errors_by_json_path_specific: GroupedValidationErrors = {}
+    for json_path, errors in errors_by_json_path.items():
+        if not _contained_at_start_of_one_of_other_values(
+            json_path, list(errors_by_json_path.keys())
+        ):
+            errors_by_json_path_specific[json_path] = errors
+    return errors_by_json_path_specific
+
+
+def _contained_at_start_of_one_of_other_values(x: str, values: Sequence[str]) -> bool:
+    # Does not count as "contained at start of other value" if the values are
+    # the same. These cases should be handled separately
+    return any(value.startswith(x) for value in values if x != value)
+
+
+def _deduplicate_errors(
+    grouped_errors: GroupedValidationErrors,
+) -> GroupedValidationErrors:
+    """Some errors have very similar error messages or are just in general not helpful
+    for a user. This function removes as many of these cases as possible and
+    can be extended over time to handle new cases that come up.
+    """
+    grouped_errors_deduplicated: GroupedValidationErrors = {}
+    for json_path, element_errors in grouped_errors.items():
+        errors_by_validator = _group_errors_by_validator(element_errors)
+
+        deduplication_functions = {
+            "enum": _deduplicate_enum_errors,
+            "additionalProperties": _deduplicate_additional_properties_errors,
+        }
+        deduplicated_errors: ValidationErrorList = []
+        for validator, errors in errors_by_validator.items():
+            deduplication_func = deduplication_functions.get(validator, None)
+            if deduplication_func is not None:
+                errors = deduplication_func(errors)
+            deduplicated_errors.extend(_deduplicate_by_message(errors))
+
+        # Removes any ValidationError "'value' is a required property" as these
+        # errors are unlikely to be the relevant ones for the user. They come from
+        # validation against a schema definition where the output of `alt.value`
+        # would be valid. However, if a user uses `alt.value`, the `value` keyword
+        # is included automatically from that function and so it's unlikely
+        # that this was what the user intended if the keyword is not present
+        # in the first place.
+        deduplicated_errors = [
+            err for err in deduplicated_errors if not _is_required_value_error(err)
+        ]
+
+        grouped_errors_deduplicated[json_path] = deduplicated_errors
+    return grouped_errors_deduplicated
+
+
+def _is_required_value_error(err: jsonschema.exceptions.ValidationError) -> bool:
+    return err.validator == "required" and err.validator_value == ["value"]
+
+
+def _group_errors_by_validator(errors: ValidationErrorList) -> GroupedValidationErrors:
+    """Groups the errors by the json schema "validator" that casued the error. For
+    example if the error is that a value is not one of an enumeration in the json schema
+    then the "validator" is `"enum"`, if the error is due to an unknown property that
+    was set although no additional properties are allowed then "validator" is
+    `"additionalProperties`, etc.
+    """
+    errors_by_validator: DefaultDict[
+        str, ValidationErrorList
+    ] = collections.defaultdict(list)
+    for err in errors:
+        # Ignore mypy error as err.validator as it wrongly sees err.validator
+        # as of type Optional[Validator] instead of str which it is according
+        # to the documentation and all tested cases
+        errors_by_validator[err.validator].append(err)  # type: ignore[index]
+    return dict(errors_by_validator)
+
+
+def _deduplicate_enum_errors(errors: ValidationErrorList) -> ValidationErrorList:
+    """Deduplicate enum errors by removing the errors where the allowed values
+    are a subset of another error. For example, if `enum` contains two errors
+    and one has `validator_value` (i.e. accepted values) ["A", "B"] and the
+    other one ["A", "B", "C"] then the first one is removed and the final
+    `enum` list only contains the error with ["A", "B", "C"].
+    """
+    if len(errors) > 1:
+        # Values (and therefore `validator_value`) of an enum are always arrays,
+        # see https://json-schema.org/understanding-json-schema/reference/generic.html#enumerated-values
+        # which is why we can use join below
+        value_strings = [",".join(err.validator_value) for err in errors]
+        longest_enums: ValidationErrorList = []
+        for value_str, err in zip(value_strings, errors):
+            if not _contained_at_start_of_one_of_other_values(value_str, value_strings):
+                longest_enums.append(err)
+        errors = longest_enums
+    return errors
+
+
+def _deduplicate_additional_properties_errors(
+    errors: ValidationErrorList,
+) -> ValidationErrorList:
+    """If there are multiple additional property errors it usually means that
+    the offending element was validated against multiple schemas and
+    its parent is a common anyOf validator.
+    The error messages produced from these cases are usually
+    very similar and we just take the shortest one. For example,
+    the following 3 errors are raised for the `unknown` channel option in
+    `alt.X("variety", unknown=2)`:
+    - "Additional properties are not allowed ('unknown' was unexpected)"
+    - "Additional properties are not allowed ('field', 'unknown' were unexpected)"
+    - "Additional properties are not allowed ('field', 'type', 'unknown' were unexpected)"
+    """
+    if len(errors) > 1:
+        # Test if all parent errors are the same anyOf error and only do
+        # the prioritization in these cases. Can't think of a chart spec where this
+        # would not be the case but still allow for it below to not break anything.
+        parent = errors[0].parent
+        if (
+            parent is not None
+            and parent.validator == "anyOf"
+            # Use [1:] as don't have to check for first error as it was used
+            # above to define `parent`
+            and all(err.parent is parent for err in errors[1:])
+        ):
+            errors = [min(errors, key=lambda x: len(x.message))]
+    return errors
+
+
+def _deduplicate_by_message(errors: ValidationErrorList) -> ValidationErrorList:
+    """Deduplicate errors by message. This keeps the original order in case
+    it was chosen intentionally.
+    """
+    return list({e.message: e for e in errors}.values())
+
+
 def _subclasses(cls):
     """Breadth-first sequence of all classes which inherit from cls."""
     seen = set()
@@ -48,18 +328,14 @@ def _subclasses(cls):
             yield cls
 
 
-def _todict(obj, validate, context):
+def _todict(obj, context):
     """Convert an object to a dict representation."""
     if isinstance(obj, SchemaBase):
-        return obj.to_dict(validate=validate, context=context)
+        return obj.to_dict(validate=False, context=context)
     elif isinstance(obj, (list, tuple, np.ndarray)):
-        return [_todict(v, validate, context) for v in obj]
+        return [_todict(v, context) for v in obj]
     elif isinstance(obj, dict):
-        return {
-            k: _todict(v, validate, context)
-            for k, v in obj.items()
-            if v is not Undefined
-        }
+        return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
     elif hasattr(obj, "to_dict"):
         return obj.to_dict()
     elif isinstance(obj, np.number):
@@ -82,47 +358,215 @@ def _resolve_references(schema, root=None):
 class SchemaValidationError(jsonschema.ValidationError):
     """A wrapper for jsonschema.ValidationError with friendlier traceback"""
 
-    def __init__(self, obj, err):
-        super(SchemaValidationError, self).__init__(**self._get_contents(err))
+    def __init__(self, obj: "SchemaBase", err: jsonschema.ValidationError) -> None:
+        super().__init__(**err._contents())
         self.obj = obj
+        self._errors: GroupedValidationErrors = getattr(
+            err, "_all_errors", {getattr(err, "json_path", _json_path(err)): [err]}
+        )
+        # This is the message from err
+        self._original_message = self.message
+        self.message = self._get_message()
+
+    def __str__(self) -> str:
+        return self.message
+
+    def _get_message(self) -> str:
+        def indent_second_line_onwards(message: str, indent: int = 4) -> str:
+            modified_lines: List[str] = []
+            for idx, line in enumerate(message.split("\n")):
+                if idx > 0 and len(line) > 0:
+                    line = " " * indent + line
+                modified_lines.append(line)
+            return "\n".join(modified_lines)
+
+        error_messages: List[str] = []
+        # Only show a maximum of 3 errors as else the final message returned by this
+        # method could get very long.
+        for errors in list(self._errors.values())[:3]:
+            error_messages.append(self._get_message_for_errors_group(errors))
+
+        message = ""
+        if len(error_messages) > 1:
+            error_messages = [
+                indent_second_line_onwards(f"Error {error_id}: {m}")
+                for error_id, m in enumerate(error_messages, start=1)
+            ]
+            message += "Multiple errors were found.\n\n"
+        message += "\n\n".join(error_messages)
+        return message
+
+    def _get_message_for_errors_group(
+        self,
+        errors: ValidationErrorList,
+    ) -> str:
+        if errors[0].validator == "additionalProperties":
+            # During development, we only found cases where an additionalProperties
+            # error was raised if that was the only error for the offending instance
+            # as identifiable by the json path. Therefore, we just check here the first
+            # error. However, other constellations might exist in which case
+            # this should be adapted so that other error messages are shown as well.
+            message = self._get_additional_properties_error_message(errors[0])
+        else:
+            message = self._get_default_error_message(errors=errors)
+
+        return message.strip()
+
+    def _get_additional_properties_error_message(
+        self,
+        error: jsonschema.exceptions.ValidationError,
+    ) -> str:
+        """Output all existing parameters when an unknown parameter is specified."""
+        altair_cls = self._get_altair_class_for_error(error)
+        param_dict_keys = inspect.signature(altair_cls).parameters.keys()
+        param_names_table = self._format_params_as_table(param_dict_keys)
+
+        # Error messages for these errors look like this:
+        # "Additional properties are not allowed ('unknown' was unexpected)"
+        # Line below extracts "unknown" from this string
+        parameter_name = error.message.split("('")[-1].split("'")[0]
+        message = f"""\
+`{altair_cls.__name__}` has no parameter named '{parameter_name}'
+
+Existing parameter names are:
+{param_names_table}
+See the help for `{altair_cls.__name__}` to read the full description of these parameters"""
+        return message
+
+    def _get_altair_class_for_error(
+        self, error: jsonschema.exceptions.ValidationError
+    ) -> Type["SchemaBase"]:
+        """Try to get the lowest class possible in the chart hierarchy so
+        it can be displayed in the error message. This should lead to more informative
+        error messages pointing the user closer to the source of the issue.
+        """
+        for prop_name in reversed(error.absolute_path):
+            # Check if str as e.g. first item can be a 0
+            if isinstance(prop_name, str):
+                potential_class_name = prop_name[0].upper() + prop_name[1:]
+                cls = getattr(vegalite, potential_class_name, None)
+                if cls is not None:
+                    break
+        else:
+            # Did not find a suitable class based on traversing the path so we fall
+            # back on the class of the top-level object which created
+            # the SchemaValidationError
+            cls = self.obj.__class__
+        return cls
 
     @staticmethod
-    def _get_contents(err):
-        """Get a dictionary with the contents of a ValidationError"""
-        try:
-            # works in jsonschema 2.3 or later
-            contents = err._contents()
-        except AttributeError:
-            try:
-                # works in Python >=3.4
-                spec = inspect.getfullargspec(err.__init__)
-            except AttributeError:
-                # works in Python <3.4
-                spec = inspect.getargspec(err.__init__)
-            contents = {key: getattr(err, key) for key in spec.args[1:]}
-        return contents
-
-    def __str__(self):
-        cls = self.obj.__class__
-        schema_path = ["{}.{}".format(cls.__module__, cls.__name__)]
-        schema_path.extend(self.schema_path)
-        schema_path = "->".join(
-            str(val)
-            for val in schema_path[:-1]
-            if val not in ("properties", "additionalProperties", "patternProperties")
+    def _format_params_as_table(param_dict_keys: Iterable[str]) -> str:
+        """Format param names into a table so that they are easier to read"""
+        param_names: Tuple[str, ...]
+        name_lengths: Tuple[int, ...]
+        param_names, name_lengths = zip(  # type: ignore[assignment]  # Mypy does think it's Tuple[Any]
+            *[
+                (name, len(name))
+                for name in param_dict_keys
+                if name not in ["kwds", "self"]
+            ]
         )
-        return """Invalid specification
+        # Worst case scenario with the same longest param name in the same
+        # row for all columns
+        max_name_length = max(name_lengths)
+        max_column_width = 80
+        # Output a square table if not too big (since it is easier to read)
+        num_param_names = len(param_names)
+        square_columns = int(np.ceil(num_param_names**0.5))
+        columns = min(max_column_width // max_name_length, square_columns)
+
+        # Compute roughly equal column heights to evenly divide the param names
+        def split_into_equal_parts(n: int, p: int) -> List[int]:
+            return [n // p + 1] * (n % p) + [n // p] * (p - n % p)
+
+        column_heights = split_into_equal_parts(num_param_names, columns)
+
+        # Section the param names into columns and compute their widths
+        param_names_columns: List[Tuple[str, ...]] = []
+        column_max_widths: List[int] = []
+        last_end_idx: int = 0
+        for ch in column_heights:
+            param_names_columns.append(param_names[last_end_idx : last_end_idx + ch])
+            column_max_widths.append(
+                max([len(param_name) for param_name in param_names_columns[-1]])
+            )
+            last_end_idx = ch + last_end_idx
+
+        # Transpose the param name columns into rows to facilitate looping
+        param_names_rows: List[Tuple[str, ...]] = []
+        for li in zip_longest(*param_names_columns, fillvalue=""):
+            param_names_rows.append(li)
+        # Build the table as a string by iterating over and formatting the rows
+        param_names_table: str = ""
+        for param_names_row in param_names_rows:
+            for num, param_name in enumerate(param_names_row):
+                # Set column width based on the longest param in the column
+                max_name_length_column = column_max_widths[num]
+                column_pad = 3
+                param_names_table += "{:<{}}".format(
+                    param_name, max_name_length_column + column_pad
+                )
+                # Insert newlines and spacing after the last element in each row
+                if num == (len(param_names_row) - 1):
+                    param_names_table += "\n"
+        return param_names_table
+
+    def _get_default_error_message(
+        self,
+        errors: ValidationErrorList,
+    ) -> str:
+        bullet_points: List[str] = []
+        errors_by_validator = _group_errors_by_validator(errors)
+        if "enum" in errors_by_validator:
+            for error in errors_by_validator["enum"]:
+                bullet_points.append(f"one of {error.validator_value}")
+
+        if "type" in errors_by_validator:
+            types = [f"'{err.validator_value}'" for err in errors_by_validator["type"]]
+            point = "of type "
+            if len(types) == 1:
+                point += types[0]
+            elif len(types) == 2:
+                point += f"{types[0]} or {types[1]}"
+            else:
+                point += ", ".join(types[:-1]) + f", or {types[-1]}"
+            bullet_points.append(point)
+
+        # It should not matter which error is specifically used as they are all
+        # about the same offending instance (i.e. invalid value), so we can just
+        # take the first one
+        error = errors[0]
+        # Add a summary line when parameters are passed an invalid value
+        # For example: "'asdf' is an invalid value for `stack`
+        message = f"'{error.instance}' is an invalid value"
+        if error.absolute_path:
+            message += f" for `{error.absolute_path[-1]}`"
+
+        # Add bullet points
+        if len(bullet_points) == 0:
+            message += ".\n\n"
+        elif len(bullet_points) == 1:
+            message += f". Valid values are {bullet_points[0]}.\n\n"
+        else:
+            # We don't use .capitalize below to make the first letter uppercase
+            # as that makes the rest of the message lowercase
+            bullet_points = [point[0].upper() + point[1:] for point in bullet_points]
+            message += ". Valid values are:\n\n"
+            message += "\n".join([f"- {point}" for point in bullet_points])
+            message += "\n\n"
 
-        {}, validating {!r}
+        # Add unformatted messages of any remaining errors which were not
+        # considered so far. This is not expected to be used but more exists
+        # as a fallback for cases which were not known during development.
+        for validator, errors in errors_by_validator.items():
+            if validator not in ("enum", "type"):
+                message += "\n".join([e.message for e in errors])
 
-        {}
-        """.format(
-            schema_path, self.validator, self.message
-        )
+        return message
 
 
-class UndefinedType(object):
-    """A singleton object for marking undefined attributes"""
+class UndefinedType:
+    """A singleton object for marking undefined parameters"""
 
     __instance = None
 
@@ -135,20 +579,23 @@ class UndefinedType(object):
         return "Undefined"
 
 
-Undefined = UndefinedType()
+# In the future Altair may implement a more complete set of type hints.
+# But for now, we'll add an annotation to indicate that the type checker
+# should permit any value passed to a function argument whose default
+# value is Undefined.
+Undefined: Any = UndefinedType()
 
 
-class SchemaBase(object):
+class SchemaBase:
     """Base class for schema wrappers.
 
     Each derived class should set the _schema class attribute (and optionally
     the _rootschema class attribute) which is used for validation.
     """
 
-    _schema = None
-    _rootschema = None
+    _schema: Optional[Dict[str, Any]] = None
+    _rootschema: Optional[Dict[str, Any]] = None
     _class_is_valid_at_instantiation = True
-    _validator = jsonschema.Draft7Validator
 
     def __init__(self, *args, **kwds):
         # Two valid options for initialization, which should be handled by
@@ -290,11 +737,9 @@ class SchemaBase(object):
 
         Parameters
         ----------
-        validate : boolean or string
+        validate : boolean
             If True (default), then validate the output dictionary
-            against the schema. If "deep" then recursively validate
-            all objects in the spec. This takes much more time, but
-            it results in friendlier tracebacks for large objects.
+            against the schema.
         ignore : list
             A list of keys to ignore. This will *not* passed to child to_dict
             function calls.
@@ -316,14 +761,38 @@ class SchemaBase(object):
             context = {}
         if ignore is None:
             ignore = []
-        sub_validate = "deep" if validate == "deep" else False
 
         if self._args and not self._kwds:
-            result = _todict(self._args[0], validate=sub_validate, context=context)
+            result = _todict(self._args[0], context=context)
         elif not self._args:
+            kwds = self._kwds.copy()
+            # parsed_shorthand is added by FieldChannelMixin.
+            # It's used below to replace shorthand with its long form equivalent
+            # parsed_shorthand is removed from context if it exists so that it is
+            # not passed to child to_dict function calls
+            parsed_shorthand = context.pop("parsed_shorthand", {})
+            # Prevent that pandas categorical data is automatically sorted
+            # when a non-ordinal data type is specifed manually
+            # or if the encoding channel does not support sorting
+            if "sort" in parsed_shorthand and (
+                "sort" not in kwds or kwds["type"] not in ["ordinal", Undefined]
+            ):
+                parsed_shorthand.pop("sort")
+
+            kwds.update(
+                {
+                    k: v
+                    for k, v in parsed_shorthand.items()
+                    if kwds.get(k, Undefined) is Undefined
+                }
+            )
+            kwds = {
+                k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
+            }
+            if "mark" in kwds and isinstance(kwds["mark"], str):
+                kwds["mark"] = {"type": kwds["mark"]}
             result = _todict(
-                {k: v for k, v in self._kwds.items() if k not in ignore},
-                validate=sub_validate,
+                kwds,
                 context=context,
             )
         else:
@@ -335,22 +804,31 @@ class SchemaBase(object):
             try:
                 self.validate(result)
             except jsonschema.ValidationError as err:
-                raise SchemaValidationError(self, err)
+                # We do not raise `from err` as else the resulting
+                # traceback is very long as it contains part
+                # of the Vega-Lite schema. It would also first
+                # show the less helpful ValidationError instead of
+                # the more user friendly SchemaValidationError
+                raise SchemaValidationError(self, err) from None
         return result
 
     def to_json(
-        self, validate=True, ignore=[], context={}, indent=2, sort_keys=True, **kwargs
+        self,
+        validate=True,
+        ignore=None,
+        context=None,
+        indent=2,
+        sort_keys=True,
+        **kwargs,
     ):
         """Emit the JSON representation for this object as a string.
 
         Parameters
         ----------
-        validate : boolean or string
+        validate : boolean
             If True (default), then validate the output dictionary
-            against the schema. If "deep" then recursively validate
-            all objects in the spec. This takes much more time, but
-            it results in friendlier tracebacks for large objects.
-        ignore : list
+            against the schema.
+        ignore : list (optional)
             A list of keys to ignore. This will *not* passed to child to_dict
             function calls.
         context : dict (optional)
@@ -368,6 +846,10 @@ class SchemaBase(object):
         spec : string
             The JSON specification of the chart object.
         """
+        if ignore is None:
+            ignore = []
+        if context is None:
+            context = {}
         dct = self.to_dict(validate=validate, ignore=ignore, context=context)
         return json.dumps(dct, indent=indent, sort_keys=sort_keys, **kwargs)
 
@@ -437,9 +919,8 @@ class SchemaBase(object):
         """
         if schema is None:
             schema = cls._schema
-        resolver = jsonschema.RefResolver.from_schema(cls._rootschema or cls._schema)
-        return jsonschema.validate(
-            instance, schema, cls=cls._validator, resolver=resolver
+        return validate_jsonschema(
+            instance, schema, rootschema=cls._rootschema or cls._schema
         )
 
     @classmethod
@@ -456,20 +937,21 @@ class SchemaBase(object):
         Validate a property against property schema in the context of the
         rootschema
         """
-        value = _todict(value, validate=False, context={})
+        value = _todict(value, context={})
         props = cls.resolve_references(schema or cls._schema).get("properties", {})
-        resolver = jsonschema.RefResolver.from_schema(cls._rootschema or cls._schema)
-        return jsonschema.validate(value, props.get(name, {}), resolver=resolver)
+        return validate_jsonschema(
+            value, props.get(name, {}), rootschema=cls._rootschema or cls._schema
+        )
 
     def __dir__(self):
-        return list(self._kwds.keys())
+        return sorted(super().__dir__() + list(self._kwds.keys()))
 
 
 def _passthrough(*args, **kwds):
     return args[0] if args else kwds
 
 
-class _FromDict(object):
+class _FromDict:
     """Class used to construct SchemaBase class hierarchies from a dict
 
     The primary purpose of using this class is to be able to build a hash table
@@ -551,9 +1033,8 @@ class _FromDict(object):
         if "anyOf" in schema or "oneOf" in schema:
             schemas = schema.get("anyOf", []) + schema.get("oneOf", [])
             for possible_schema in schemas:
-                resolver = jsonschema.RefResolver.from_schema(rootschema)
                 try:
-                    jsonschema.validate(dct, possible_schema, resolver=resolver)
+                    validate_jsonschema(dct, possible_schema, rootschema=rootschema)
                 except jsonschema.ValidationError:
                     continue
                 else:
@@ -583,3 +1064,61 @@ class _FromDict(object):
             return cls(dct)
         else:
             return cls(dct)
+
+
+class _PropertySetter:
+    def __init__(self, prop, schema):
+        self.prop = prop
+        self.schema = schema
+
+    def __get__(self, obj, cls):
+        self.obj = obj
+        self.cls = cls
+        # The docs from the encoding class parameter (e.g. `bin` in X, Color,
+        # etc); this provides a general description of the parameter.
+        self.__doc__ = self.schema["description"].replace("__", "**")
+        property_name = f"{self.prop}"[0].upper() + f"{self.prop}"[1:]
+        if hasattr(vegalite, property_name):
+            altair_prop = getattr(vegalite, property_name)
+            # Add the docstring from the helper class (e.g. `BinParams`) so
+            # that all the parameter names of the helper class are included in
+            # the final docstring
+            parameter_index = altair_prop.__doc__.find("Parameters\n")
+            if parameter_index > -1:
+                self.__doc__ = (
+                    altair_prop.__doc__[:parameter_index].replace("    ", "")
+                    + self.__doc__
+                    + textwrap.dedent(
+                        f"\n\n    {altair_prop.__doc__[parameter_index:]}"
+                    )
+                )
+            # For short docstrings such as Aggregate, Stack, et
+            else:
+                self.__doc__ = (
+                    altair_prop.__doc__.replace("    ", "") + "\n" + self.__doc__
+                )
+            # Add signatures and tab completion for the method and parameter names
+            self.__signature__ = inspect.signature(altair_prop)
+            self.__wrapped__ = inspect.getfullargspec(altair_prop)
+            self.__name__ = altair_prop.__name__
+        else:
+            # It seems like bandPosition is the only parameter that doesn't
+            # have a helper class.
+            pass
+        return self
+
+    def __call__(self, *args, **kwargs):
+        obj = self.obj.copy()
+        # TODO: use schema to validate
+        obj[self.prop] = args[0] if args else kwargs
+        return obj
+
+
+def with_property_setters(cls):
+    """
+    Decorator to add property setters to a Schema class.
+    """
+    schema = cls.resolve_references()
+    for prop, propschema in schema.get("properties", {}).items():
+        setattr(cls, prop, _PropertySetter(prop, propschema))
+    return cls
diff --git a/tools/schemapi/tests/__init__.py b/tools/schemapi/tests/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/tools/schemapi/tests/test_decorator.py b/tools/schemapi/tests/test_decorator.py
deleted file mode 100644
index 92b27e6..0000000
--- a/tools/schemapi/tests/test_decorator.py
+++ /dev/null
@@ -1,65 +0,0 @@
-import inspect
-
-from .. import SchemaBase, Undefined, schemaclass
-
-
-@schemaclass
-class MySchema(SchemaBase):
-    _schema = {
-        "definitions": {
-            "StringMapping": {
-                "type": "object",
-                "additionalProperties": {"type": "string"},
-            },
-            "StringArray": {"type": "array", "items": {"type": "string"}},
-        },
-        "properties": {
-            "a": {"$ref": "#/definitions/StringMapping"},
-            "a2": {"type": "object", "additionalProperties": {"type": "number"}},
-            "b": {"$ref": "#/definitions/StringArray"},
-            "b2": {"type": "array", "items": {"type": "number"}},
-            "c": {"type": ["string", "number"]},
-            "d": {
-                "anyOf": [
-                    {"$ref": "#/definitions/StringMapping"},
-                    {"$ref": "#/definitions/StringArray"},
-                ]
-            },
-        },
-        "required": ["a", "b"],
-    }
-
-
-@schemaclass
-class StringArray(SchemaBase):
-    _schema = MySchema._schema["definitions"]["StringArray"]
-    _rootschema = MySchema._schema
-
-
-def test_myschema_decorator():
-    myschema = MySchema({"foo": "bar"}, ["foo", "bar"])
-    assert myschema.to_dict() == {"a": {"foo": "bar"}, "b": ["foo", "bar"]}
-
-    myschema = MySchema.from_dict({"a": {"foo": "bar"}, "b": ["foo", "bar"]})
-    assert myschema.to_dict() == {"a": {"foo": "bar"}, "b": ["foo", "bar"]}
-
-    assert MySchema.__doc__.startswith("MySchema schema wrapper")
-    argspec = inspect.getfullargspec(MySchema.__init__)
-    assert argspec.args == ["self", "a", "b", "a2", "b2", "c", "d"]
-    assert argspec.defaults == 6 * (Undefined,)
-    assert argspec.varargs is None
-    assert argspec.varkw == "kwds"
-
-
-def test_stringarray_decorator():
-    arr = StringArray(["a", "b", "c"])
-    assert arr.to_dict() == ["a", "b", "c"]
-
-    arr = StringArray.from_dict(["a", "b", "c"])
-    assert arr.to_dict() == ["a", "b", "c"]
-
-    assert arr.__doc__.startswith("StringArray schema wrapper")
-    argspec = inspect.getfullargspec(StringArray.__init__)
-    assert argspec.args == ["self"]
-    assert argspec.varargs == "args"
-    assert argspec.varkw is None
diff --git a/tools/schemapi/tests/test_schemapi.py b/tools/schemapi/tests/test_schemapi.py
deleted file mode 100644
index 74ea431..0000000
--- a/tools/schemapi/tests/test_schemapi.py
+++ /dev/null
@@ -1,349 +0,0 @@
-import copy
-import io
-import json
-import jsonschema
-import pickle
-import pytest
-
-import numpy as np
-
-from ..schemapi import (
-    UndefinedType,
-    SchemaBase,
-    Undefined,
-    _FromDict,
-    SchemaValidationError,
-)
-
-# Make tests inherit from _TestSchema, so that when we test from_dict it won't
-# try to use SchemaBase objects defined elsewhere as wrappers.
-
-
-class _TestSchema(SchemaBase):
-    @classmethod
-    def _default_wrapper_classes(cls):
-        return _TestSchema.__subclasses__()
-
-
-class MySchema(_TestSchema):
-    _schema = {
-        "definitions": {
-            "StringMapping": {
-                "type": "object",
-                "additionalProperties": {"type": "string"},
-            },
-            "StringArray": {"type": "array", "items": {"type": "string"}},
-        },
-        "properties": {
-            "a": {"$ref": "#/definitions/StringMapping"},
-            "a2": {"type": "object", "additionalProperties": {"type": "number"}},
-            "b": {"$ref": "#/definitions/StringArray"},
-            "b2": {"type": "array", "items": {"type": "number"}},
-            "c": {"type": ["string", "number"]},
-            "d": {
-                "anyOf": [
-                    {"$ref": "#/definitions/StringMapping"},
-                    {"$ref": "#/definitions/StringArray"},
-                ]
-            },
-            "e": {"items": [{"type": "string"}, {"type": "string"}]},
-        },
-    }
-
-
-class StringMapping(_TestSchema):
-    _schema = {"$ref": "#/definitions/StringMapping"}
-    _rootschema = MySchema._schema
-
-
-class StringArray(_TestSchema):
-    _schema = {"$ref": "#/definitions/StringArray"}
-    _rootschema = MySchema._schema
-
-
-class Derived(_TestSchema):
-    _schema = {
-        "definitions": {
-            "Foo": {"type": "object", "properties": {"d": {"type": "string"}}},
-            "Bar": {"type": "string", "enum": ["A", "B"]},
-        },
-        "type": "object",
-        "additionalProperties": False,
-        "properties": {
-            "a": {"type": "integer"},
-            "b": {"type": "string"},
-            "c": {"$ref": "#/definitions/Foo"},
-        },
-    }
-
-
-class Foo(_TestSchema):
-    _schema = {"$ref": "#/definitions/Foo"}
-    _rootschema = Derived._schema
-
-
-class Bar(_TestSchema):
-    _schema = {"$ref": "#/definitions/Bar"}
-    _rootschema = Derived._schema
-
-
-class SimpleUnion(_TestSchema):
-    _schema = {"anyOf": [{"type": "integer"}, {"type": "string"}]}
-
-
-class DefinitionUnion(_TestSchema):
-    _schema = {"anyOf": [{"$ref": "#/definitions/Foo"}, {"$ref": "#/definitions/Bar"}]}
-    _rootschema = Derived._schema
-
-
-class SimpleArray(_TestSchema):
-    _schema = {
-        "type": "array",
-        "items": {"anyOf": [{"type": "integer"}, {"type": "string"}]},
-    }
-
-
-class InvalidProperties(_TestSchema):
-    _schema = {
-        "type": "object",
-        "properties": {"for": {}, "as": {}, "vega-lite": {}, "$schema": {}},
-    }
-
-
-def test_construct_multifaceted_schema():
-    dct = {
-        "a": {"foo": "bar"},
-        "a2": {"foo": 42},
-        "b": ["a", "b", "c"],
-        "b2": [1, 2, 3],
-        "c": 42,
-        "d": ["x", "y", "z"],
-        "e": ["a", "b"],
-    }
-
-    myschema = MySchema.from_dict(dct)
-    assert myschema.to_dict() == dct
-
-    myschema2 = MySchema(**dct)
-    assert myschema2.to_dict() == dct
-
-    assert isinstance(myschema.a, StringMapping)
-    assert isinstance(myschema.a2, dict)
-    assert isinstance(myschema.b, StringArray)
-    assert isinstance(myschema.b2, list)
-    assert isinstance(myschema.d, StringArray)
-
-
-def test_schema_cases():
-    assert Derived(a=4, b="yo").to_dict() == {"a": 4, "b": "yo"}
-    assert Derived(a=4, c={"d": "hey"}).to_dict() == {"a": 4, "c": {"d": "hey"}}
-    assert Derived(a=4, b="5", c=Foo(d="val")).to_dict() == {
-        "a": 4,
-        "b": "5",
-        "c": {"d": "val"},
-    }
-    assert Foo(d="hello", f=4).to_dict() == {"d": "hello", "f": 4}
-
-    assert Derived().to_dict() == {}
-    assert Foo().to_dict() == {}
-
-    with pytest.raises(jsonschema.ValidationError):
-        # a needs to be an integer
-        Derived(a="yo").to_dict()
-
-    with pytest.raises(jsonschema.ValidationError):
-        # Foo.d needs to be a string
-        Derived(c=Foo(4)).to_dict()
-
-    with pytest.raises(jsonschema.ValidationError):
-        # no additional properties allowed
-        Derived(foo="bar").to_dict()
-
-
-def test_round_trip():
-    D = {"a": 4, "b": "yo"}
-    assert Derived.from_dict(D).to_dict() == D
-
-    D = {"a": 4, "c": {"d": "hey"}}
-    assert Derived.from_dict(D).to_dict() == D
-
-    D = {"a": 4, "b": "5", "c": {"d": "val"}}
-    assert Derived.from_dict(D).to_dict() == D
-
-    D = {"d": "hello", "f": 4}
-    assert Foo.from_dict(D).to_dict() == D
-
-
-def test_from_dict():
-    D = {"a": 4, "b": "5", "c": {"d": "val"}}
-    obj = Derived.from_dict(D)
-    assert obj.a == 4
-    assert obj.b == "5"
-    assert isinstance(obj.c, Foo)
-
-
-def test_simple_type():
-    assert SimpleUnion(4).to_dict() == 4
-
-
-def test_simple_array():
-    assert SimpleArray([4, 5, "six"]).to_dict() == [4, 5, "six"]
-    assert SimpleArray.from_dict(list("abc")).to_dict() == list("abc")
-
-
-def test_definition_union():
-    obj = DefinitionUnion.from_dict("A")
-    assert isinstance(obj, Bar)
-    assert obj.to_dict() == "A"
-
-    obj = DefinitionUnion.from_dict("B")
-    assert isinstance(obj, Bar)
-    assert obj.to_dict() == "B"
-
-    obj = DefinitionUnion.from_dict({"d": "yo"})
-    assert isinstance(obj, Foo)
-    assert obj.to_dict() == {"d": "yo"}
-
-
-def test_invalid_properties():
-    dct = {"for": 2, "as": 3, "vega-lite": 4, "$schema": 5}
-    invalid = InvalidProperties.from_dict(dct)
-    assert invalid["for"] == 2
-    assert invalid["as"] == 3
-    assert invalid["vega-lite"] == 4
-    assert invalid["$schema"] == 5
-    assert invalid.to_dict() == dct
-
-
-def test_undefined_singleton():
-    assert Undefined is UndefinedType()
-
-
-@pytest.fixture
-def dct():
-    return {
-        "a": {"foo": "bar"},
-        "a2": {"foo": 42},
-        "b": ["a", "b", "c"],
-        "b2": [1, 2, 3],
-        "c": 42,
-        "d": ["x", "y", "z"],
-    }
-
-
-def test_copy_method(dct):
-    myschema = MySchema.from_dict(dct)
-
-    # Make sure copy is deep
-    copy = myschema.copy(deep=True)
-    copy["a"]["foo"] = "new value"
-    copy["b"] = ["A", "B", "C"]
-    copy["c"] = 164
-    assert myschema.to_dict() == dct
-
-    # If we ignore a value, changing the copy changes the original
-    copy = myschema.copy(deep=True, ignore=["a"])
-    copy["a"]["foo"] = "new value"
-    copy["b"] = ["A", "B", "C"]
-    copy["c"] = 164
-    mydct = myschema.to_dict()
-    assert mydct["a"]["foo"] == "new value"
-    assert mydct["b"][0] == dct["b"][0]
-    assert mydct["c"] == dct["c"]
-
-    # If copy is not deep, then changing copy below top level changes original
-    copy = myschema.copy(deep=False)
-    copy["a"]["foo"] = "baz"
-    copy["b"] = ["A", "B", "C"]
-    copy["c"] = 164
-    mydct = myschema.to_dict()
-    assert mydct["a"]["foo"] == "baz"
-    assert mydct["b"] == dct["b"]
-    assert mydct["c"] == dct["c"]
-
-
-def test_copy_module(dct):
-    myschema = MySchema.from_dict(dct)
-
-    cp = copy.deepcopy(myschema)
-    cp["a"]["foo"] = "new value"
-    cp["b"] = ["A", "B", "C"]
-    cp["c"] = 164
-    assert myschema.to_dict() == dct
-
-
-def test_attribute_error():
-    m = MySchema()
-    with pytest.raises(AttributeError) as err:
-        m.invalid_attribute
-    assert str(err.value) == (
-        "'MySchema' object has no attribute " "'invalid_attribute'"
-    )
-
-
-def test_to_from_json(dct):
-    json_str = MySchema.from_dict(dct).to_json()
-    new_dct = MySchema.from_json(json_str).to_dict()
-
-    assert new_dct == dct
-
-
-def test_to_from_pickle(dct):
-    myschema = MySchema.from_dict(dct)
-    output = io.BytesIO()
-    pickle.dump(myschema, output)
-    output.seek(0)
-    myschema_new = pickle.load(output)
-
-    assert myschema_new.to_dict() == dct
-
-
-def test_class_with_no_schema():
-    class BadSchema(SchemaBase):
-        pass
-
-    with pytest.raises(ValueError) as err:
-        BadSchema(4)
-    assert str(err.value).startswith("Cannot instantiate object")
-
-
-@pytest.mark.parametrize("use_json", [True, False])
-def test_hash_schema(use_json):
-    classes = _TestSchema._default_wrapper_classes()
-
-    for cls in classes:
-        hsh1 = _FromDict.hash_schema(cls._schema, use_json=use_json)
-        hsh2 = _FromDict.hash_schema(cls._schema, use_json=use_json)
-        assert hsh1 == hsh2
-        assert hash(hsh1) == hash(hsh2)
-
-
-def test_schema_validation_error():
-    try:
-        MySchema(a={"foo": 4})
-        the_err = None
-    except jsonschema.ValidationError as err:
-        the_err = err
-
-    assert isinstance(the_err, SchemaValidationError)
-    message = str(the_err)
-
-    assert message.startswith("Invalid specification")
-    assert "test_schemapi.MySchema->a" in message
-    assert "validating {!r}".format(the_err.validator) in message
-    assert the_err.message in message
-
-
-def test_serialize_numpy_types():
-    m = MySchema(
-        a={"date": np.datetime64("2019-01-01")},
-        a2={"int64": np.int64(1), "float64": np.float64(2)},
-        b2=np.arange(4),
-    )
-    out = m.to_json()
-    dct = json.loads(out)
-    assert dct == {
-        "a": {"date": "2019-01-01T00:00:00"},
-        "a2": {"int64": 1, "float64": 2},
-        "b2": [0, 1, 2, 3],
-    }
diff --git a/tools/schemapi/tests/test_utils.py b/tools/schemapi/tests/test_utils.py
deleted file mode 100644
index fa50bc2..0000000
--- a/tools/schemapi/tests/test_utils.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import pytest
-
-from ..utils import get_valid_identifier, SchemaInfo
-from ..schemapi import _FromDict
-
-
-@pytest.fixture
-def refschema():
-    return {
-        "$ref": "#/definitions/Foo",
-        "definitions": {
-            "Foo": {"$ref": "#/definitions/Bar"},
-            "Bar": {"$ref": "#/definitions/Baz"},
-            "Baz": {"type": "string"},
-        },
-    }
-
-
-def test_get_valid_identifier():
-    assert get_valid_identifier("$schema") == "schema"
-    assert get_valid_identifier("$ref") == "ref"
-    assert get_valid_identifier("foo-bar") == "foobar"
-    assert get_valid_identifier("$as") == "as_"
-    assert get_valid_identifier("for") == "for_"
-    assert get_valid_identifier("--") == "_"
-
-
-@pytest.mark.parametrize("use_json", [True, False])
-def test_hash_schema(refschema, use_json):
-    copy = refschema.copy()
-    copy["description"] = "A schema"
-    copy["title"] = "Schema to test"
-    assert _FromDict.hash_schema(refschema) == _FromDict.hash_schema(copy)
-
-
-@pytest.mark.parametrize(
-    "schema, expected",
-    [
-        ({}, "Any"),
-        ({"type": "number"}, "float"),
-        ({"enum": ["A", "B", "C"]}, "enum('A', 'B', 'C')"),
-        ({"type": "array"}, "List(Any)"),
-        ({"type": "object"}, "Mapping(required=[])"),
-        (
-            {"type": "string", "not": {"enum": ["A", "B", "C"]}},
-            "not enum('A', 'B', 'C')",
-        ),
-    ],
-)
-def test_medium_description(schema, expected):
-    description = SchemaInfo(schema).medium_description
-    assert description == expected
diff --git a/tools/schemapi/utils.py b/tools/schemapi/utils.py
index d0b149f..6152971 100644
--- a/tools/schemapi/utils.py
+++ b/tools/schemapi/utils.py
@@ -1,8 +1,6 @@
 """Utilities for working with schemas"""
 
-import json
 import keyword
-import pkgutil
 import re
 import textwrap
 import urllib
@@ -13,12 +11,6 @@ import jsonschema
 EXCLUDE_KEYS = ("definitions", "title", "description", "$schema", "id")
 
 
-def load_metaschema():
-    schema = pkgutil.get_data("schemapi", "jsonschema-draft04.json")
-    schema = schema.decode()
-    return json.loads(schema)
-
-
 def resolve_references(schema, root=None):
     """Resolve References within a JSON schema"""
     resolver = jsonschema.RefResolver.from_schema(root or schema)
@@ -102,7 +94,7 @@ def is_valid_identifier(var, allow_unicode=False):
     return is_valid and not keyword.iskeyword(var)
 
 
-class SchemaProperties(object):
+class SchemaProperties:
     """A wrapper for properties within a schema"""
 
     def __init__(self, properties, schema, rootschema=None):
@@ -141,10 +133,10 @@ class SchemaProperties(object):
         return (self[key] for key in self)
 
 
-class SchemaInfo(object):
+class SchemaInfo:
     """A wrapper for inspecting a JSON schema"""
 
-    def __init__(self, schema, rootschema=None, validate=False):
+    def __init__(self, schema, rootschema=None):
         if hasattr(schema, "_schema"):
             if hasattr(schema, "_rootschema"):
                 schema, rootschema = schema._schema, schema._rootschema
@@ -152,10 +144,6 @@ class SchemaInfo(object):
                 schema, rootschema = schema._schema, schema._schema
         elif not rootschema:
             rootschema = schema
-        if validate:
-            metaschema = load_metaschema()
-            jsonschema.validate(schema, metaschema)
-            jsonschema.validate(rootschema, metaschema)
         self.raw_schema = schema
         self.rootschema = rootschema
         self.schema = resolve_references(schema, rootschema)
@@ -192,17 +180,18 @@ class SchemaInfo(object):
         else:
             return self.medium_description
 
+    _simple_types = {
+        "string": "string",
+        "number": "float",
+        "integer": "integer",
+        "object": "mapping",
+        "boolean": "boolean",
+        "array": "list",
+        "null": "None",
+    }
+
     @property
     def medium_description(self):
-        _simple_types = {
-            "string": "string",
-            "number": "float",
-            "integer": "integer",
-            "object": "mapping",
-            "boolean": "boolean",
-            "array": "list",
-            "null": "None",
-        }
         if self.is_list():
             return "[{0}]".format(
                 ", ".join(self.child(s).short_description for s in self.schema)
@@ -236,12 +225,15 @@ class SchemaInfo(object):
             return "Mapping(required=[{}])".format(", ".join(self.required))
         elif self.is_array():
             return "List({})".format(self.child(self.items).short_description)
-        elif self.type in _simple_types:
-            return _simple_types[self.type]
+        elif self.type in self._simple_types:
+            return self._simple_types[self.type]
         elif not self.type:
             import warnings
 
-            warnings.warn("no short_description for schema\n{}" "".format(self.schema))
+            warnings.warn(
+                "no short_description for schema\n{}" "".format(self.schema),
+                stacklevel=1,
+            )
             return "any"
 
     @property
@@ -311,7 +303,27 @@ class SchemaInfo(object):
 
     @property
     def description(self):
-        return self.raw_schema.get("description", self.schema.get("description", ""))
+        return self._get_description(include_sublevels=False)
+
+    @property
+    def deep_description(self):
+        return self._get_description(include_sublevels=True)
+
+    def _get_description(self, include_sublevels: bool = False):
+        desc = self.raw_schema.get("description", self.schema.get("description", ""))
+        if not desc and include_sublevels:
+            for item in self.anyOf:
+                sub_desc = item._get_description(include_sublevels=False)
+                if desc and sub_desc:
+                    raise ValueError(
+                        "There are multiple potential descriptions which could"
+                        + " be used for the currently inspected schema. You'll need to"
+                        + " clarify which one is the correct one.\n"
+                        + str(self.schema)
+                    )
+                if sub_desc:
+                    desc = sub_desc
+        return desc
 
     def is_list(self):
         return isinstance(self.schema, list)
@@ -428,12 +440,21 @@ def indent_docstring(lines, indent_level, width=100, lstrip=True):
                 drop_whitespace=True,
             )
             for line in stripped.split("\n"):
-                if line == "":
+                line_stripped = line.lstrip()
+                line_stripped = fix_docstring_issues(line_stripped)
+                if line_stripped == "":
                     final_lines.append("")
-                elif line.startswith("* "):
-                    final_lines.extend(list_wrapper.wrap(line[2:]))
+                elif line_stripped.startswith("* "):
+                    final_lines.extend(list_wrapper.wrap(line_stripped[2:]))
+                # Matches lines where an attribute is mentioned followed by the accepted
+                # types (lines starting with a character sequence that
+                # does not contain white spaces or '*' followed by ' : ').
+                # It therefore matches 'condition : anyOf(...' but not '**Notes** : ...'
+                # These lines should not be wrapped at all but appear on one line
+                elif re.match(r"[^\s*]+ : ", line_stripped):
+                    final_lines.append(indent * " " + line_stripped)
                 else:
-                    final_lines.extend(wrapper.wrap(line.lstrip()))
+                    final_lines.extend(wrapper.wrap(line_stripped))
 
         # If this is the last line, put in an indent
         elif i + 1 == len(lines):
@@ -453,3 +474,30 @@ def indent_docstring(lines, indent_level, width=100, lstrip=True):
     if lstrip:
         wrapped = wrapped.lstrip()
     return wrapped
+
+
+def fix_docstring_issues(docstring):
+    # All lists should start with '*' followed by a whitespace. Fixes the ones
+    # which either do not have a whitespace or/and start with '-' by first replacing
+    # "-" with "*" and then adding a whitespace where necessary
+    docstring = re.sub(
+        r"^-(?=[ `\"a-z])",
+        "*",
+        docstring,
+        flags=re.MULTILINE,
+    )
+    # Now add a whitespace where an asterisk is followed by one of the characters
+    # in the square brackets of the regex pattern
+    docstring = re.sub(
+        r"^\*(?=[`\"a-z])",
+        "* ",
+        docstring,
+        flags=re.MULTILINE,
+    )
+
+    # Links to the vega-lite documentation cannot be relative but instead need to
+    # contain the full URL.
+    docstring = docstring.replace(
+        "types#datetime", "https://vega.github.io/vega-lite/docs/datetime.html"
+    )
+    return docstring
diff --git a/tools/update_init_file.py b/tools/update_init_file.py
new file mode 100644
index 0000000..9c4894d
--- /dev/null
+++ b/tools/update_init_file.py
@@ -0,0 +1,98 @@
+"""
+This script updates the attribute __all__ in altair/__init__.py
+based on the updated Altair schema.
+"""
+import inspect
+import sys
+from pathlib import Path
+from os.path import abspath, dirname, join
+from typing import TypeVar, Type, cast, List, Any
+
+import black
+
+if sys.version_info >= (3, 11):
+    from typing import Self
+else:
+    from typing_extensions import Self
+
+if sys.version_info >= (3, 8):
+    from typing import Literal
+else:
+    from typing_extensions import Literal
+
+# Import Altair from head
+ROOT_DIR = abspath(join(dirname(__file__), ".."))
+sys.path.insert(0, ROOT_DIR)
+import altair as alt  # noqa: E402
+
+
+def update__all__variable():
+    """Updates the __all__ variable to all relevant attributes of top-level Altair.
+    This is for example useful to hide deprecated attributes from code completion in
+    Jupyter.
+    """
+    # Read existing file content
+    init_path = alt.__file__
+    with open(init_path, "r") as f:
+        lines = f.readlines()
+    lines = [line.strip("\n") for line in lines]
+
+    # Find first and last line of the definition of __all__
+    first_definition_line = None
+    last_definition_line = None
+    for idx, line in enumerate(lines):
+        if line.startswith("__all__ ="):
+            first_definition_line = idx
+        elif first_definition_line is not None and line.startswith("]"):
+            last_definition_line = idx
+            break
+    assert first_definition_line is not None and last_definition_line is not None
+
+    # Figure out which attributes are relevant
+    relevant_attributes = [x for x in alt.__dict__ if _is_relevant_attribute(x)]
+    relevant_attributes.sort()
+    relevant_attributes_str = f"__all__ = {relevant_attributes}"
+
+    # Put file back together, replacing old definition of __all__ with new one, keeping
+    # the rest of the file as is
+    new_lines = (
+        lines[:first_definition_line]
+        + [relevant_attributes_str]
+        + lines[last_definition_line + 1 :]
+    )
+    # Format file content with black
+    new_file_content = black.format_str("\n".join(new_lines), mode=black.Mode())
+
+    # Write new version of altair/__init__.py
+    with open(init_path, "w") as f:
+        f.write(new_file_content)
+
+
+def _is_relevant_attribute(attr_name):
+    attr = getattr(alt, attr_name)
+    if (
+        getattr(attr, "_deprecated", False) is True
+        or attr_name.startswith("_")
+        or attr is TypeVar
+        or attr is Self
+        or attr is Type
+        or attr is cast
+        or attr is List
+        or attr is Any
+        or attr is Literal
+    ):
+        return False
+    else:
+        if inspect.ismodule(attr):
+            # Only include modules which are part of Altair. This excludes built-in
+            # modules (they do not have a __file__ attribute), standard library,
+            # and third-party packages.
+            return getattr(attr, "__file__", "").startswith(
+                str(Path(alt.__file__).parent)
+            )
+        else:
+            return True
+
+
+if __name__ == "__main__":
+    update__all__variable()

More details

Full run details

Historical runs